diff options
| author | Matthias Krüger <476013+matthiaskrgr@users.noreply.github.com> | 2025-03-03 10:40:56 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-03 10:40:56 +0100 |
| commit | 2344a34241e2cf08e6285ddf7755b70bfa306e5a (patch) | |
| tree | 5e72f03cef42d18af3990ac2e88a906d730d70c2 /src/tools/rustfmt/tests | |
| parent | 81d8edc2000aa38b08ad09fce22d90f1990b6459 (diff) | |
| parent | 42f51d4fd42c95e0c51c3f8742d63db0548cd5a0 (diff) | |
Rollup merge of #132388 - frank-king:feature/where-cfg, r=petrochenkov
Implement `#[cfg]` in `where` clauses This PR implements #115590, which supports `#[cfg]` attributes in `where` clauses. The biggest change is, that it adds `AttrsVec` and `NodeId` to the `ast::WherePredicate` and `HirId` to the `hir::WherePredicate`.
Diffstat (limited to 'src/tools/rustfmt/tests')
| -rw-r--r-- | src/tools/rustfmt/tests/target/cfg_attribute_in_where.rs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/tools/rustfmt/tests/target/cfg_attribute_in_where.rs b/src/tools/rustfmt/tests/target/cfg_attribute_in_where.rs new file mode 100644 index 00000000000..11f495b1629 --- /dev/null +++ b/src/tools/rustfmt/tests/target/cfg_attribute_in_where.rs @@ -0,0 +1,116 @@ +// rustfmt-inline_attribute_width: 40 + +#![crate_type = "lib"] +#![feature(cfg_attribute_in_where)] +use std::marker::PhantomData; + +#[cfg(a)] +trait TraitA {} + +#[cfg(b)] +trait TraitB {} + +trait A<T> +where + #[cfg = a_very_long_attribute_name] + T: TraitA, + #[cfg = another_very_long_attribute_name] + T: TraitB, +{ + type B<U> + where + #[cfg = a] + // line comment after the attribute + U: TraitA, + #[cfg = b] + /* block comment after the attribute */ + U: TraitB, + #[cfg = a] // short + U: TraitA, + #[cfg = b] /* short */ U: TraitB; + + fn foo<U>(&self) + where + /// line doc comment before the attribute + U: TraitA, + /** line doc block comment before the attribute */ + U: TraitB; +} + +impl<T> A<T> for T +where + #[doc = "line doc before the attribute"] + T: TraitA, + /** short doc */ + T: TraitB, +{ + type B<U> + = () + where + #[doc = "short"] U: TraitA, + #[doc = "short"] + #[cfg = a] + U: TraitB; + + fn foo<U>(&self) + where + #[cfg = a] + #[cfg = b] + U: TraitA, + /// line doc + #[cfg = c] + U: TraitB, + { + } +} + +struct C<T> +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, +{ + _t: PhantomData<T>, +} + +union D<T> +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, +{ + _t: PhantomData<T>, +} + +enum E<T> +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, +{ + E(PhantomData<T>), +} + +#[allow(type_alias_bounds)] +type F<T> +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, += T; + +impl<T> C<T> +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, +{ + fn new<U>() + where + #[cfg = a] U: TraitA, + #[cfg = b] U: TraitB, + { + } +} + +fn foo<T>() +where + #[cfg = a] T: TraitA, + #[cfg = b] T: TraitB, +{ +} |
