diff --git a/.bcr/README.md b/.bcr/README.md new file mode 100644 index 00000000..44ae7fe5 --- /dev/null +++ b/.bcr/README.md @@ -0,0 +1,9 @@ +# Bazel Central Registry + +When the ruleset is released, we want it to be published to the +Bazel Central Registry automatically: + + +This folder contains configuration files to automate the publish step. +See +for authoritative documentation about these files. diff --git a/.bcr/metadata.template.json b/.bcr/metadata.template.json new file mode 100644 index 00000000..9b2b52de --- /dev/null +++ b/.bcr/metadata.template.json @@ -0,0 +1,16 @@ +{ + "homepage": "https://github.com/ArthurSonzogni/FTXUI", + "maintainers": [ + { + "name": "Arthur Sonzogni", + "email": "sonzogniarthur@gmail.com", + "github": "ArthurSonzogni", + "github_user_id": 4759106 + } + ], + "repository": [ + "github:ArthurSonzogni/FTXUI" + ], + "versions": [], + "yanked_versions": {} +} diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml new file mode 100644 index 00000000..658def63 --- /dev/null +++ b/.bcr/presubmit.yml @@ -0,0 +1,24 @@ +# Copyright 2025 Arthur Sonzogni. All rights reserved. +# Use of this source code is governed by the MIT license that can be found in +# the LICENSE file. +matrix: + platform: + - centos7 + - debian10 + - ubuntu2004 + - macos + - windows + bazel: [6.x, 7.x, 8.x] +tasks: + verify_targets: + name: Build and test. + platform: ${{ platform }} + bazel: ${{ bazel }} + build_targets: + - '@ftxui//:ftxui' + - '@ftxui//:screen' + - '@ftxui//:dom' + - '@ftxui//:component' + test_targets: + - '@ftxui//:tests' + diff --git a/.bcr/source.template.json b/.bcr/source.template.json new file mode 100644 index 00000000..6a897698 --- /dev/null +++ b/.bcr/source.template.json @@ -0,0 +1,5 @@ +{ + "integrity": "", + "strip_prefix": "", + "url": "https://github.com/ArthurSonzogni/FTXUI/releases/download/{TAG}/source.tar.gz" +} diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f9149b74..f22c9182 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,8 +10,41 @@ on: - main jobs: - test: - name: "Tests" + + test_bazel: + name: "Bazel, ${{ matrix.compiler }}, ${{ matrix.os }}" + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + compiler: gcc + + - os: ubuntu-latest + compiler: llvm + + - os: macos-latest + compiler: llvm + + - os: macos-latest + compiler: gcc + + - os: windows-latest + compiler: cl + + runs-on: ${{ matrix.os }} + steps: + - name: "Checkout repository" + uses: actions/checkout@v3 + + - name: "Build with Bazel" + run: bazel build ... + + - name: "Tests with Bazel" + run: bazel run tests + + test_cmake: + name: "CMake, ${{ matrix.compiler }}, ${{ matrix.os }}" strategy: fail-fast: false matrix: @@ -122,7 +155,9 @@ jobs: # Create a release on new v* tags release: - needs: test + needs: + - test_cmake + - test_bazel if: ${{ github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') }} name: "Create release" runs-on: ubuntu-latest @@ -138,7 +173,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Build artifact for the release - package: + package_compiled: name: "Build packages" needs: release strategy: @@ -182,6 +217,29 @@ jobs: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ matrix.asset_path }} overwrite: true + + # Build "source" artifact for the release. This is the same as the github + # "source" archive, but with a stable URL. This is useful for the Bazel + # Central Repository. + package_source: + name: "Build source package" + needs: release + runs-on: ubuntu-latest + steps: + - name: "Checkout repository" + uses: actions/checkout@v3 + + - name: "Create source package" + run: > + git archive --format=tar.gz --prefix=ftxui/ -o source.tar.gz HEAD + + - name: "Upload source package" + uses: shogo82148/actions-upload-release-asset@v1 + with: + upload_url: ${{ needs.release.outputs.upload_url }} + asset_path: source.tar.gz + overwrite: true + documentation: if: github.ref == 'refs/heads/main' diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 00000000..83f17ba9 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,27 @@ +on: + # On new releases: + workflow_call: + inputs: + tag_name: + required: true + type: string + + # On manual trigger: + workflow_dispatch: + inputs: + tag_name: + required: true + type: string + +jobs: + publish: + uses: bazel-contrib/publish-to-bcr/.github/workflows/publish.yaml@v0.0.4 + with: + tag_name: ${{ inputs.tag_name }} + registry_fork: ArthurSonzogni/bazel-central-registry + permissions: + attestations: write + contents: write + id-token: write + secrets: + publish_token: ${{ secrets.PUBLISH_TOKEN }} diff --git a/.gitignore b/.gitignore index 4d12e758..a3820005 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,10 @@ out/ !flake.nix !ftxui.pc.in !iwyu.imp +!WORKSPACE.bazel +!BUILD.bazel +!MODULE.bazel +!.bazelrc # .github directory: !.github/**/*.yaml @@ -29,6 +33,10 @@ out/ !cmake/**/*.in !cmake/**/*.cmake +# bazel directory: +!bazel/**/*.bzl +!.bcr/* + # doc directory: !doc/**/Doxyfile.in !doc/**/*.txt diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 00000000..94bd4389 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,251 @@ +# Copyright 2025 Arthur Sonzogni. All rights reserved. +# Use of this source code is governed by the MIT license that can be found in +# the LICENSE file. + +# TODO: +# - Build benchmark. +# - Build fuzzers. +# - Build documentation. +# - Enable the two tests timing out. +# - Support WebAssembly + +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load(":bazel/ftxui.bzl", "ftxui_cc_library") +load(":bazel/ftxui.bzl", "generate_examples") +load(":bazel/ftxui.bzl", "cpp20") +load(":bazel/ftxui.bzl", "windows_copts") +load(":bazel/ftxui.bzl", "pthread_linkopts") + +package(default_visibility = ["//visibility:public"]) + +# A meta target that depends on all the ftxui sub modules. +alias( + name = "ftxui", + # Note that :component depends on :dom, which depends on :screen. Bazel + # doesn't really support "public" and "private" dependencies. They are all + # public. This is equivalent to depending on all the submodules. + actual = ":component", + visibility = ["//visibility:public"], +) + +# ftxui:screen is a module that provides a screen buffer and color management +# for terminal applications. A screen is a 2D array of cells, each cell can +# contain a glyph, a color, and other attributes. The library also provides +# functions to manipulate the screen. +ftxui_cc_library( + name = "screen", + srcs = [ + "src/ftxui/screen/box.cpp", + "src/ftxui/screen/color.cpp", + "src/ftxui/screen/color_info.cpp", + "src/ftxui/screen/image.cpp", + "src/ftxui/screen/screen.cpp", + "src/ftxui/screen/string.cpp", + "src/ftxui/screen/string_internal.hpp", + "src/ftxui/screen/terminal.cpp", + "src/ftxui/screen/util.hpp", + ], + hdrs = [ + "include/ftxui/screen/box.hpp", + "include/ftxui/screen/color.hpp", + "include/ftxui/screen/color_info.hpp", + "include/ftxui/screen/deprecated.hpp", + "include/ftxui/screen/image.hpp", + "include/ftxui/screen/pixel.hpp", + "include/ftxui/screen/screen.hpp", + "include/ftxui/screen/string.hpp", + "include/ftxui/screen/terminal.hpp", + "include/ftxui/util/autoreset.hpp", + "include/ftxui/util/ref.hpp", + ], +) + +# ftxui:dom is a library that provides a way to create and manipulate a +# "document" that can be rendered to a screen. The document is a tree of nodes. +# Nodes can be text, layouts, or various decorators. Users needs to compose +# nodes to create a document. A document is responsive to the size of the +# screen. +ftxui_cc_library( + name = "dom", + srcs = [ + "src/ftxui/dom/automerge.cpp", + "src/ftxui/dom/blink.cpp", + "src/ftxui/dom/bold.cpp", + "src/ftxui/dom/border.cpp", + "src/ftxui/dom/box_helper.cpp", + "src/ftxui/dom/box_helper.hpp", + "src/ftxui/dom/canvas.cpp", + "src/ftxui/dom/clear_under.cpp", + "src/ftxui/dom/color.cpp", + "src/ftxui/dom/composite_decorator.cpp", + "src/ftxui/dom/dbox.cpp", + "src/ftxui/dom/dim.cpp", + "src/ftxui/dom/flex.cpp", + "src/ftxui/dom/flexbox.cpp", + "src/ftxui/dom/flexbox_config.cpp", + "src/ftxui/dom/flexbox_helper.cpp", + "src/ftxui/dom/flexbox_helper.hpp", + "src/ftxui/dom/focus.cpp", + "src/ftxui/dom/frame.cpp", + "src/ftxui/dom/gauge.cpp", + "src/ftxui/dom/graph.cpp", + "src/ftxui/dom/gridbox.cpp", + "src/ftxui/dom/hbox.cpp", + "src/ftxui/dom/hyperlink.cpp", + "src/ftxui/dom/inverted.cpp", + "src/ftxui/dom/italic.cpp", + "src/ftxui/dom/linear_gradient.cpp", + "src/ftxui/dom/node.cpp", + "src/ftxui/dom/node_decorator.cpp", + "src/ftxui/dom/node_decorator.hpp", + "src/ftxui/dom/paragraph.cpp", + "src/ftxui/dom/reflect.cpp", + "src/ftxui/dom/scroll_indicator.cpp", + "src/ftxui/dom/selection.cpp", + "src/ftxui/dom/selection_style.cpp", + "src/ftxui/dom/separator.cpp", + "src/ftxui/dom/size.cpp", + "src/ftxui/dom/spinner.cpp", + "src/ftxui/dom/strikethrough.cpp", + "src/ftxui/dom/table.cpp", + "src/ftxui/dom/text.cpp", + "src/ftxui/dom/underlined.cpp", + "src/ftxui/dom/underlined_double.cpp", + "src/ftxui/dom/util.cpp", + "src/ftxui/dom/vbox.cpp", + ], + hdrs = [ + "include/ftxui/dom/canvas.hpp", + "include/ftxui/dom/deprecated.hpp", + "include/ftxui/dom/direction.hpp", + "include/ftxui/dom/elements.hpp", + "include/ftxui/dom/flexbox_config.hpp", + "include/ftxui/dom/linear_gradient.hpp", + "include/ftxui/dom/node.hpp", + "include/ftxui/dom/requirement.hpp", + "include/ftxui/dom/selection.hpp", + "include/ftxui/dom/table.hpp", + "include/ftxui/dom/take_any_args.hpp", + ], + deps = [":screen"], +) + +# ftxui:component is a library to create "dynamic" component renderering and +# updating a ftxui::dom document on the screen. It is a higher level API than +# ftxui:dom. +# +# The module is required if your program needs to respond to user input. It +# defines a set of ftxui::Component. These components can be utilized to +# navigate using the arrow keys and/or cursor. There are several builtin widgets +# like checkbox/inputbox/etc to interact with. You can combine them, or even +# define your own custom components. +ftxui_cc_library( + name = "component", + srcs = [ + "src/ftxui/component/animation.cpp", + "src/ftxui/component/button.cpp", + "src/ftxui/component/catch_event.cpp", + "src/ftxui/component/checkbox.cpp", + "src/ftxui/component/collapsible.cpp", + "src/ftxui/component/component.cpp", + "src/ftxui/component/component_options.cpp", + "src/ftxui/component/container.cpp", + "src/ftxui/component/dropdown.cpp", + "src/ftxui/component/event.cpp", + "src/ftxui/component/hoverable.cpp", + "src/ftxui/component/input.cpp", + "src/ftxui/component/loop.cpp", + "src/ftxui/component/maybe.cpp", + "src/ftxui/component/menu.cpp", + "src/ftxui/component/modal.cpp", + "src/ftxui/component/radiobox.cpp", + "src/ftxui/component/renderer.cpp", + "src/ftxui/component/resizable_split.cpp", + "src/ftxui/component/screen_interactive.cpp", + "src/ftxui/component/slider.cpp", + "src/ftxui/component/terminal_input_parser.cpp", + "src/ftxui/component/terminal_input_parser.hpp", + "src/ftxui/component/util.cpp", + "src/ftxui/component/window.cpp", + ], + hdrs = [ + "include/ftxui/component/animation.hpp", + "include/ftxui/component/captured_mouse.hpp", + "include/ftxui/component/component.hpp", + "include/ftxui/component/component_base.hpp", + "include/ftxui/component/component_options.hpp", + "include/ftxui/component/event.hpp", + "include/ftxui/component/loop.hpp", + "include/ftxui/component/mouse.hpp", + "include/ftxui/component/receiver.hpp", + "include/ftxui/component/screen_interactive.hpp", + "include/ftxui/component/task.hpp", + ], + linkopts = pthread_linkopts(), + deps = [":dom"], +) + +# FTXUI's tests +cc_test( + name = "tests", + testonly = True, + srcs = [ + "src/ftxui/component/animation_test.cpp", + "src/ftxui/component/button_test.cpp", + "src/ftxui/component/collapsible_test.cpp", + "src/ftxui/component/component_test.cpp", + "src/ftxui/component/container_test.cpp", + "src/ftxui/component/dropdown_test.cpp", + "src/ftxui/component/hoverable_test.cpp", + "src/ftxui/component/input_test.cpp", + "src/ftxui/component/menu_test.cpp", + "src/ftxui/component/modal_test.cpp", + "src/ftxui/component/radiobox_test.cpp", + "src/ftxui/component/receiver_test.cpp", + "src/ftxui/component/resizable_split_test.cpp", + "src/ftxui/component/slider_test.cpp", + "src/ftxui/component/terminal_input_parser_test.cpp", + "src/ftxui/component/terminal_input_parser_test_fuzzer.cpp", + "src/ftxui/component/toggle_test.cpp", + "src/ftxui/dom/blink_test.cpp", + "src/ftxui/dom/bold_test.cpp", + "src/ftxui/dom/border_test.cpp", + "src/ftxui/dom/canvas_test.cpp", + "src/ftxui/dom/color_test.cpp", + "src/ftxui/dom/dbox_test.cpp", + "src/ftxui/dom/dim_test.cpp", + "src/ftxui/dom/flexbox_helper_test.cpp", + "src/ftxui/dom/flexbox_test.cpp", + "src/ftxui/dom/gauge_test.cpp", + "src/ftxui/dom/gridbox_test.cpp", + "src/ftxui/dom/hbox_test.cpp", + "src/ftxui/dom/hyperlink_test.cpp", + "src/ftxui/dom/italic_test.cpp", + "src/ftxui/dom/linear_gradient_test.cpp", + "src/ftxui/dom/scroll_indicator_test.cpp", + "src/ftxui/dom/separator_test.cpp", + "src/ftxui/dom/spinner_test.cpp", + "src/ftxui/dom/table_test.cpp", + "src/ftxui/dom/text_test.cpp", + "src/ftxui/dom/underlined_test.cpp", + "src/ftxui/dom/vbox_test.cpp", + "src/ftxui/screen/color_test.cpp", + "src/ftxui/screen/string_test.cpp", + "src/ftxui/util/ref_test.cpp", + + # TODO: Enable the two tests timing out with Bazel: + # - "src/ftxui/component/screen_interactive_test.cpp", + # - "src/ftxui/dom/selection_test.cpp", + ], + includes = [ + "include", + "src", + ], + copts = cpp20() + windows_copts(), + deps = [ + "//:ftxui", + "@googletest//:gtest_main", + ], +) + +generate_examples() diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c8f7af0..1a55b8e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,12 @@ Changelog ========= -Development ------------ +Next release (2025-04-01) +------------------------- + +### Build +- Feature: Support `bazel`. See #1032. Proposed by @kcc. + ### Component - Bugfix: Fix a crash with ResizeableSplit. See #1023. - Clamp screen size to terminal size. diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 00000000..b26b6c95 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,13 @@ +# Copyright 2025 Arthur Sonzogni. All rights reserved. +# Use of this source code is governed by the MIT license that can be found in +# the LICENSE file. + +# FTXUI Module. +module(name = "ftxui", version = "6.0.3") + +# Build deps. +bazel_dep(name = "rules_cc", version = "0.1.1") +bazel_dep(name = "platforms", version = "0.0.11") + +# Test deps. +bazel_dep(name = "googletest", version = "1.16.0.bcr.1") diff --git a/README.md b/README.md index e7d8f319..8bcaee97 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ A simple cross-platform C++ library for terminal based user interfaces! * No dependencies * **Cross platform**: Linux/MacOS (main target), WebAssembly, Windows (Thanks to contributors!). * Learn by [examples](#documentation), and [tutorials](#documentation) - * Multiple packages: CMake [FetchContent]([https://bewagner.net/programming/2020/05/02/cmake-fetchcontent/](https://cmake.org/cmake/help/latest/module/FetchContent.html)) (preferred), vcpkg, pkgbuild, conan. + * Multiple packages: CMake [FetchContent]([https://bewagner.net/programming/2020/05/02/cmake-fetchcontent/](https://cmake.org/cmake/help/latest/module/FetchContent.html)) (preferred),Bazel, vcpkg, pkgbuild, conan. * Good practices: documentation, tests, fuzzers, performance tests, automated CI, automated packaging, etc... ## Documentation @@ -383,6 +383,7 @@ endif() ``` If you don't, FTXUI may be used from the following packages: +- [bazel](...) - [vcpkg](https://vcpkgx.com/details.html?package=ftxui) - [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/). - [conan.io](https://conan.io/center/ftxui) @@ -395,8 +396,6 @@ If you choose to build and link FTXUI yourself, `ftxui-component` must be first g++ . . . -lftxui-component -lftxui-dom -lftxui-screen . . . ``` - - ## Contributors diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel new file mode 100644 index 00000000..1c3bb376 --- /dev/null +++ b/WORKSPACE.bazel @@ -0,0 +1,4 @@ +# Copyright 2025 Arthur Sonzogni. All rights reserved. +# Use of this source code is governed by the MIT license that can be found in +# the LICENSE file. +workspace(name = "ftxui") diff --git a/bazel/ftxui.bzl b/bazel/ftxui.bzl new file mode 100644 index 00000000..c96cf5b6 --- /dev/null +++ b/bazel/ftxui.bzl @@ -0,0 +1,115 @@ +# ftxui_common.bzl + +load("@rules_cc//cc:defs.bzl", "cc_library") + +def cpp17(): + return select({ + "@rules_cc//cc/compiler:msvc-cl": ["/std:c++17"], + "@rules_cc//cc/compiler:clang-cl": ["/std:c++17"], + "@rules_cc//cc/compiler:clang": ["-std=c++17"], + "@rules_cc//cc/compiler:gcc": ["-std=c++17"], + "//conditions:default": ["-std=c++17"], + }) + +def cpp20(): + return select({ + "@rules_cc//cc/compiler:msvc-cl": ["/std:c++20"], + "@rules_cc//cc/compiler:clang-cl": ["/std:c++20"], + "@rules_cc//cc/compiler:clang": ["-std=c++20"], + "@rules_cc//cc/compiler:gcc": ["-std=c++20"], + "//conditions:default": ["-std=c++20"], + }) + +# Microsoft terminal is a bit buggy ¯\_(ツ)_/¯ and MSVC uses bad defaults. +def windows_copts(): + MSVC_COPTS = [ + # Microsoft Visual Studio must decode sources files as UTF-8. + "/utf-8", + + # Microsoft Visual Studio must interpret the codepoint using unicode. + "/DUNICODE", + "/D_UNICODE", + + # Fallback for Microsoft Terminal. + # This + # - Replace missing font symbols by others. + # - Reduce screen position pooling frequency to deals against a Microsoft + # race condition. This was fixed in 2020, but clients never not updated. + # - https://github.com/microsoft/terminal/pull/7583 + # - https://github.com/ArthurSonzogni/FTXUI/issues/136 + "/DFTXUI_MICROSOFT_TERMINAL_FALLBACK", + ] + + WINDOWS_COPTS = [ + # Fallback for Microsoft Terminal. + # This + # - Replace missing font symbols by others. + # - Reduce screen position pooling frequency to deals against a Microsoft + # race condition. This was fixed in 2020, but clients never not updated. + # - https://github.com/microsoft/terminal/pull/7583 + # - https://github.com/ArthurSonzogni/FTXUI/issues/136 + "-DFTXUI_MICROSOFT_TERMINAL_FALLBACK", + ]; + + return select({ + # MSVC: + "@rules_cc//cc/compiler:msvc-cl": MSVC_COPTS, + "@rules_cc//cc/compiler:clang-cl": MSVC_COPTS, + "@platforms//os:windows": WINDOWS_COPTS, + "//conditions:default": [], + }) + +def pthread_linkopts(): + return select({ + # With MSVC, threading is already built-in (you don't need -pthread. + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], + "@rules_cc//cc/compiler:clang": ["-pthread"], + "@rules_cc//cc/compiler:gcc": ["-pthread"], + "//conditions:default": ["-pthread"], + }) + +def ftxui_cc_library( + name, + srcs, + hdrs, + linkopts = [], + deps = []): + + cc_library( + name = name, + srcs = srcs, + hdrs = hdrs, + linkopts = linkopts, + deps = deps, + strip_include_prefix = "", + include_prefix = "", + includes = [ + "include", + "src", + ], + copts = cpp17() + windows_copts(), + visibility = ["//visibility:public"], + ) + +# Compile all the examples in the examples/ directory. +# This is useful to check the Bazel is synchronized with CMake definitions. +def generate_examples(): + cpp_files = native.glob(["examples/**/*.cpp"]) + + for src in cpp_files: + # Skip failing examples due to the color_info_sorted_2d.ipp dependency. + if src == "examples/component/homescreen.cpp" or \ + src == "examples/dom/color_info_palette256.cpp" or \ + src == "examples/dom/color_gallery.cpp": + continue + + # Turn "examples/component/button.cpp" → "example_component_button" + name = src.replace("/", "_").replace(".cpp", "") + + native.cc_binary( + name = name, + srcs = [src], + deps = ["//:component"], + copts = cpp20() + windows_copts(), + ) diff --git a/examples/component/slider_direction.cpp b/examples/component/slider_direction.cpp index 4a6c3bad..77f466c8 100644 --- a/examples/component/slider_direction.cpp +++ b/examples/component/slider_direction.cpp @@ -19,7 +19,7 @@ using namespace ftxui; int main() { auto screen = ScreenInteractive::TerminalOutput(); std::array values; - for (int i = 0; i < values.size(); ++i) { + for (size_t i = 0; i < values.size(); ++i) { values[i] = 50 + 20 * std::sin(i * 0.3); } diff --git a/examples/dom/color_truecolor_RGB.cpp b/examples/dom/color_truecolor_RGB.cpp index 6a8d1f3c..5f0985ba 100644 --- a/examples/dom/color_truecolor_RGB.cpp +++ b/examples/dom/color_truecolor_RGB.cpp @@ -12,7 +12,6 @@ int main() { using namespace ftxui; - int saturation = 255; Elements red_line; Elements green_line; Elements blue_line; diff --git a/examples/dom/graph.cpp b/examples/dom/graph.cpp index 461933fe..c63f9296 100644 --- a/examples/dom/graph.cpp +++ b/examples/dom/graph.cpp @@ -10,6 +10,7 @@ #include // for shared_ptr #include // for operator<<, string #include // for sleep_for +#include // for ignore #include // for vector #include "ftxui/dom/node.hpp" // for Render @@ -49,6 +50,7 @@ int main() { std::string reset_position; for (int i = 0;; ++i) { + std::ignore = i; auto document = hbox({ vbox({ graph(std::ref(my_graph)), diff --git a/src/ftxui/component/menu_test.cpp b/src/ftxui/component/menu_test.cpp index ca099468..de3182ab 100644 --- a/src/ftxui/component/menu_test.cpp +++ b/src/ftxui/component/menu_test.cpp @@ -266,7 +266,7 @@ TEST(MenuTest, MenuEntryIndex) { menu->OnEvent(Event::ArrowDown); menu->OnEvent(Event::ArrowDown); menu->OnEvent(Event::Return); - for (int index = 0; index < menu->ChildCount(); index++) { + for (size_t index = 0; index < menu->ChildCount(); index++) { EXPECT_EQ(menu->ChildAt(index)->Index(), index); } } diff --git a/src/ftxui/dom/selection_test.cpp b/src/ftxui/dom/selection_test.cpp index 7c48e28e..8f29c177 100644 --- a/src/ftxui/dom/selection_test.cpp +++ b/src/ftxui/dom/selection_test.cpp @@ -127,8 +127,6 @@ TEST(SelectionTest, SelectionOnChangeSquashedEvents) { } TEST(SelectionTest, StyleSelection) { - int selectionChangeCounter = 0; - auto element = hbox({ text("Lorem "), text("ipsum") | selectionColor(Color::Red),