Auto merge of #18246 - ChayimFriedman2:fix-18238, r=Veykril

fix: Fix `prettify_macro_expansion()` when the node isn't the whole file

Fixes #18238.
This commit is contained in:
bors 2024-10-09 15:20:47 +00:00
commit e33e819b12
2 changed files with 34 additions and 1 deletions

View file

@ -15,11 +15,14 @@ pub fn prettify_macro_expansion(
span_map: &ExpansionSpanMap, span_map: &ExpansionSpanMap,
target_crate_id: CrateId, target_crate_id: CrateId,
) -> SyntaxNode { ) -> SyntaxNode {
// Because `syntax_bridge::prettify_macro_expansion::prettify_macro_expansion()` clones subtree for `syn`,
// that means it will be offsetted to the beginning.
let span_offset = syn.text_range().start();
let crate_graph = db.crate_graph(); let crate_graph = db.crate_graph();
let target_crate = &crate_graph[target_crate_id]; let target_crate = &crate_graph[target_crate_id];
let mut syntax_ctx_id_to_dollar_crate_replacement = FxHashMap::default(); let mut syntax_ctx_id_to_dollar_crate_replacement = FxHashMap::default();
syntax_bridge::prettify_macro_expansion::prettify_macro_expansion(syn, &mut |dollar_crate| { syntax_bridge::prettify_macro_expansion::prettify_macro_expansion(syn, &mut |dollar_crate| {
let ctx = span_map.span_at(dollar_crate.text_range().start()).ctx; let ctx = span_map.span_at(dollar_crate.text_range().start() + span_offset).ctx;
let replacement = let replacement =
syntax_ctx_id_to_dollar_crate_replacement.entry(ctx).or_insert_with(|| { syntax_ctx_id_to_dollar_crate_replacement.entry(ctx).or_insert_with(|| {
let ctx_data = db.lookup_intern_syntax_context(ctx); let ctx_data = db.lookup_intern_syntax_context(ctx);

View file

@ -8988,3 +8988,33 @@ mod m {
"#]], "#]],
); );
} }
#[test]
fn regression_18238() {
check(
r#"
macro_rules! foo {
($name:ident) => {
pub static $name = Foo::new(|| {
$crate;
});
};
}
foo!(BAR_$0);
"#,
expect![[r#"
*BAR_*
```rust
test
```
```rust
pub static BAR_: {error} = Foo::new(||{
crate;
})
```
"#]],
);
}