mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Correctly set the span of the proc_macro crate's Group delimiters
Previously only the open delimiter's span was set, and this caused... weird problems.
This commit is contained in:
parent
96a253112c
commit
bf8d03c1b5
@ -258,7 +258,9 @@ impl server::TokenStream for RaSpanServer {
|
|||||||
&mut self,
|
&mut self,
|
||||||
stream: Self::TokenStream,
|
stream: Self::TokenStream,
|
||||||
) -> Vec<bridge::TokenTree<Self::TokenStream, Self::Span, Self::Symbol>> {
|
) -> Vec<bridge::TokenTree<Self::TokenStream, Self::Span, Self::Symbol>> {
|
||||||
stream.into_bridge()
|
stream.into_bridge(&mut |first, second| {
|
||||||
|
server::Span::join(self, first, second).unwrap_or(first)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +238,8 @@ impl server::TokenStream for TokenIdServer {
|
|||||||
&mut self,
|
&mut self,
|
||||||
stream: Self::TokenStream,
|
stream: Self::TokenStream,
|
||||||
) -> Vec<bridge::TokenTree<Self::TokenStream, Self::Span, Self::Symbol>> {
|
) -> Vec<bridge::TokenTree<Self::TokenStream, Self::Span, Self::Symbol>> {
|
||||||
stream.into_bridge()
|
// Can't join with `TokenId`.
|
||||||
|
stream.into_bridge(&mut |first, _second| first)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,10 @@ impl<S: Copy> TokenStream<S> {
|
|||||||
self.token_trees.is_empty()
|
self.token_trees.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn into_bridge(self) -> Vec<bridge::TokenTree<Self, S, intern::Symbol>> {
|
pub(crate) fn into_bridge(
|
||||||
|
self,
|
||||||
|
join_spans: &mut dyn FnMut(S, S) -> S,
|
||||||
|
) -> Vec<bridge::TokenTree<Self, S, intern::Symbol>> {
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
let mut iter = self.token_trees.into_iter();
|
let mut iter = self.token_trees.into_iter();
|
||||||
while let Some(tree) = iter.next() {
|
while let Some(tree) = iter.next() {
|
||||||
@ -98,7 +101,11 @@ impl<S: Copy> TokenStream<S> {
|
|||||||
token_trees: iter.by_ref().take(subtree.usize_len()).collect(),
|
token_trees: iter.by_ref().take(subtree.usize_len()).collect(),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
span: bridge::DelimSpan::from_single(subtree.delimiter.open),
|
span: bridge::DelimSpan {
|
||||||
|
open: subtree.delimiter.open,
|
||||||
|
close: subtree.delimiter.close,
|
||||||
|
entire: join_spans(subtree.delimiter.open, subtree.delimiter.close),
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ fn test_fn_like_macro_clone_ident_subtree() {
|
|||||||
SUBTREE $$ 42:2@0..100#ROOT2024 42:2@0..100#ROOT2024
|
SUBTREE $$ 42:2@0..100#ROOT2024 42:2@0..100#ROOT2024
|
||||||
IDENT ident 42:2@0..5#ROOT2024
|
IDENT ident 42:2@0..5#ROOT2024
|
||||||
PUNCH , [alone] 42:2@5..6#ROOT2024
|
PUNCH , [alone] 42:2@5..6#ROOT2024
|
||||||
SUBTREE [] 42:2@7..8#ROOT2024 42:2@7..8#ROOT2024"#]],
|
SUBTREE [] 42:2@7..9#ROOT2024 42:2@7..9#ROOT2024"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user