feat(crossterm): allow multiple crossterm versions (#1841)

This commit introduces feature flags to make it possible for widget
library authors to depend on a specific version of crossterm without
causing version conflicts. This should make it easier for libraries and 
apps to update crossterm versions more easily.

The available feature flags are `crossterm_0_28` and `crossterm_0_29`.
By default, the latest version is enabled. If a multiple features are
enabled we choose the latest version. We will in general support at
least the last two major (0.x) versions of crossterm, and will only
remove versions in a major version bump.
This commit is contained in:
Josh McKinney 2025-08-17 12:43:18 -07:00 committed by GitHub
parent 86cd5292dd
commit 2d713d723d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 465 additions and 179 deletions

View File

@ -158,6 +158,9 @@ jobs:
- uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master
with:
toolchain: ${{ matrix.toolchain }}
- uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2
with:
tool: cargo-hack
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
- run: cargo xtask check --all-features
@ -232,6 +235,9 @@ jobs:
- uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master
with:
toolchain: stable
- uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2
with:
tool: cargo-hack
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
- run: cargo xtask test-docs
@ -250,6 +256,9 @@ jobs:
- uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master
with:
toolchain: stable
- uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2
with:
tool: cargo-hack
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
- run: cargo xtask test-libs

309
Cargo.lock generated
View File

@ -22,7 +22,7 @@ name = "advanced-widget-impl"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -64,9 +64,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
name = "anstream"
version = "0.6.19"
version = "0.6.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
dependencies = [
"anstyle",
"anstyle-parse",
@ -94,29 +94,29 @@ dependencies = [
[[package]]
name = "anstyle-query"
version = "1.1.3"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
dependencies = [
"windows-sys 0.59.0",
"windows-sys 0.60.2",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.9"
version = "3.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
dependencies = [
"anstyle",
"once_cell_polyfill",
"windows-sys 0.59.0",
"windows-sys 0.60.2",
]
[[package]]
name = "anyhow"
version = "1.0.98"
version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
[[package]]
name = "approx"
@ -138,7 +138,7 @@ name = "async-github"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"octocrab",
"ratatui",
"tokio",
@ -147,13 +147,13 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.88"
version = "0.1.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -224,9 +224,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.9.1"
version = "2.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29"
dependencies = [
"serde",
]
@ -254,9 +254,9 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
[[package]]
name = "bytemuck"
version = "1.23.1"
version = "1.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677"
[[package]]
name = "bytes"
@ -269,7 +269,7 @@ name = "calendar-explorer"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
"time",
]
@ -279,7 +279,7 @@ name = "canvas"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"itertools 0.14.0",
"ratatui",
]
@ -301,9 +301,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.31"
version = "1.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2"
checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f"
dependencies = [
"shlex",
]
@ -325,7 +325,7 @@ name = "chart"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -373,9 +373,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.42"
version = "4.5.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882"
checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318"
dependencies = [
"clap_builder",
"clap_derive",
@ -393,9 +393,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.42"
version = "4.5.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966"
checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8"
dependencies = [
"anstream",
"anstyle",
@ -405,14 +405,14 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.41"
version = "4.5.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -435,7 +435,7 @@ name = "color-explorer"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"itertools 0.14.0",
"ratatui",
]
@ -478,7 +478,7 @@ name = "colors-rgb"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"palette",
"ratatui",
]
@ -503,7 +503,7 @@ name = "constraint-explorer"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"itertools 0.14.0",
"ratatui",
"strum",
@ -514,7 +514,7 @@ name = "constraints"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
"strum",
]
@ -620,20 +620,37 @@ version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crossterm"
version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6"
dependencies = [
"bitflags 2.9.2",
"crossterm_winapi",
"mio",
"parking_lot",
"rustix 0.38.44",
"serde",
"signal-hook",
"signal-hook-mio",
"winapi",
]
[[package]]
name = "crossterm"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"crossterm_winapi",
"derive_more",
"document-features",
"futures-core",
"mio",
"parking_lot",
"rustix",
"rustix 1.0.8",
"serde",
"signal-hook",
"signal-hook-mio",
@ -680,7 +697,7 @@ name = "custom-widget"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -705,7 +722,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -716,7 +733,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -730,7 +747,7 @@ name = "demo"
version = "0.0.0"
dependencies = [
"clap",
"crossterm",
"crossterm 0.29.0",
"rand 0.9.2",
"ratatui",
"termion",
@ -742,7 +759,7 @@ name = "demo2"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"indoc",
"itertools 0.14.0",
"palette",
@ -781,7 +798,7 @@ dependencies = [
"convert_case",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -808,7 +825,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -935,7 +952,7 @@ name = "flex"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
"strum",
]
@ -1023,7 +1040,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -1067,7 +1084,7 @@ name = "gauge"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -1114,9 +1131,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "glob"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
[[package]]
name = "half"
@ -1130,9 +1147,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.15.4"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"allocator-api2",
"equivalent",
@ -1150,7 +1167,7 @@ name = "hello-world"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -1276,7 +1293,7 @@ name = "hyperlink"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"itertools 0.14.0",
"ratatui",
]
@ -1420,9 +1437,9 @@ dependencies = [
[[package]]
name = "indenter"
version = "0.3.3"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5"
[[package]]
name = "indexmap"
@ -1445,7 +1462,7 @@ name = "inline"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"rand 0.9.2",
"ratatui",
]
@ -1455,7 +1472,7 @@ name = "input-form"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
"serde",
"serde_json",
@ -1471,7 +1488,7 @@ dependencies = [
"indoc",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -1480,7 +1497,7 @@ version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"cfg-if",
"libc",
]
@ -1557,7 +1574,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d9e0d6a8bf886abccc1cbcac7d74f9000ae5882aedc4a9042188bbc9cd4487"
dependencies = [
"hashbrown",
"thiserror 2.0.12",
"thiserror 2.0.15",
]
[[package]]
@ -1574,9 +1591,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
version = "0.2.174"
version = "0.2.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
[[package]]
name = "libm"
@ -1599,7 +1616,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"libc",
"redox_syscall",
]
@ -1610,7 +1627,7 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51a1679740111eb63b7b4cb3c97b1d5d9f82e142292a25edcfdb4120a48b3880"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
]
[[package]]
@ -1622,6 +1639,12 @@ dependencies = [
"num-traits",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "linux-raw-sys"
version = "0.9.4"
@ -1709,7 +1732,7 @@ dependencies = [
name = "minimal"
version = "0.0.0"
dependencies = [
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -1745,7 +1768,7 @@ name = "modifiers"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"itertools 0.14.0",
"ratatui",
]
@ -1755,7 +1778,7 @@ name = "mouse-drawing"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"line_drawing",
"rand 0.9.2",
"ratatui",
@ -1767,7 +1790,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"cfg-if",
"cfg_aliases",
"libc",
@ -1818,7 +1841,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -1980,7 +2003,7 @@ dependencies = [
"by_address",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -1988,7 +2011,7 @@ name = "panic"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -2038,7 +2061,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323"
dependencies = [
"memchr",
"thiserror 2.0.12",
"thiserror 2.0.15",
"ucd-trie",
]
@ -2062,7 +2085,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -2115,7 +2138,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -2144,7 +2167,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -2192,7 +2215,7 @@ name = "popup"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -2241,9 +2264,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.95"
version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
@ -2442,7 +2465,7 @@ version = "0.30.0-beta.0"
dependencies = [
"color-eyre",
"criterion",
"crossterm",
"crossterm 0.29.0",
"document-features",
"fakeit",
"futures",
@ -2473,7 +2496,7 @@ name = "ratatui-core"
version = "0.1.0-beta.0"
dependencies = [
"anstyle",
"bitflags 2.9.1",
"bitflags 2.9.2",
"compact_str",
"document-features",
"hashbrown",
@ -2487,7 +2510,7 @@ dependencies = [
"serde",
"serde_json",
"strum",
"thiserror 2.0.12",
"thiserror 2.0.15",
"unicode-segmentation",
"unicode-truncate",
"unicode-width",
@ -2497,10 +2520,11 @@ dependencies = [
name = "ratatui-crossterm"
version = "0.1.0-beta.0"
dependencies = [
"crossterm",
"cfg-if",
"crossterm 0.28.1",
"crossterm 0.29.0",
"document-features",
"instability",
"ratatui",
"ratatui-core",
"rstest",
]
@ -2519,7 +2543,7 @@ name = "ratatui-state-examples"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -2549,9 +2573,9 @@ dependencies = [
name = "ratatui-widgets"
version = "0.3.0-beta.0"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"document-features",
"hashbrown",
"indoc",
@ -2571,9 +2595,9 @@ dependencies = [
[[package]]
name = "rayon"
version = "1.10.0"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
dependencies = [
"either",
"rayon-core",
@ -2581,9 +2605,9 @@ dependencies = [
[[package]]
name = "rayon-core"
version = "1.12.1"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
@ -2604,7 +2628,7 @@ version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
]
[[package]]
@ -2710,7 +2734,7 @@ dependencies = [
"regex",
"relative-path",
"rustc_version",
"syn 2.0.104",
"syn 2.0.106",
"unicode-ident",
]
@ -2729,16 +2753,29 @@ dependencies = [
"semver",
]
[[package]]
name = "rustix"
version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
"bitflags 2.9.2",
"errno",
"libc",
"linux-raw-sys 0.4.15",
"windows-sys 0.59.0",
]
[[package]]
name = "rustix"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"errno",
"libc",
"linux-raw-sys",
"linux-raw-sys 0.9.4",
"windows-sys 0.60.2",
]
@ -2791,9 +2828,9 @@ dependencies = [
[[package]]
name = "rustversion"
version = "1.0.21"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "ryu"
@ -2830,7 +2867,7 @@ name = "scrollbar"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -2845,11 +2882,11 @@ dependencies = [
[[package]]
name = "security-framework"
version = "3.2.0"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"core-foundation",
"core-foundation-sys",
"libc",
@ -2889,7 +2926,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3027,7 +3064,7 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb"
dependencies = [
"num-bigint",
"num-traits",
"thiserror 2.0.12",
"thiserror 2.0.15",
"time",
]
@ -3076,7 +3113,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3125,7 +3162,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3147,9 +3184,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.104"
version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [
"proc-macro2",
"quote",
@ -3170,7 +3207,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3178,7 +3215,7 @@ name = "table"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"fakeit",
"itertools 0.14.0",
"ratatui",
@ -3242,7 +3279,7 @@ checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7"
dependencies = [
"anyhow",
"base64",
"bitflags 2.9.1",
"bitflags 2.9.2",
"fancy-regex",
"filedescriptor",
"finl_unicode",
@ -3288,11 +3325,11 @@ dependencies = [
[[package]]
name = "thiserror"
version = "2.0.12"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850"
dependencies = [
"thiserror-impl 2.0.12",
"thiserror-impl 2.0.15",
]
[[package]]
@ -3303,18 +3340,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
name = "thiserror-impl"
version = "2.0.12"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3384,7 +3421,7 @@ name = "todo-list"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -3413,7 +3450,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3529,7 +3566,7 @@ version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
"bytes",
"futures-util",
"http",
@ -3559,7 +3596,7 @@ name = "tracing"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
"tracing 0.1.41",
"tracing-appender",
@ -3598,7 +3635,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -3736,7 +3773,7 @@ name = "user-input"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -3763,9 +3800,9 @@ dependencies = [
[[package]]
name = "uuid"
version = "1.17.0"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be"
dependencies = [
"atomic",
"getrandom 0.3.3",
@ -3851,7 +3888,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
"wasm-bindgen-shared",
]
@ -3873,7 +3910,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -3892,7 +3929,7 @@ name = "weather"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"rand 0.9.2",
"ratatui",
]
@ -3939,7 +3976,7 @@ dependencies = [
"serde",
"sha2",
"thiserror 1.0.69",
"uuid 1.17.0",
"uuid 1.18.0",
]
[[package]]
@ -3997,7 +4034,7 @@ name = "widget-ref-container"
version = "0.0.0"
dependencies = [
"color-eyre",
"crossterm",
"crossterm 0.29.0",
"ratatui",
]
@ -4053,7 +4090,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -4064,7 +4101,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -4262,7 +4299,7 @@ version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
"bitflags 2.9.1",
"bitflags 2.9.2",
]
[[package]]
@ -4309,7 +4346,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
"synstructure",
]
@ -4330,7 +4367,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]
[[package]]
@ -4350,7 +4387,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
"synstructure",
]
@ -4390,5 +4427,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.106",
]

View File

@ -14,11 +14,31 @@ exclude.workspace = true
edition.workspace = true
rust-version.workspace = true
[package.metadata.docs.rs]
features = ["document-features"]
rustdoc-args = ["--cfg", "docsrs"]
[features]
default = ["underline-color"]
default = ["underline-color", "crossterm_0_29"]
#! One of the following versions of crossterm must be enabled. By default, the latest version is
#! enabled. This will always default to the most recent version of crossterm, but you can override
#! this by specifying the version you want to use in your Cargo.toml file. The purpose of these
#! features is to allow widget libraries to depend on specific versions of crossterm in a way that
#! doesn't cause version conflicts. A compiler error will be raised if you don't enable at least one
#! of the following features.
## Enables crossterm 0.28.x
crossterm_0_28 = ["dep:crossterm_0_28"]
## Enables crossterm 0.29.x
crossterm_0_29 = ["dep:crossterm_0_29"]
#! The following features are optional and can be enabled to add additional functionality to the
#! library. These features are not required for the library to function, but they may be useful in
#! certain situations.
## Enables serde for crossterm dependency
serde = ["crossterm/serde"]
serde = ["crossterm_0_28?/serde", "crossterm_0_29?/serde"]
## enables the backend code that sets the underline color.
## Underline color is not supported on Windows 7.
@ -37,13 +57,14 @@ unstable-backend-writer = []
[dependencies]
crossterm.workspace = true
cfg-if = "1.0.1"
crossterm_0_28 = { version = "0.28", package = "crossterm", optional = true }
crossterm_0_29 = { version = "0.29", package = "crossterm", optional = true }
document-features = { workspace = true, optional = true }
instability.workspace = true
ratatui-core = { workspace = true }
ratatui-core.workspace = true
[dev-dependencies]
ratatui = { path = "../ratatui", features = ["crossterm"] }
rstest.workspace = true
[lints]

View File

@ -2,10 +2,41 @@
<!-- cargo-rdme start -->
This module provides the [`CrosstermBackend`] implementation for the [`Backend`] trait. It uses
the [Crossterm] crate to interact with the terminal.
This crate provides [`CrosstermBackend`], an implementation of the [`Backend`] trait for the
[Ratatui] library. It uses the [Crossterm] library for all terminal manipulation.
### Crossterm Version and Re-export
`ratatui-crossterm` requires you to specify a version of the [Crossterm] library to be used.
This is managed via feature flags. The highest enabled feature flag of the available
`crossterm_0_xx` features (e.g., `crossterm_0_28`, `crossterm_0_29`) takes precedence. These
features determine which version of Crossterm is compiled and used by the backend. Feature
unification may mean that any crate in your dependency graph that chooses to depend on a
specific version of Crossterm may be affected by the feature flags you enable.
Ratatui will support at least the two most recent versions of Crossterm (though we may increase
this if crossterm release cadence increases). We will remove support for older versions in major
(0.x) releases of `ratatui-crossterm`, and we may add support for newer versions in minor
(0.x.y) releases.
To promote interoperability within the [Ratatui] ecosystem, the selected Crossterm crate is
re-exported as `ratatui_crossterm::crossterm`. This re-export is essential for authors of widget
libraries or any applications that need to perform direct Crossterm operations while ensuring
compatibility with the version used by `ratatui-crossterm`. By using
`ratatui_crossterm::crossterm` for such operations, developers can avoid version conflicts and
ensure that all parts of their application use a consistent set of Crossterm types and
functions.
For example, if your application's `Cargo.toml` enables the `crossterm_0_29` feature for
`ratatui-crossterm`, then any code using `ratatui_crossterm::crossterm` will refer to the 0.29
version of Crossterm.
For more information on how to use the backend, see the documentation for the
[`CrosstermBackend`] struct.
[Ratatui]: https://ratatui.rs
[Crossterm]: https://crates.io/crates/crossterm
[`Backend`]: ratatui_core::backend::Backend
## Crate Organization

View File

@ -6,10 +6,41 @@
html_favicon_url = "https://raw.githubusercontent.com/ratatui/ratatui/main/assets/favicon.ico"
)]
#![warn(missing_docs)]
//! This module provides the [`CrosstermBackend`] implementation for the [`Backend`] trait. It uses
//! the [Crossterm] crate to interact with the terminal.
//! This crate provides [`CrosstermBackend`], an implementation of the [`Backend`] trait for the
//! [Ratatui] library. It uses the [Crossterm] library for all terminal manipulation.
//!
//! ## Crossterm Version and Re-export
//!
//! `ratatui-crossterm` requires you to specify a version of the [Crossterm] library to be used.
//! This is managed via feature flags. The highest enabled feature flag of the available
//! `crossterm_0_xx` features (e.g., `crossterm_0_28`, `crossterm_0_29`) takes precedence. These
//! features determine which version of Crossterm is compiled and used by the backend. Feature
//! unification may mean that any crate in your dependency graph that chooses to depend on a
//! specific version of Crossterm may be affected by the feature flags you enable.
//!
//! Ratatui will support at least the two most recent versions of Crossterm (though we may increase
//! this if crossterm release cadence increases). We will remove support for older versions in major
//! (0.x) releases of `ratatui-crossterm`, and we may add support for newer versions in minor
//! (0.x.y) releases.
//!
//! To promote interoperability within the [Ratatui] ecosystem, the selected Crossterm crate is
//! re-exported as `ratatui_crossterm::crossterm`. This re-export is essential for authors of widget
//! libraries or any applications that need to perform direct Crossterm operations while ensuring
//! compatibility with the version used by `ratatui-crossterm`. By using
//! `ratatui_crossterm::crossterm` for such operations, developers can avoid version conflicts and
//! ensure that all parts of their application use a consistent set of Crossterm types and
//! functions.
//!
//! For example, if your application's `Cargo.toml` enables the `crossterm_0_29` feature for
//! `ratatui-crossterm`, then any code using `ratatui_crossterm::crossterm` will refer to the 0.29
//! version of Crossterm.
//!
//! For more information on how to use the backend, see the documentation for the
//! [`CrosstermBackend`] struct.
//!
//! [Ratatui]: https://ratatui.rs
//! [Crossterm]: https://crates.io/crates/crossterm
//! [`Backend`]: ratatui_core::backend::Backend
//!
//! # Crate Organization
//!
@ -36,7 +67,6 @@
use std::io::{self, Write};
pub use crossterm;
use crossterm::cursor::{Hide, MoveTo, Show};
#[cfg(feature = "underline-color")]
use crossterm::style::SetUnderlineColor;
@ -47,6 +77,19 @@ use crossterm::style::{
};
use crossterm::terminal::{self, Clear};
use crossterm::{execute, queue};
cfg_if::cfg_if! {
// Re-export the selected Crossterm crate making sure to choose the latest version. We do this
// to make it possible to easily enable all features when compiling `ratatui-crossterm`.
if #[cfg(feature = "crossterm_0_29")] {
pub use crossterm_0_29 as crossterm;
} else if #[cfg(feature = "crossterm_0_28")] {
pub use crossterm_0_28 as crossterm;
} else {
compile_error!(
"At least one crossterm feature must be enabled. See the crate docs for more information."
);
}
}
use ratatui_core::backend::{Backend, ClearType, WindowSize};
use ratatui_core::buffer::Cell;
use ratatui_core::layout::{Position, Size};
@ -70,7 +113,7 @@ use ratatui_core::style::{Color, Modifier, Style};
///
/// # Example
///
/// ```rust,no_run
/// ```rust,ignore
/// use std::io::{stderr, stdout};
///
/// use crossterm::ExecutableCommand;
@ -126,7 +169,7 @@ where
///
/// # Example
///
/// ```rust,no_run
/// ```rust,ignore
/// use std::io::stdout;
///
/// use ratatui::backend::CrosstermBackend;

View File

@ -66,7 +66,7 @@ use termion::{color as tcolor, style as tstyle};
///
/// # Example
///
/// ```rust,no_run
/// ```rust,ignore
/// use std::io::{stderr, stdout};
///
/// use ratatui::Terminal;
@ -113,7 +113,7 @@ where
///
/// # Example
///
/// ```rust,no_run
/// ```rust,ignore
/// use std::io::stdout;
///
/// use ratatui::backend::TermionBackend;

View File

@ -27,7 +27,7 @@ serde = ["termwiz/use_serde"]
## Enables the backend code that sets the underline color.
## Underline color is not supported on Windows 7.
underline-color = []
underline-color = ["ratatui-core/underline-color"]
## Use terminal scrolling regions to make Terminal::insert_before less prone to flickering.
scrolling-regions = ["ratatui-core/scrolling-regions"]
@ -38,7 +38,7 @@ ratatui-core = { workspace = true }
termwiz.workspace = true
[dev-dependencies]
ratatui = { path = "../ratatui", features = ["termwiz"] }
ratatui = { path = "../ratatui", features = ["termwiz"], default-features = false }
rstest.workspace = true
[lints]

View File

@ -13,7 +13,7 @@ use self::clippy::Clippy;
use self::docs::Docs;
use self::format::Format;
use self::typos::Typos;
use crate::{ExpressionExt, Run, run_cargo};
use crate::{CROSSTERM_COMMON_FEATURES, ExpressionExt, Run, run_cargo};
mod backend;
mod check;
@ -22,6 +22,7 @@ mod coverage;
mod docs;
mod format;
mod rdme;
mod test_docs;
mod typos;
#[derive(Clone, Debug, Subcommand)]
@ -110,7 +111,7 @@ impl Run for Command {
Command::LintMarkdown => lint_markdown(),
Command::Test => test(),
Command::TestBackend(command) => command.run(),
Command::TestDocs => test_docs(),
Command::TestDocs => test_docs::test_docs(),
Command::TestLibs => test_libs(),
Command::Hack => hack(),
}
@ -154,18 +155,36 @@ fn test() -> Result<()> {
for backend in [Backend::Crossterm, Backend::Termion, Backend::Termwiz] {
TestBackend { backend }.run()?;
}
test_docs()?; // run last because it's slow
test_docs::test_docs()?; // run last because it's slow
Ok(())
}
/// Run doc tests for the workspace's default packages
fn test_docs() -> Result<()> {
run_cargo(vec!["test", "--doc", "--all-features"])
}
/// Run lib tests for the workspace's default packages
fn test_libs() -> Result<()> {
run_cargo(vec!["test", "--lib", "--all-targets", "--all-features"])
run_cargo(vec![
"hack",
"--ignore-private", // exclude packages that are libraries
"--exclude",
"ratatui-crossterm",
"test",
"--lib",
"--all-targets",
"--all-features",
])?;
let crossterm_feature = CROSSTERM_COMMON_FEATURES.join(",");
for crossterm_version in crate::CROSSTERM_VERSION_FEATURES {
let features = format!("{crossterm_feature},{crossterm_version}");
run_cargo(vec![
"test",
"--package",
"ratatui-crossterm",
"--lib",
"--no-default-features",
"--features",
features.as_str(),
])?;
}
Ok(())
}
/// Run cargo hack to test each feature in isolation

View File

@ -1,6 +1,6 @@
use color_eyre::Result;
use crate::{Run, run_cargo};
use crate::{CROSSTERM_COMMON_FEATURES, CROSSTERM_VERSION_FEATURES, Run, run_cargo};
/// Run cargo check
#[derive(Clone, Debug, clap::Args)]
@ -13,7 +13,35 @@ pub struct Check {
impl Run for Check {
fn run(self) -> Result<()> {
if self.all_features {
run_cargo(vec!["check", "--all-targets", "--all-features"])
let common_features = CROSSTERM_COMMON_FEATURES.join(",");
// Run `cargo check` on `ratatui-crossterm` with specific crossterm versions
for crossterm_feature in CROSSTERM_VERSION_FEATURES {
let features = format!("{common_features},{crossterm_feature}");
let command = vec![
"check",
"--all-targets",
"--package",
"ratatui-crossterm",
"--no-default-features",
"--features",
features.as_str(),
];
run_cargo(command)?;
}
run_cargo(vec![
"hack",
"--exclude",
"ratatui-crossterm",
#[cfg(windows)]
"--exclude",
#[cfg(windows)]
"ratatui-termion",
"check",
"--all-targets",
"--all-features",
])
} else {
run_cargo(vec!["check", "--all-targets"])
}

View File

@ -1,6 +1,6 @@
use color_eyre::Result;
use crate::{Run, run_cargo};
use crate::{CROSSTERM_VERSION_FEATURES, Run, run_cargo};
/// Run clippy on the project
#[derive(Clone, Debug, clap::Args)]
@ -12,19 +12,57 @@ pub struct Clippy {
impl Run for Clippy {
fn run(self) -> Result<()> {
let mut args = vec![
"clippy",
"--all-targets",
// Arguments that go before feature flags (e.g., "clippy", "--fix")
let mut clippy_command = vec!["clippy"];
if self.fix {
clippy_command.push("--fix");
}
// Define common non-version-specific features for ratatui-crossterm. These will be enabled
// for both crossterm 0.28 and 0.29 runs. `underline-color`` is part of default, but with
// `--no-default-features``, we must add it.
let common_features = [
"serde",
"underline-color",
"scrolling-regions",
"unstable",
"unstable-backend-writer",
]
.join(",");
let clippy_options = ["--", "-D", "warnings"];
// Run Clippy on `ratatui-crossterm` with `crossterm_0_28` and `crossterm_0_29`
for crossterm_feature in CROSSTERM_VERSION_FEATURES {
let mut command = clippy_command.clone();
let features = format!("{common_features},{crossterm_feature}");
// Note that adding --tests or --benches causes clippy to pick up the default features.
// I'm not sure why this is the case (JM 2025-05-10).
command.extend(vec![
"--package",
"ratatui-crossterm",
"--no-default-features",
"--features",
features.as_str(),
]);
command.extend(clippy_options);
run_cargo(command)?;
}
// Run Clippy on all other workspace packages with --all-features
let mut command = clippy_command.clone();
command.extend(vec![
"--all-features",
"--all-targets",
"--tests",
"--benches",
"--",
"-D",
"warnings",
];
if self.fix {
args.push("--fix");
}
run_cargo(args)
"--workspace",
"--exclude",
"ratatui-crossterm",
]);
command.extend(clippy_options);
run_cargo(command)?;
Ok(())
}
}

View File

@ -14,14 +14,29 @@ impl Run for Coverage {
fn run(self) -> Result<()> {
let mut args = vec![
"llvm-cov",
"--lcov",
"--output-path",
"target/lcov.info",
"--workspace",
"--exclude",
"ratatui-crossterm",
"--all-features",
"--no-report",
];
if self.lib {
args.push("--lib");
}
run_cargo(args)
run_cargo(args)?;
let mut args = vec!["llvm-cov", "--package", "ratatui-crossterm", "--no-report"];
if self.lib {
args.push("--lib");
}
run_cargo(args)?;
run_cargo(vec![
"llvm-cov",
"report",
"--lcov",
"--output-path",
"target/lcov.info",
])
}
}

View File

@ -0,0 +1,29 @@
use crate::{CROSSTERM_COMMON_FEATURES, CROSSTERM_VERSION_FEATURES, Result, run_cargo};
/// Run doc tests for the workspace's default packages
pub fn test_docs() -> Result<()> {
run_cargo(vec![
"hack",
"--workspace",
"--ignore-private", // exclude packages that are libraries
"--exclude",
"ratatui-crossterm",
"test",
"--doc",
"--all-features",
])?;
let common_features = CROSSTERM_COMMON_FEATURES.join(",");
for crossterm_version in CROSSTERM_VERSION_FEATURES {
let features = format!("{common_features},{crossterm_version}");
run_cargo(vec![
"test",
"--package",
"ratatui-crossterm",
"--doc",
"--no-default-features",
"--features",
features.as_str(),
])?;
}
Ok(())
}

View File

@ -16,6 +16,22 @@ use duct::cmd;
mod commands;
/// The available feature flags for ratatui-crossterm.
///
/// These will be enabled for both crossterm 0.28 and 0.29 runs. `underline-color` is part of
/// default features for ratatui-crossterm, but with `--no-default-features`, we must add it
/// explicitly if desired.
const CROSSTERM_COMMON_FEATURES: &[&str] = &[
"serde",
"underline-color",
"scrolling-regions",
"unstable",
"unstable-backend-writer",
];
/// The available feature flags for crossterm versions.
const CROSSTERM_VERSION_FEATURES: [&str; 2] = ["crossterm_0_28", "crossterm_0_29"];
pub trait Run {
fn run(self) -> Result<()>;
}