From 9aabc1cd9ffc8a11eca9fa7ce717e69a7bdd1d00 Mon Sep 17 00:00:00 2001 From: Clyde Gerber Date: Mon, 18 May 2026 18:16:43 -0500 Subject: [PATCH 1/2] refactor: remove redundant ICU version-detection mechanism MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every ICU version this workspace targets in CI (74, 76, 77) is >= the boundary versions referenced by the version-gated cfg features (`icu_version_64_plus`, `icu_version_67_plus`, `icu_version_68_plus`). The gates are always active in practice, so the conditional-compilation mechanism — gates in source code, feature declarations in Cargo.toml, and cfg emissions from `build.rs` — is dead infrastructure. Removes: - Redundant `#[cfg(feature = "icu_version_##_plus")]` annotations and their companion `not(...)` dead-code branches from rust_icu_ecma402, rust_icu_ulistformatter, rust_icu_unumberformatter, and rust_icu_uloc (including the pre-ICU-67 buggy-behavior test variant). - The `icu_version_64_plus`, `icu_version_67_plus`, `icu_version_68_plus`, and `icu_version_69_max` Cargo feature declarations across 27 manifests. - The cfg-emission blocks in `rust_icu_sys/build.rs` and `rust_icu_release/src/lib.rs`. - The `_plus` features from the `test-with-features` CI matrix and the `macos-test` Makefile target. This is a breaking change to the public Cargo feature surface; the next release will already require a major version bump for other reasons. Rewrites the CONTRIBUTING.md section as forward-looking guidance for re-introducing version-dependent code if it becomes necessary. This commit was created by an automated coding assistant, with human supervision. --- .github/workflows/test.yml | 4 +- CONTRIBUTING.md | 38 +++++++++++++ Makefile | 4 +- rust_icu/Cargo.toml | 76 -------------------------- rust_icu_common/Cargo.toml | 12 ---- rust_icu_ecma402/Cargo.toml | 40 -------------- rust_icu_ecma402/src/datetimeformat.rs | 6 -- rust_icu_ecma402/src/listformat.rs | 30 ++-------- rust_icu_ecma402/src/numberformat.rs | 5 +- rust_icu_intl/Cargo.toml | 28 ---------- rust_icu_release/Cargo.toml | 8 --- rust_icu_release/src/lib.rs | 15 ----- rust_icu_sys/Cargo.toml | 4 -- rust_icu_sys/build.rs | 15 ----- rust_icu_ubrk/Cargo.toml | 24 -------- rust_icu_ucal/Cargo.toml | 24 -------- rust_icu_uchar/Cargo.toml | 16 ------ rust_icu_ucnv/Cargo.toml | 16 ------ rust_icu_ucol/Cargo.toml | 24 -------- rust_icu_ucsdet/Cargo.toml | 20 ------- rust_icu_udat/Cargo.toml | 32 ----------- rust_icu_udata/Cargo.toml | 16 ------ rust_icu_uenum/Cargo.toml | 16 ------ rust_icu_uformattable/Cargo.toml | 20 ------- rust_icu_ulistformatter/Cargo.toml | 20 ------- rust_icu_ulistformatter/src/lib.rs | 2 - rust_icu_uloc/Cargo.toml | 24 -------- rust_icu_uloc/src/lib.rs | 41 -------------- rust_icu_umsg/Cargo.toml | 24 -------- rust_icu_unorm2/Cargo.toml | 32 ----------- rust_icu_unum/Cargo.toml | 28 ---------- rust_icu_unumberformatter/Cargo.toml | 32 ----------- rust_icu_unumberformatter/src/lib.rs | 60 +++++++------------- rust_icu_upluralrules/Cargo.toml | 24 -------- rust_icu_ures/Cargo.toml | 20 ------- rust_icu_ustring/Cargo.toml | 16 ------ rust_icu_utext/Cargo.toml | 16 ------ rust_icu_utrans/Cargo.toml | 24 -------- 38 files changed, 67 insertions(+), 789 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0dcf319f..059df8ca 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,8 +26,8 @@ jobs: matrix: icu_version: [74, 76, 77] feature_set: - - "renaming,icu_version_in_env,icu_version_64_plus,icu_version_67_plus,icu_version_68_plus" - - "renaming,icu_version_64_plus,icu_version_67_plus,icu_version_68_plus,icu_config,use-bindgen" + - "renaming,icu_version_in_env" + - "renaming,icu_config,use-bindgen" steps: - uses: actions/checkout@v6 - name: 'Test ICU version ${{ matrix.icu_version }}' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0608aba7..0bb3b28e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,6 +32,44 @@ term health of the repository. * Please keep PRs limited to a single topic of change. This makes the PR easier to review, and easier to roll back, if that becomes necessary. +## Adding ICU-version-dependent code + +The workspace currently targets ICU versions for which all wrapped APIs are +uniformly available, so no version-gated code remains. If a future change +introduces functionality that exists only in newer (or only in older) ICU +versions, follow the pattern below — it must be wired up in **two** places +that are kept in sync. + +### 1. The Cargo feature + +Declare a feature in each affected crate's `Cargo.toml`, named after the +boundary version (e.g. `icu_version_80_plus`). Propagate it to dependent +crates the same way `icu_version_in_env` is propagated. + +### 2. Automatic activation via `build.rs` + +A crate's `build.rs` may emit `cargo:rustc-cfg=feature="icu_version_XX_plus"` +to activate the feature based on the ICU version detected at build time (via +`pkg-config`). This makes `#[cfg(feature = "icu_version_XX_plus")]`-gated +code light up automatically under the default feature set +(`use-bindgen`, `icu_config`, `renaming`) without requiring users to pass +`--features` manually. + +**Any crate that contains `#[cfg(feature = "icu_version_XX_plus")]`-gated +code must have a `build.rs`** that emits the corresponding cfg. Without it, +the gated code is silently excluded when building with default features, +even if a matching ICU version is installed. Copy the build script from any +crate that has one (e.g. `rust_icu_uloc`) and add the matching +`[build-dependencies]` entry pointing at `rust_icu_release`. + +### Explicit activation (when `icu_config` is inactive) + +When `icu_config` is disabled (e.g. when using pre-generated static bindgen +files with `icu_version_in_env`), the `build.rs` does not emit cfgs, so +version features must be passed explicitly via +`--features=icu_version_XX_plus,...`. The CI `test-with-features` matrix +job is the right place to add coverage for that path. + ## Community Guidelines This project follows [Google's Open Source Community diff --git a/Makefile b/Makefile index a9df9120..50ef78c5 100644 --- a/Makefile +++ b/Makefile @@ -104,11 +104,11 @@ macos-test: && PATH="$$ICU_PREFIX/bin:$$PATH" \ PKG_CONFIG_PATH="$$ICU_PREFIX/lib/pkgconfig:$$PKG_CONFIG_PATH" \ RUSTFLAGS="-L $$ICU_PREFIX/lib" \ - cargo test --no-default-features --features=use-bindgen,icu_config,renaming,icu_version_64_plus,icu_version_67_plus,icu_version_68_plus \ + cargo test \ && PATH="$$ICU_PREFIX/bin:$$PATH" \ PKG_CONFIG_PATH="$$ICU_PREFIX/lib/pkgconfig:$$PKG_CONFIG_PATH" \ RUSTFLAGS="-L $$ICU_PREFIX/lib" \ - cargo test --no-default-features --features=use-bindgen,icu_config,renaming,icu_version_64_plus,icu_version_67_plus,icu_version_68_plus,static + cargo test --features=static .PHONY: macos-test # Refreshes the static bindgen output (contents of ./rust_icu_sys/bindgen) based diff --git a/rust_icu/Cargo.toml b/rust_icu/Cargo.toml index 15bd1b33..86d2bb06 100644 --- a/rust_icu/Cargo.toml +++ b/rust_icu/Cargo.toml @@ -116,82 +116,6 @@ icu_version_in_env = [ "rust_icu_utext/icu_version_in_env", "rust_icu_utrans/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ubrk/icu_version_64_plus", - "rust_icu_ucal/icu_version_64_plus", - "rust_icu_ucol/icu_version_64_plus", - "rust_icu_ucsdet/icu_version_64_plus", - "rust_icu_udat/icu_version_64_plus", - "rust_icu_udata/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ulistformatter/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_umsg/icu_version_64_plus", - "rust_icu_unorm2/icu_version_64_plus", - "rust_icu_ures/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", - "rust_icu_utext/icu_version_64_plus", - "rust_icu_utrans/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ubrk/icu_version_67_plus", - "rust_icu_ucal/icu_version_67_plus", - "rust_icu_ucol/icu_version_67_plus", - "rust_icu_ucsdet/icu_version_67_plus", - "rust_icu_udat/icu_version_67_plus", - "rust_icu_udata/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ulistformatter/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_umsg/icu_version_67_plus", - "rust_icu_unorm2/icu_version_67_plus", - "rust_icu_ures/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", - "rust_icu_utext/icu_version_67_plus", - "rust_icu_utrans/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ubrk/icu_version_68_plus", - "rust_icu_ucal/icu_version_68_plus", - "rust_icu_ucol/icu_version_68_plus", - "rust_icu_ucsdet/icu_version_68_plus", - "rust_icu_udat/icu_version_68_plus", - "rust_icu_udata/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ulistformatter/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_umsg/icu_version_68_plus", - "rust_icu_unorm2/icu_version_68_plus", - "rust_icu_ures/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", - "rust_icu_utext/icu_version_68_plus", - "rust_icu_utrans/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ubrk/icu_version_69_max", - "rust_icu_ucal/icu_version_69_max", - "rust_icu_ucol/icu_version_69_max", - "rust_icu_ucsdet/icu_version_69_max", - "rust_icu_udat/icu_version_69_max", - "rust_icu_udata/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ulistformatter/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_umsg/icu_version_69_max", - "rust_icu_unorm2/icu_version_69_max", - "rust_icu_ures/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", - "rust_icu_utext/icu_version_69_max", - "rust_icu_utrans/icu_version_69_max", -] static = ["rust_icu_sys/static"] [badges] diff --git a/rust_icu_common/Cargo.toml b/rust_icu_common/Cargo.toml index 1f4ed7d2..2689fc49 100644 --- a/rust_icu_common/Cargo.toml +++ b/rust_icu_common/Cargo.toml @@ -28,18 +28,6 @@ use-bindgen = ["rust_icu_sys/use-bindgen"] renaming = ["rust_icu_sys/renaming"] icu_config = ["rust_icu_sys/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_sys/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ecma402/Cargo.toml b/rust_icu_ecma402/Cargo.toml index 64f83449..8663f813 100644 --- a/rust_icu_ecma402/Cargo.toml +++ b/rust_icu_ecma402/Cargo.toml @@ -74,46 +74,6 @@ icu_version_in_env = [ "rust_icu_upluralrules/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ulistformatter/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_unum/icu_version_64_plus", - "rust_icu_unumberformatter/icu_version_64_plus", - "rust_icu_upluralrules/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ulistformatter/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_unum/icu_version_67_plus", - "rust_icu_unumberformatter/icu_version_67_plus", - "rust_icu_upluralrules/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ulistformatter/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_unum/icu_version_68_plus", - "rust_icu_unumberformatter/icu_version_68_plus", - "rust_icu_upluralrules/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ulistformatter/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_unum/icu_version_69_max", - "rust_icu_unumberformatter/icu_version_69_max", - "rust_icu_upluralrules/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ecma402/src/datetimeformat.rs b/rust_icu_ecma402/src/datetimeformat.rs index aaa5a191..000187bb 100644 --- a/rust_icu_ecma402/src/datetimeformat.rs +++ b/rust_icu_ecma402/src/datetimeformat.rs @@ -285,12 +285,6 @@ mod testing { dates: vec![10000_f64], expected_regex: vec!["1970."], }, - // In ICU 63 this gets reported as "GMT-08:00", likely the ICU data - // from then didn't contain the Serbian long spellout of the "uslax" - // time zone. Turning on from 67 onwards, since at the time this - // test was written that was the oldest version that did have the - // long spellout. - #[cfg(feature="icu_version_67_plus")] TestCase { locale: "sr", opts: DateTimeFormatOptions{ diff --git a/rust_icu_ecma402/src/listformat.rs b/rust_icu_ecma402/src/listformat.rs index ac3aba22..0b2d5cc3 100644 --- a/rust_icu_ecma402/src/listformat.rs +++ b/rust_icu_ecma402/src/listformat.rs @@ -26,8 +26,6 @@ pub struct Format { rep: ulfmt::UListFormatter, } -// Full support for styled formatting is available since v67. -#[cfg(feature = "icu_version_67_plus")] pub(crate) mod internal { use ecma402_traits::listformat::options; use rust_icu_sys as usys; @@ -60,24 +58,13 @@ impl listformat::Format for Format { /// Creates a new [Format], from a [ecma402_traits::Locale] and [listformat::Options]. fn try_new( l: L, - _opts: listformat::Options, + opts: listformat::Options, ) -> Result { let locale = format!("{}", l); - - #[cfg(feature = "icu_version_67_plus")] - { - let width = internal::to_icu_width(&_opts.style); - let in_type = internal::to_icu_type(&_opts.in_type); - let rep = ulfmt::UListFormatter::try_new_styled(&locale, in_type, width)?; - Ok(Format { rep }) - } - - // The non-v67 implementation is less featureful. - #[cfg(not(feature = "icu_version_67_plus"))] - { - let rep = ulfmt::UListFormatter::try_new(&locale)?; - Ok(Format { rep }) - } + let width = internal::to_icu_width(&opts.style); + let in_type = internal::to_icu_type(&opts.in_type); + let rep = ulfmt::UListFormatter::try_new_styled(&locale, in_type, width)?; + Ok(Format { rep }) } /// Formats the given string. @@ -123,7 +110,6 @@ mod testing { opts: listformat::Options::default(), expected: "eenie, meenie, minie, and moe", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "en-US", array: vec!["eenie", "meenie", "minie", "moe"], @@ -133,7 +119,6 @@ mod testing { }, expected: "eenie, meenie, minie, & moe", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "en-US", array: vec!["eenie", "meenie", "minie", "moe"], @@ -143,7 +128,6 @@ mod testing { }, expected: "eenie, meenie, minie, or moe", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "en-US", array: vec!["eenie", "meenie", "minie", "moe"], @@ -153,7 +137,6 @@ mod testing { }, expected: "eenie, meenie, minie, moe", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "en-US", array: vec!["eenie", "meenie", "minie", "moe"], @@ -172,7 +155,6 @@ mod testing { }, expected: "eenie, meenie, minie, and moe", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "en-US", array: vec!["eenie", "meenie", "minie", "moe"], @@ -193,7 +175,6 @@ mod testing { }, expected: "Раја, Гаја и Влаја", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "sr-RS", array: vec!["Раја", "Гаја", "Влаја"], @@ -203,7 +184,6 @@ mod testing { }, expected: "Раја, Гаја или Влаја", }, - #[cfg(feature = "icu_version_67_plus")] TestCase { locale: "sr-RS", array: vec!["Раја", "Гаја", "Влаја"], diff --git a/rust_icu_ecma402/src/numberformat.rs b/rust_icu_ecma402/src/numberformat.rs index 05591388..a9b07cd4 100644 --- a/rust_icu_ecma402/src/numberformat.rs +++ b/rust_icu_ecma402/src/numberformat.rs @@ -175,10 +175,7 @@ pub(crate) mod internal { // 3 -> "integer-width/*000" fn integer_digits(digits: usize) -> String { let zeroes: String = std::iter::repeat("0").take(digits).collect(); - #[cfg(feature = "icu_version_67_plus")] - return format!("integer-width/*{}", zeroes); - #[cfg(not(feature = "icu_version_67_plus"))] - return format!("integer-width/+{}", zeroes); + format!("integer-width/*{}", zeroes) } fn fraction_digits(min: usize, max: usize, min_sig: usize, max_sig: usize) -> String { diff --git a/rust_icu_intl/Cargo.toml b/rust_icu_intl/Cargo.toml index 1da7b256..0801d5c5 100644 --- a/rust_icu_intl/Cargo.toml +++ b/rust_icu_intl/Cargo.toml @@ -56,31 +56,3 @@ icu_version_in_env = [ "rust_icu_umsg/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_umsg/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_umsg/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_umsg/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_umsg/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] diff --git a/rust_icu_release/Cargo.toml b/rust_icu_release/Cargo.toml index f8113edd..84c59ba2 100644 --- a/rust_icu_release/Cargo.toml +++ b/rust_icu_release/Cargo.toml @@ -27,14 +27,6 @@ icu_config = [ ] icu_version_in_env = [ ] -icu_version_64_plus = [ -] -icu_version_67_plus = [ -] -icu_version_68_plus = [ -] -icu_version_69_max = [ -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_release/src/lib.rs b/rust_icu_release/src/lib.rs index 99c1018c..d2a30e7e 100644 --- a/rust_icu_release/src/lib.rs +++ b/rust_icu_release/src/lib.rs @@ -134,21 +134,6 @@ pub fn run() -> Result<()> { let icu_major_version = ICUConfig::version_major_int().context("while getting version")?; println!("icu-major-version: {}", icu_major_version); - if icu_major_version >= 64 { - println!("cargo:rustc-cfg=feature=\"icu_version_64_plus\""); - } - if icu_major_version >= 67 { - println!("cargo:rustc-cfg=feature=\"icu_version_67_plus\""); - } - if icu_major_version >= 68 { - println!("cargo:rustc-cfg=feature=\"icu_version_68_plus\""); - } - // Starting from version 69, the feature flags depending on the version - // number work for up to a certain version, so that they can be retired - // over time. - if icu_major_version <= 69 { - println!("cargo:rustc-cfg=feature=\"icu_version_69_max\""); - } println!("done"); Ok(()) } diff --git a/rust_icu_sys/Cargo.toml b/rust_icu_sys/Cargo.toml index 2db5d356..0c50ba8a 100644 --- a/rust_icu_sys/Cargo.toml +++ b/rust_icu_sys/Cargo.toml @@ -39,10 +39,6 @@ use-bindgen = ["bindgen"] renaming = [] icu_config = [] icu_version_in_env = [] -icu_version_64_plus = [] -icu_version_67_plus = [] -icu_version_68_plus = [] -icu_version_69_max = [] static = [] diff --git a/rust_icu_sys/build.rs b/rust_icu_sys/build.rs index 3e1d782c..5ce5c114 100644 --- a/rust_icu_sys/build.rs +++ b/rust_icu_sys/build.rs @@ -375,21 +375,6 @@ macro_rules! versioned_function { } let icu_major_version = ICUConfig::version_major_int()?; println!("icu-version-major: {}", icu_major_version); - if icu_major_version >= 64 { - println!("cargo:rustc-cfg=feature=\"icu_version_64_plus\""); - } - if icu_major_version >= 67 { - println!("cargo:rustc-cfg=feature=\"icu_version_67_plus\""); - } - if icu_major_version >= 68 { - println!("cargo:rustc-cfg=feature=\"icu_version_68_plus\""); - } - // Starting from version 69, the feature flags depending on the version - // number work for up to a certain version, so that they can be retired - // over time. - if icu_major_version <= 69 { - println!("cargo:rustc-cfg=feature=\"icu_version_69_max\""); - } Ok(()) } diff --git a/rust_icu_ubrk/Cargo.toml b/rust_icu_ubrk/Cargo.toml index 5070190e..6c537d6c 100644 --- a/rust_icu_ubrk/Cargo.toml +++ b/rust_icu_ubrk/Cargo.toml @@ -35,18 +35,6 @@ icu_config = [ "rust_icu_uloc/icu_config", "rust_icu_ustring/icu_config", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] icu_version_in_env = [ "rust_icu_common/icu_version_in_env", "rust_icu_sys/icu_version_in_env", @@ -65,18 +53,6 @@ use-bindgen = [ "rust_icu_uloc/use-bindgen", "rust_icu_ustring/use-bindgen", ] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] is-it-maintained-issue-resolution = { repository = "google/rust_icu" } diff --git a/rust_icu_ucal/Cargo.toml b/rust_icu_ucal/Cargo.toml index e5ad4f5b..9e25b244 100644 --- a/rust_icu_ucal/Cargo.toml +++ b/rust_icu_ucal/Cargo.toml @@ -55,30 +55,6 @@ icu_version_in_env = [ "rust_icu_uenum/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_uchar/Cargo.toml b/rust_icu_uchar/Cargo.toml index 9b9236b0..65d407a3 100644 --- a/rust_icu_uchar/Cargo.toml +++ b/rust_icu_uchar/Cargo.toml @@ -29,20 +29,4 @@ use-bindgen = ["rust_icu_sys/use-bindgen", "rust_icu_common/use-bindgen"] renaming = ["rust_icu_sys/renaming", "rust_icu_common/renaming"] icu_config = ["rust_icu_sys/icu_config", "rust_icu_common/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] diff --git a/rust_icu_ucnv/Cargo.toml b/rust_icu_ucnv/Cargo.toml index 25ac8f0a..9b5489cc 100644 --- a/rust_icu_ucnv/Cargo.toml +++ b/rust_icu_ucnv/Cargo.toml @@ -41,22 +41,6 @@ icu_version_in_env = [ "rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ucol/Cargo.toml b/rust_icu_ucol/Cargo.toml index a2fa3bfe..04aa1f8a 100644 --- a/rust_icu_ucol/Cargo.toml +++ b/rust_icu_ucol/Cargo.toml @@ -54,30 +54,6 @@ icu_version_in_env = [ "rust_icu_uenum/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ucsdet/Cargo.toml b/rust_icu_ucsdet/Cargo.toml index 2e334c1f..dbe0797f 100644 --- a/rust_icu_ucsdet/Cargo.toml +++ b/rust_icu_ucsdet/Cargo.toml @@ -44,26 +44,6 @@ icu_version_in_env = [ "rust_icu_common/icu_version_in_env", "rust_icu_uenum/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_udat/Cargo.toml b/rust_icu_udat/Cargo.toml index b55fb062..c5b36a4f 100644 --- a/rust_icu_udat/Cargo.toml +++ b/rust_icu_udat/Cargo.toml @@ -69,38 +69,6 @@ icu_version_in_env = [ "rust_icu_uloc/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ucal/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ucal/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ucal/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ucal/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_udata/Cargo.toml b/rust_icu_udata/Cargo.toml index 552c7ec1..d4aec3ea 100644 --- a/rust_icu_udata/Cargo.toml +++ b/rust_icu_udata/Cargo.toml @@ -29,22 +29,6 @@ use-bindgen = ["rust_icu_sys/use-bindgen", "rust_icu_common/use-bindgen"] renaming = ["rust_icu_sys/renaming", "rust_icu_common/renaming"] icu_config = ["rust_icu_sys/icu_config", "rust_icu_common/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_uenum/Cargo.toml b/rust_icu_uenum/Cargo.toml index 2a642ee0..8a7b4005 100644 --- a/rust_icu_uenum/Cargo.toml +++ b/rust_icu_uenum/Cargo.toml @@ -28,22 +28,6 @@ use-bindgen = ["rust_icu_sys/use-bindgen", "rust_icu_common/use-bindgen"] renaming = ["rust_icu_sys/renaming", "rust_icu_common/renaming"] icu_config = ["rust_icu_sys/icu_config", "rust_icu_common/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_uformattable/Cargo.toml b/rust_icu_uformattable/Cargo.toml index 93a2bbbf..5285ac96 100644 --- a/rust_icu_uformattable/Cargo.toml +++ b/rust_icu_uformattable/Cargo.toml @@ -49,26 +49,6 @@ icu_version_in_env = [ "rust_icu_sys/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ulistformatter/Cargo.toml b/rust_icu_ulistformatter/Cargo.toml index 214e84f1..984b14b2 100644 --- a/rust_icu_ulistformatter/Cargo.toml +++ b/rust_icu_ulistformatter/Cargo.toml @@ -49,26 +49,6 @@ icu_version_in_env = [ "rust_icu_sys/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ulistformatter/src/lib.rs b/rust_icu_ulistformatter/src/lib.rs index c493e632..e1138226 100644 --- a/rust_icu_ulistformatter/src/lib.rs +++ b/rust_icu_ulistformatter/src/lib.rs @@ -66,7 +66,6 @@ impl UListFormatter { } /// Implements `ulistfmt_openForType`. Since ICU 67. - #[cfg(feature = "icu_version_67_plus")] pub fn try_new_styled( locale: &str, format_type: sys::UListFormatterType, @@ -292,7 +291,6 @@ mod testing { } #[test] - #[cfg(feature = "icu_version_67_plus")] fn test_formatting_styled() { let array = ["Kwik", "Kwek", "Kwak"]; let formatter = crate::UListFormatter::try_new_styled( diff --git a/rust_icu_uloc/Cargo.toml b/rust_icu_uloc/Cargo.toml index 8a0b44d2..3bd1d7dd 100644 --- a/rust_icu_uloc/Cargo.toml +++ b/rust_icu_uloc/Cargo.toml @@ -54,30 +54,6 @@ icu_version_in_env = [ "rust_icu_uenum/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [build-dependencies] anyhow = "1.0" diff --git a/rust_icu_uloc/src/lib.rs b/rust_icu_uloc/src/lib.rs index 2a60c109..87363b3d 100644 --- a/rust_icu_uloc/src/lib.rs +++ b/rust_icu_uloc/src/lib.rs @@ -395,7 +395,6 @@ impl ULoc { } /// Implements `uloc_openAvailableByType`. - #[cfg(feature = "icu_version_67_plus")] pub fn open_available_by_type(locale_type: ULocAvailableType) -> Result { let mut status = common::Error::OK_CODE; unsafe { @@ -406,7 +405,6 @@ impl ULoc { } /// Returns a vector of locales of the requested type. - #[cfg(feature = "icu_version_67_plus")] pub fn get_available_locales_by_type(locale_type: ULocAvailableType) -> Vec { if locale_type == ULocAvailableType::ULOC_AVAILABLE_COUNT { panic!("ULOC_AVAILABLE_COUNT is for internal use only"); @@ -829,7 +827,6 @@ mod tests { // This test yields a different result in ICU versions prior to 64: // "zh-Latn@collation=pinyin". - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_variant() -> Result<(), Error> { let loc = ULoc::try_from("zh-Latn-pinyin")?; @@ -849,7 +846,6 @@ mod tests { Ok(()) } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_name() -> Result<(), Error> { let loc = ULoc::try_from("en-US")?; @@ -1034,34 +1030,6 @@ mod tests { ); } - // This tests verifies buggy behavior which is fixed since ICU version 67.1 - #[cfg(not(feature = "icu_version_67_plus"))] - #[test] - fn test_accept_language_exact_match() { - let accept_list: Result, _> = vec!["es_ES", "ar_EG", "fr_FR"] - .into_iter() - .map(ULoc::try_from) - .collect(); - let accept_list = accept_list.expect("make accept_list"); - - let available_locales: Result, _> = vec!["de_DE", "en_US", "es_MX", "ar_EG"] - .into_iter() - .map(ULoc::try_from) - .collect(); - let available_locales = available_locales.expect("make available_locales"); - - let actual = accept_language(accept_list, available_locales).expect("call accept_language"); - assert_eq!( - actual, - ( - // "es_MX" should be preferred as a fallback over exact match "ar_EG". - ULoc::try_from("ar_EG").ok(), - UAcceptResult::ULOC_ACCEPT_VALID - ) - ); - } - - #[cfg(feature = "icu_version_67_plus")] #[test] fn test_accept_language_exact_match() { let accept_list: Result, _> = vec!["es_ES", "ar_EG", "fr_FR"] @@ -1216,7 +1184,6 @@ mod tests { assert_eq!(ULoc::for_language_tag("sr-u-tz-uslax").unwrap(), loc); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_for_language_error() { let loc = ULoc::for_language_tag("en_US").unwrap(); @@ -1224,7 +1191,6 @@ mod tests { assert_eq!(loc.country(), None); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_iso3_language() { let loc = ULoc::for_language_tag("en-US").unwrap(); @@ -1235,7 +1201,6 @@ mod tests { assert_eq!(iso_lang, None); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_iso3_country() { let loc = ULoc::for_language_tag("en-US").unwrap(); @@ -1246,7 +1211,6 @@ mod tests { assert_eq!(iso_country, None); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_display_language() { let english_locale = ULoc::for_language_tag("en").unwrap(); @@ -1260,7 +1224,6 @@ mod tests { assert_eq!(root_locale.display_language(&french_locale).unwrap().as_string_debug(), "langue indéterminée"); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_display_script() { let english_latin_locale = ULoc::for_language_tag("en-latg").unwrap(); @@ -1301,7 +1264,6 @@ mod tests { assert_eq!(calendar_value_in_french.unwrap().as_string_debug(), "calendrier hébraïque"); } - #[cfg(feature = "icu_version_64_plus")] #[test] fn test_display_name() { let loc = ULoc::for_language_tag("az-Cyrl-AZ-u-ca-hebrew-t-it-x-whatever").unwrap(); @@ -1345,7 +1307,6 @@ mod tests { assert!(locale.is_ok()); } - #[cfg(feature = "icu_version_67_plus")] #[test] fn test_get_available_locales_by_type() { let locales1 = ULoc::get_available_locales_by_type(ULocAvailableType::ULOC_AVAILABLE_DEFAULT); @@ -1371,14 +1332,12 @@ mod tests { assert!(alias_locales.contains(&ULoc::try_from("ars").unwrap())); } - #[cfg(feature = "icu_version_67_plus")] #[test] #[should_panic(expected = "ULOC_AVAILABLE_COUNT is for internal use only")] fn test_get_available_locales_by_type_panic() { ULoc::get_available_locales_by_type(ULocAvailableType::ULOC_AVAILABLE_COUNT); } - #[cfg(feature = "icu_version_67_plus")] #[test] fn test_get_available_locales_by_type_error() { assert!(!ULoc::open_available_by_type(ULocAvailableType::ULOC_AVAILABLE_COUNT).is_ok()); diff --git a/rust_icu_umsg/Cargo.toml b/rust_icu_umsg/Cargo.toml index c94e749a..60831483 100644 --- a/rust_icu_umsg/Cargo.toml +++ b/rust_icu_umsg/Cargo.toml @@ -56,30 +56,6 @@ icu_version_in_env = [ "rust_icu_uloc/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_unorm2/Cargo.toml b/rust_icu_unorm2/Cargo.toml index 2da39a0a..e9f24b45 100644 --- a/rust_icu_unorm2/Cargo.toml +++ b/rust_icu_unorm2/Cargo.toml @@ -67,38 +67,6 @@ icu_version_in_env = [ "rust_icu_uloc/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_ucal/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_ucal/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_ucal/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_ucal/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_unum/Cargo.toml b/rust_icu_unum/Cargo.toml index c875b244..b1a63383 100644 --- a/rust_icu_unum/Cargo.toml +++ b/rust_icu_unum/Cargo.toml @@ -59,34 +59,6 @@ icu_version_in_env = [ "rust_icu_uloc/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uformattable/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uformattable/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uformattable/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uformattable/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_unumberformatter/Cargo.toml b/rust_icu_unumberformatter/Cargo.toml index 1ec150cf..35b9cd22 100644 --- a/rust_icu_unumberformatter/Cargo.toml +++ b/rust_icu_unumberformatter/Cargo.toml @@ -64,38 +64,6 @@ icu_version_in_env = [ "rust_icu_unum/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uformattable/icu_version_64_plus", - "rust_icu_uloc/icu_version_64_plus", - "rust_icu_unum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uformattable/icu_version_67_plus", - "rust_icu_uloc/icu_version_67_plus", - "rust_icu_unum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uformattable/icu_version_68_plus", - "rust_icu_uloc/icu_version_68_plus", - "rust_icu_unum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uformattable/icu_version_69_max", - "rust_icu_uloc/icu_version_69_max", - "rust_icu_unum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_unumberformatter/src/lib.rs b/rust_icu_unumberformatter/src/lib.rs index 45965089..1d7ed58e 100644 --- a/rust_icu_unumberformatter/src/lib.rs +++ b/rust_icu_unumberformatter/src/lib.rs @@ -72,47 +72,25 @@ impl UNumberFormatter { ) -> Result { let mut status = sys::UErrorCode::U_ZERO_ERROR; - // Uses the "with error" flavor of the constructor for ICU versions upwards of - // 64. This allows more elaborate error messages in case of an issue. - #[cfg(feature = "icu_version_64_plus")] - { - let mut parse_status = common::NO_PARSE_ERROR.clone(); - let rep = unsafe { - assert!(common::Error::is_ok(status)); - versioned_function!(unumf_openForSkeletonAndLocaleWithError)( - skeleton.as_c_ptr(), - skeleton.len() as i32, - locale.label().as_ptr() as *const std::os::raw::c_char, - &mut parse_status, - &mut status, - ) - }; - assert_ne!(rep, 0 as *mut sys::UNumberFormatter); - common::parse_ok(parse_status)?; - common::Error::ok_or_warning(status)?; - let result = UNumberFormatter { - rep: std::ptr::NonNull::new(rep).unwrap(), - }; - return Ok(result); - } - #[cfg(not(feature = "icu_version_64_plus"))] - { - let rep = unsafe { - assert!(common::Error::is_ok(status)); - versioned_function!(unumf_openForSkeletonAndLocale)( - skeleton.as_c_ptr(), - skeleton.len() as i32, - locale.label().as_ptr() as *const std::os::raw::c_char, - &mut status, - ) - }; - assert_ne!(rep, 0 as *mut sys::UNumberFormatter); - common::Error::ok_or_warning(status)?; - let result = UNumberFormatter { - rep: std::ptr::NonNull::new(rep).unwrap(), - }; - return Ok(result); - } + // Uses the "with error" flavor of the constructor, which allows more + // elaborate error messages in case of an issue. + let mut parse_status = common::NO_PARSE_ERROR.clone(); + let rep = unsafe { + assert!(common::Error::is_ok(status)); + versioned_function!(unumf_openForSkeletonAndLocaleWithError)( + skeleton.as_c_ptr(), + skeleton.len() as i32, + locale.label().as_ptr() as *const std::os::raw::c_char, + &mut parse_status, + &mut status, + ) + }; + assert_ne!(rep, 0 as *mut sys::UNumberFormatter); + common::parse_ok(parse_status)?; + common::Error::ok_or_warning(status)?; + Ok(UNumberFormatter { + rep: std::ptr::NonNull::new(rep).unwrap(), + }) } /// Similar to [UNumberFormatter::try_new_ustring] but uses Rust types. diff --git a/rust_icu_upluralrules/Cargo.toml b/rust_icu_upluralrules/Cargo.toml index 96852fc0..1bdebc22 100644 --- a/rust_icu_upluralrules/Cargo.toml +++ b/rust_icu_upluralrules/Cargo.toml @@ -54,30 +54,6 @@ icu_version_in_env = [ "rust_icu_uenum/icu_version_in_env", "rust_icu_ustring/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ures/Cargo.toml b/rust_icu_ures/Cargo.toml index 7231553b..bd46aa87 100644 --- a/rust_icu_ures/Cargo.toml +++ b/rust_icu_ures/Cargo.toml @@ -46,26 +46,6 @@ icu_version_in_env = [ "rust_icu_common/icu_version_in_env", "rust_icu_uenum/icu_version_in_env", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_ustring/Cargo.toml b/rust_icu_ustring/Cargo.toml index 77ffdddb..bfa5fb6d 100644 --- a/rust_icu_ustring/Cargo.toml +++ b/rust_icu_ustring/Cargo.toml @@ -29,21 +29,5 @@ use-bindgen = ["rust_icu_sys/use-bindgen", "rust_icu_common/use-bindgen"] renaming = ["rust_icu_sys/renaming", "rust_icu_common/renaming"] icu_config = ["rust_icu_sys/icu_config", "rust_icu_common/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] diff --git a/rust_icu_utext/Cargo.toml b/rust_icu_utext/Cargo.toml index f28e21da..f41c38c4 100644 --- a/rust_icu_utext/Cargo.toml +++ b/rust_icu_utext/Cargo.toml @@ -28,22 +28,6 @@ use-bindgen = ["rust_icu_sys/use-bindgen", "rust_icu_common/use-bindgen"] renaming = ["rust_icu_sys/renaming", "rust_icu_common/renaming"] icu_config = ["rust_icu_sys/icu_config", "rust_icu_common/icu_config"] icu_version_in_env = ["rust_icu_sys/icu_version_in_env", "rust_icu_common/icu_version_in_env"] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", -] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", -] [badges] maintenance = { status = "actively-developed" } diff --git a/rust_icu_utrans/Cargo.toml b/rust_icu_utrans/Cargo.toml index 0c6e7ca7..2fe7c6bb 100644 --- a/rust_icu_utrans/Cargo.toml +++ b/rust_icu_utrans/Cargo.toml @@ -36,18 +36,6 @@ icu_config = [ "rust_icu_uenum/icu_config", "rust_icu_ustring/icu_config", ] -icu_version_64_plus = [ - "rust_icu_common/icu_version_64_plus", - "rust_icu_sys/icu_version_64_plus", - "rust_icu_uenum/icu_version_64_plus", - "rust_icu_ustring/icu_version_64_plus", -] -icu_version_67_plus = [ - "rust_icu_common/icu_version_67_plus", - "rust_icu_sys/icu_version_67_plus", - "rust_icu_uenum/icu_version_67_plus", - "rust_icu_ustring/icu_version_67_plus", -] icu_version_in_env = [ "rust_icu_common/icu_version_in_env", "rust_icu_sys/icu_version_in_env", @@ -66,18 +54,6 @@ use-bindgen = [ "rust_icu_uenum/use-bindgen", "rust_icu_ustring/use-bindgen", ] -icu_version_68_plus = [ - "rust_icu_common/icu_version_68_plus", - "rust_icu_sys/icu_version_68_plus", - "rust_icu_uenum/icu_version_68_plus", - "rust_icu_ustring/icu_version_68_plus", -] -icu_version_69_max = [ - "rust_icu_common/icu_version_69_max", - "rust_icu_sys/icu_version_69_max", - "rust_icu_uenum/icu_version_69_max", - "rust_icu_ustring/icu_version_69_max", -] [badges] is-it-maintained-issue-resolution = { repository = "google/rust_icu" } From 78b6758a7c06d632e761dd9e03bf877aacd70c50 Mon Sep 17 00:00:00 2001 From: Clyde Gerber Date: Tue, 2 Jun 2026 16:27:14 -0500 Subject: [PATCH 2/2] docs(contributing): clarify reason for version gating Per review feedback: version gating in this workspace has historically been about behavior differences between ICU versions (locale data updates, behavioral bug fixes that change output), not about API availability. Updates the example to use a real ICU version (`icu_version_78_plus`) instead of a hypothetical one. This commit was created by an automated coding assistant, with human supervision. --- CONTRIBUTING.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0bb3b28e..548ce99d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,16 +34,19 @@ term health of the repository. ## Adding ICU-version-dependent code -The workspace currently targets ICU versions for which all wrapped APIs are -uniformly available, so no version-gated code remains. If a future change -introduces functionality that exists only in newer (or only in older) ICU -versions, follow the pattern below — it must be wired up in **two** places -that are kept in sync. +The workspace currently targets a range of ICU versions across which the +wrapped APIs behave uniformly enough that no version-gated code is needed. +Version gating has historically been required when ICU's behavior changes +between versions in user-visible ways — for example, changes in locale +data or fixes to behavioral bugs that cause the same input to produce +different output across ICU versions. If a future change introduces this +kind of difference, follow the pattern below — it must be wired up in +**two** places that are kept in sync. ### 1. The Cargo feature Declare a feature in each affected crate's `Cargo.toml`, named after the -boundary version (e.g. `icu_version_80_plus`). Propagate it to dependent +boundary version (e.g. `icu_version_78_plus`). Propagate it to dependent crates the same way `icu_version_in_env` is propagated. ### 2. Automatic activation via `build.rs`