-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Kickstart the inner usage of macro_metavar_expr
#95761
Conversation
array_impl_default? |
|
Done |
Thanks. I will see if it is worth changing the current macro structure in a following PR |
@rustbot label -S-waiting-on-author +S-waiting-on-review |
Error: Label review can only be set by Rust team members Please let |
Error: Label author can only be set by Rust team members Please let |
@bors r+ |
📌 Commit 3191d27 has been approved by |
…nkov Kickstart the inner usage of `macro_metavar_expr` There can be more use-cases but I am out of ideas. cc rust-lang#83527 r? `@petrochenkov`
Rollup of 7 pull requests Successful merges: - rust-lang#95102 (Add known-bug for rust-lang#95034) - rust-lang#95579 (Add `<[[T; N]]>::flatten{_mut}`) - rust-lang#95634 (Mailmap update) - rust-lang#95705 (Promote x86_64-unknown-none target to Tier 2 and distribute build artifacts) - rust-lang#95761 (Kickstart the inner usage of `macro_metavar_expr`) - rust-lang#95782 (Windows: Increase a pipe's buffer capacity to 64kb) - rust-lang#95791 (hide an #[allow] directive from the Arc::new_cyclic doc example) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Left overs of rust-lang#95761 These are just nits. Feel free to close this PR if all modifications are not worth merging. * `#![feature(decl_macro)]` is not needed anymore in `rustc_expand` * `tuple_impls` does not require `$Tuple:ident`. I guess it is there to enhance readability? r? `@petrochenkov`
Left overs of rust-lang#95761 These are just nits. Feel free to close this PR if all modifications are not worth merging. * `#![feature(decl_macro)]` is not needed anymore in `rustc_expand` * `tuple_impls` does not require `$Tuple:ident`. I guess it is there to enhance readability? r? ``@petrochenkov``
Left overs of rust-lang#95761 These are just nits. Feel free to close this PR if all modifications are not worth merging. * `#![feature(decl_macro)]` is not needed anymore in `rustc_expand` * `tuple_impls` does not require `$Tuple:ident`. I guess it is there to enhance readability? r? ```@petrochenkov```
Rollup of 7 pull requests Successful merges: - rust-lang#94794 (Clarify indexing into Strings) - rust-lang#95361 (Make non-power-of-two alignments a validity error in `Layout`) - rust-lang#95369 (Fix `x test src/librustdoc` with `download-rustc` enabled ) - rust-lang#95805 (Left overs of rust-lang#95761) - rust-lang#95808 (expand: Remove `ParseSess::missing_fragment_specifiers`) - rust-lang#95817 (hide another #[allow] directive from a docs example) - rust-lang#95831 (Use bitwise XOR in to_ascii_uppercase) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
…lett Stabilize `$$` in Rust 1.63.0 # Stabilization proposal This PR proposes the stabilization of a subset of `#![feature(macro_metavar_expr)]` or more specifically, the stabilization of dollar-dollar (`$$`). Tracking issue: rust-lang#83527 Version: 1.63 (2022-06-28 => beta, 2022-08-11 => stable). ## What is stabilized ```rust macro_rules! foo { () => { macro_rules! bar { ( $$( $$any:tt )* ) => { $$( $$any )* }; } }; } fn main() { foo!(); } ``` ## Motivation For more examples, see the [RFC](https://github.com/markbt/rfcs/blob/macro_metavar_expr/text/0000-macro-metavar-expr.md). Users must currently resort to a tricky and not so well-known hack to declare nested macros with repetitions. ```rust macro_rules! foo { ($dollar:tt) => { macro_rules! bar { ( $dollar ( $any:tt )* ) => { $dollar ( $any )* }; } }; } fn main() { foo!($); } ``` As seen above, such hack is fragile and makes work with declarative macros much more unpleasant. Dollar-dollar (`$$`), on the other hand, makes nested macros more intuitive. ## What isn't stabilized `count`, `ignore`, `index` and `length` are not being stabilized due to the lack of consensus. ## History * 2021-02-22, [RFC: Declarative macro metavariable expressions](rust-lang/rfcs#3086) * 2021-03-26, [Tracking Issue for RFC 3086: macro metavariable expressions](rust-lang#83527) * 2022-02-01, [Implement macro meta-variable expressions](rust-lang#93545) * 2022-02-25, [[1/2] Implement macro meta-variable expressions](rust-lang#94368) * 2022-03-11, [[2/2] Implement macro meta-variable expressions](rust-lang#94833) * 2022-03-12, [Fix remaining meta-variable expression TODOs](rust-lang#94884) * 2019-03-21, [[macro-metavar-expr] Fix generated tokens hygiene](rust-lang#95188) * 2022-04-07, [Kickstart the inner usage of macro_metavar_expr](rust-lang#95761) * 2022-04-07, [[macro_metavar_expr] Add tests to ensure the feature requirement](rust-lang#95764) ## Non-stabilized expressions rust-lang#83527 lists several concerns about some characteristics of `count`, `index` and `length` that effectively make their stabilization unfeasible. `$$` and `ignore`, however, are not part of any discussion and thus are suitable for stabilization. It is not in the scope of this PR to detail each concern or suggest any possible converging solution. Such thing should be restrained in this tracking issue. ## Tests This list is a subset of https://github.com/rust-lang/rust/tree/master/src/test/ui/macros/rfc-3086-metavar-expr * [Ensures that nested macros have correct behavior](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/dollar-dollar-has-correct-behavior.rs) * [Compares produced tokens to assert expected outputs](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/feature-gate-macro_metavar_expr.rs) * [Checks the declarations of the feature](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/required-feature.rs) * [Verifies all possible errors that can occur due to incorrect user input](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/syntax-errors.rs) ## Possible future work Once consensus is achieved, other nightly expressions can be stabilized. Thanks `@markbt` for creating the RFC and thanks to `@petrochenkov` and `@mark-i-m` for reviewing the implementations.
…lett Stabilize `$$` in Rust 1.63.0 # Stabilization proposal This PR proposes the stabilization of a subset of `#![feature(macro_metavar_expr)]` or more specifically, the stabilization of dollar-dollar (`$$`). Tracking issue: rust-lang#83527 Version: 1.63 (2022-06-28 => beta, 2022-08-11 => stable). ## What is stabilized ```rust macro_rules! foo { () => { macro_rules! bar { ( $$( $$any:tt )* ) => { $$( $$any )* }; } }; } fn main() { foo!(); } ``` ## Motivation For more examples, see the [RFC](https://github.com/markbt/rfcs/blob/macro_metavar_expr/text/0000-macro-metavar-expr.md). Users must currently resort to a tricky and not so well-known hack to declare nested macros with repetitions. ```rust macro_rules! foo { ($dollar:tt) => { macro_rules! bar { ( $dollar ( $any:tt )* ) => { $dollar ( $any )* }; } }; } fn main() { foo!($); } ``` As seen above, such hack is fragile and makes work with declarative macros much more unpleasant. Dollar-dollar (`$$`), on the other hand, makes nested macros more intuitive. ## What isn't stabilized `count`, `ignore`, `index` and `length` are not being stabilized due to the lack of consensus. ## History * 2021-02-22, [RFC: Declarative macro metavariable expressions](rust-lang/rfcs#3086) * 2021-03-26, [Tracking Issue for RFC 3086: macro metavariable expressions](rust-lang#83527) * 2022-02-01, [Implement macro meta-variable expressions](rust-lang#93545) * 2022-02-25, [[1/2] Implement macro meta-variable expressions](rust-lang#94368) * 2022-03-11, [[2/2] Implement macro meta-variable expressions](rust-lang#94833) * 2022-03-12, [Fix remaining meta-variable expression TODOs](rust-lang#94884) * 2019-03-21, [[macro-metavar-expr] Fix generated tokens hygiene](rust-lang#95188) * 2022-04-07, [Kickstart the inner usage of macro_metavar_expr](rust-lang#95761) * 2022-04-07, [[macro_metavar_expr] Add tests to ensure the feature requirement](rust-lang#95764) ## Non-stabilized expressions rust-lang#83527 lists several concerns about some characteristics of `count`, `index` and `length` that effectively make their stabilization unfeasible. `$$` and `ignore`, however, are not part of any discussion and thus are suitable for stabilization. It is not in the scope of this PR to detail each concern or suggest any possible converging solution. Such thing should be restrained in this tracking issue. ## Tests This list is a subset of https://github.com/rust-lang/rust/tree/master/src/test/ui/macros/rfc-3086-metavar-expr * [Ensures that nested macros have correct behavior](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/dollar-dollar-has-correct-behavior.rs) * [Compares produced tokens to assert expected outputs](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/feature-gate-macro_metavar_expr.rs) * [Checks the declarations of the feature](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/required-feature.rs) * [Verifies all possible errors that can occur due to incorrect user input](https://github.com/rust-lang/rust/blob/master/src/test/ui/macros/rfc-3086-metavar-expr/syntax-errors.rs) ## Possible future work Once consensus is achieved, other nightly expressions can be stabilized. Thanks ``@markbt`` for creating the RFC and thanks to ``@petrochenkov`` and ``@mark-i-m`` for reviewing the implementations.
Tuple9(A B C D E F G H I) | ||
Tuple10(A B C D E F G H I J) | ||
Tuple11(A B C D E F G H I J K) | ||
Tuple12(A B C D E F G H I J K L) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change has caused rust-lang/rust-analyzer#12675
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not aware of the context within rust-analyzer but feel free to revert this commit if desired.
There can be more use-cases but I am out of ideas.
cc #83527
r? @petrochenkov