Add hygiene annotations for tokens in macro_rules! bodies#153308
Add hygiene annotations for tokens in macro_rules! bodies#153308rust-bors[bot] merged 2 commits intorust-lang:mainfrom
macro_rules! bodies#153308Conversation
`-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes. Signed-off-by: Andrew V. Teylu <andrew.teylu@vector.com>
|
r? @jackh726 rustbot has assigned @jackh726. Use Why was this reviewer chosen?The reviewer was selected based on:
|
macro_rules! bodies
|
(I hope this appropriate; I only selected @jdonszelmann as she helped me with my previous commit in the same area) |
Add `unpretty-debug-shadow` test covering macro body tokens that reference a shadowed variable, and simplify the `unpretty-debug-metavars` test macro. Signed-off-by: Andrew V. Teylu <andrew.teylu@vector.com>
| //@ check-pass | ||
| //@ compile-flags: -Zunpretty=expanded,hygiene | ||
|
|
||
| // Regression test for token hygiene annotations in -Zunpretty=expanded,hygiene |
There was a problem hiding this comment.
@Kivooeo no, mainly because I discovered this bug while looking through the hygiene output -- I thought about making an issue, but I realised it would be just as quick to fix the issue ... hence this PR!
There was a problem hiding this comment.
I guess two follow-ons:
- Is it the word "regression" that suggests there should be an issue? Should I change this just to "test"?
- Would you prefer it if I created an issue that this PR could then close?
|
Any thoughts @jdonszelmann / @Kivooeo? 😊 |
|
@fmease I don't suppose you'd be interested in taking a look at this? |
|
This makes the output very verbose, but idk, that's maybe what you want from this unstable feature. I don't necessarily need to see an issue, unless this is part of a larger improvement of the unstable flag which idk if it is. If this just fixes a bug I'm ok. Regardless, this is not stabilized behavior, it seems more complete to me than it was before, and the behavior is well documented in the test, so I'm going to approve. @bors r+ rollup |
…elmann Add hygiene annotations for tokens in `macro_rules!` bodies `-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes.
…uwer Rollup of 5 pull requests Successful merges: - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153987 (mGCA: Lower const generic args to infer when needed) - #153992 (bootstrap: Optionally print a backtrace if a command fails)
…elmann Add hygiene annotations for tokens in `macro_rules!` bodies `-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes.
…uwer Rollup of 9 pull requests Successful merges: - #153957 (Add bootstrap step for stdarch-verify) - #153727 (When single impl can satisfy inference error, suggest type) - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153987 (mGCA: Lower const generic args to infer when needed) - #153992 (bootstrap: Optionally print a backtrace if a command fails) - #154036 (borrowck/type_check: remove helper left-over from unsized locals) - #154038 (merge `regions-outlives-nominal-type-*` tests into one file)
…elmann Add hygiene annotations for tokens in `macro_rules!` bodies `-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes.
…elmann Add hygiene annotations for tokens in `macro_rules!` bodies `-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes.
…uwer Rollup of 9 pull requests Successful merges: - #153957 (Add bootstrap step for stdarch-verify) - #153727 (When single impl can satisfy inference error, suggest type) - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153987 (mGCA: Lower const generic args to infer when needed) - #153992 (bootstrap: Optionally print a backtrace if a command fails) - #154036 (borrowck/type_check: remove helper left-over from unsized locals) - #154038 (merge `regions-outlives-nominal-type-*` tests into one file)
…uwer Rollup of 9 pull requests Successful merges: - #153957 (Add bootstrap step for stdarch-verify) - #153727 (When single impl can satisfy inference error, suggest type) - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153987 (mGCA: Lower const generic args to infer when needed) - #153992 (bootstrap: Optionally print a backtrace if a command fails) - #154036 (borrowck/type_check: remove helper left-over from unsized locals) - #154038 (merge `regions-outlives-nominal-type-*` tests into one file)
…elmann Add hygiene annotations for tokens in `macro_rules!` bodies `-Zunpretty=expanded,hygiene` was not printing syntax context annotations for identifiers and lifetimes inside `macro_rules!` bodies. These tokens are printed via `print_tt()` → `token_to_string_ext()`, which converts tokens to strings without calling `ann_post()`. This meant that macro-generated `macro_rules!` definitions with hygienic metavar parameters (e.g. multiple `$marg` distinguished only by hygiene) were printed with no way to tell them apart. This was fixed by adding a match on `token.kind` in `print_tt()` to call `ann_post()` for `Ident`, `NtIdent`, `Lifetime`, and `NtLifetime` tokens, matching how `print_ident()` and `print_lifetime()` already handle AST-level identifiers and lifetimes.
…uwer Rollup of 19 pull requests Successful merges: - #152870 (Do not enable split debuginfo for windows-gnu) - #153333 (Fix bootstrap rust build failure for vxworks) - #153681 (ci: add runners for vanilla LLVM 22) - #153727 (When single impl can satisfy inference error, suggest type) - #153824 (Add `Wake` diagnostic item for `alloc::task::Wake`) - #154077 (Optimize 128-bit integer formatting) - #154078 (`define_callbacks` tweaks) - #151905 (Split the `dec2flt::RawFloat` trait for easier reuse) - #153170 (Add is_disconnected functions to mpsc and mpmc channels) - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153804 (Derive Macro Eq: link to more detailed documentation) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153974 (Point at return type when it is the source of the type expectation) - #153987 (mGCA: Lower const generic args to infer when needed) - #154018 (simplify and remove `tests/ui/kindck` and related tests) - #154036 (borrowck/type_check: remove helper left-over from unsized locals) - #154038 (merge `regions-outlives-nominal-type-*` tests into one file) - #154041 (bootstrap: Allow `--bless`ing changes to editor settings files)
…uwer Rollup of 19 pull requests Successful merges: - #152870 (Do not enable split debuginfo for windows-gnu) - #153333 (Fix bootstrap rust build failure for vxworks) - #153681 (ci: add runners for vanilla LLVM 22) - #153727 (When single impl can satisfy inference error, suggest type) - #153824 (Add `Wake` diagnostic item for `alloc::task::Wake`) - #154077 (Optimize 128-bit integer formatting) - #154078 (`define_callbacks` tweaks) - #151905 (Split the `dec2flt::RawFloat` trait for easier reuse) - #153170 (Add is_disconnected functions to mpsc and mpmc channels) - #153308 (Add hygiene annotations for tokens in `macro_rules!` bodies) - #153557 (fix inference variables leaking into HIR const literal lowering logic) - #153804 (Derive Macro Eq: link to more detailed documentation) - #153913 (Fix some suggestions of the `for-loops-over-fallibles` lint) - #153974 (Point at return type when it is the source of the type expectation) - #153987 (mGCA: Lower const generic args to infer when needed) - #154018 (simplify and remove `tests/ui/kindck` and related tests) - #154036 (borrowck/type_check: remove helper left-over from unsized locals) - #154038 (merge `regions-outlives-nominal-type-*` tests into one file) - #154041 (bootstrap: Allow `--bless`ing changes to editor settings files)
-Zunpretty=expanded,hygienewas not printing syntax context annotations for identifiers and lifetimes insidemacro_rules!bodies. These tokens are printed viaprint_tt()→token_to_string_ext(), which converts tokens to strings without callingann_post(). This meant that macro-generatedmacro_rules!definitions with hygienic metavar parameters (e.g. multiple$margdistinguished only by hygiene) were printed with no way to tell them apart.This was fixed by adding a match on
token.kindinprint_tt()to callann_post()forIdent,NtIdent,Lifetime, andNtLifetimetokens, matching howprint_ident()andprint_lifetime()already handle AST-level identifiers and lifetimes.