Skip to content

Commit 3c40b15

Browse files
committed
Don't descend MacroCall TokenTree delimiters
1 parent 5904726 commit 3c40b15

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

crates/hir/src/semantics.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
1717
use syntax::{
1818
algo::find_node_at_offset,
1919
ast::{self, GenericParamsOwner, LoopBodyOwner},
20-
match_ast, AstNode, SyntaxNode, SyntaxNodePtr, SyntaxToken, TextSize,
20+
match_ast, AstNode, SyntaxNode, SyntaxNodePtr, SyntaxToken, TextRange, TextSize,
2121
};
2222

2323
use crate::{
@@ -394,7 +394,15 @@ impl<'db> SemanticsImpl<'db> {
394394
match node {
395395
ast::MacroCall(macro_call) => {
396396
let tt = macro_call.token_tree()?;
397-
if !tt.syntax().text_range().contains_range(token.value.text_range()) {
397+
let l_delim = match tt.left_delimiter_token() {
398+
Some(it) => it.text_range().end(),
399+
None => tt.syntax().text_range().start()
400+
};
401+
let r_delim = match tt.right_delimiter_token() {
402+
Some(it) => it.text_range().start(),
403+
None => tt.syntax().text_range().end()
404+
};
405+
if !TextRange::new(l_delim, r_delim).contains_range(token.value.text_range()) {
398406
return None;
399407
}
400408
let file_id = sa.expand(self.db, token.with_value(&macro_call))?;

crates/ide/src/syntax_highlighting/test_data/highlighting.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@
148148
<span class="brace">}</span>
149149
<span class="brace">}</span>
150150

151+
<span class="keyword">macro_rules</span><span class="punctuation">!</span> <span class="macro declaration">dont_color_me_braces</span> <span class="brace">{</span>
152+
<span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="operator">=</span><span class="angle">&gt;</span> <span class="brace">{</span><span class="numeric_literal">0</span><span class="brace">}</span>
153+
<span class="brace">}</span>
154+
151155
<span class="keyword">macro_rules</span><span class="punctuation">!</span> <span class="macro declaration">noop</span> <span class="brace">{</span>
152156
<span class="parenthesis">(</span><span class="punctuation">$</span>expr<span class="colon">:</span>expr<span class="parenthesis">)</span> <span class="operator">=</span><span class="angle">&gt;</span> <span class="brace">{</span>
153157
<span class="punctuation">$</span>expr
@@ -171,6 +175,7 @@
171175
<span class="comment">// comment</span>
172176
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
173177
<span class="macro">println!</span><span class="parenthesis">(</span><span class="string_literal">"Hello, {}!"</span><span class="comma">,</span> <span class="numeric_literal">92</span><span class="parenthesis">)</span><span class="semicolon">;</span>
178+
<span class="macro">dont_color_me_braces!</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
174179

175180
<span class="keyword">let</span> <span class="keyword">mut</span> <span class="variable declaration mutable">vec</span> <span class="operator">=</span> <span class="unresolved_reference">Vec</span><span class="operator">::</span><span class="unresolved_reference">new</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
176181
<span class="keyword control">if</span> <span class="bool_literal">true</span> <span class="brace">{</span>

crates/ide/src/syntax_highlighting/tests.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ def_fn! {
122122
}
123123
}
124124
125+
macro_rules! dont_color_me_braces {
126+
() => {0}
127+
}
128+
125129
macro_rules! noop {
126130
($expr:expr) => {
127131
$expr
@@ -145,6 +149,7 @@ macro without_args {
145149
// comment
146150
fn main() {
147151
println!("Hello, {}!", 92);
152+
dont_color_me_braces!();
148153
149154
let mut vec = Vec::new();
150155
if true {

0 commit comments

Comments
 (0)