Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #19839 from ChayimFriedman2/inlay-hints-attr
fix: Correctly set the span of the proc_macro crate's Group delimiters
Lukas Wirth 11 months ago
parent f219124 · parent bf8d03c · commit 1511c5b
-rw-r--r--crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs4
-rw-r--r--crates/proc-macro-srv/src/server_impl/token_id.rs3
-rw-r--r--crates/proc-macro-srv/src/server_impl/token_stream.rs11
-rw-r--r--crates/proc-macro-srv/src/tests/mod.rs2
4 files changed, 15 insertions, 5 deletions
diff --git a/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs b/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs
index 64b40e7b94..e0c6e68f80 100644
--- a/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs
+++ b/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs
@@ -258,7 +258,9 @@ impl server::TokenStream for RaSpanServer {
&mut self,
stream: Self::TokenStream,
) -> 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)
+ })
}
}
diff --git a/crates/proc-macro-srv/src/server_impl/token_id.rs b/crates/proc-macro-srv/src/server_impl/token_id.rs
index 24a67bf45c..d55b269f86 100644
--- a/crates/proc-macro-srv/src/server_impl/token_id.rs
+++ b/crates/proc-macro-srv/src/server_impl/token_id.rs
@@ -238,7 +238,8 @@ impl server::TokenStream for TokenIdServer {
&mut self,
stream: Self::TokenStream,
) -> Vec<bridge::TokenTree<Self::TokenStream, Self::Span, Self::Symbol>> {
- stream.into_bridge()
+ // Can't join with `TokenId`.
+ stream.into_bridge(&mut |first, _second| first)
}
}
diff --git a/crates/proc-macro-srv/src/server_impl/token_stream.rs b/crates/proc-macro-srv/src/server_impl/token_stream.rs
index 072557913c..c5019a5917 100644
--- a/crates/proc-macro-srv/src/server_impl/token_stream.rs
+++ b/crates/proc-macro-srv/src/server_impl/token_stream.rs
@@ -56,7 +56,10 @@ impl<S: Copy> TokenStream<S> {
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 iter = self.token_trees.into_iter();
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(),
})
},
- 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),
+ },
}))
}
}
diff --git a/crates/proc-macro-srv/src/tests/mod.rs b/crates/proc-macro-srv/src/tests/mod.rs
index 3868fee40f..3a6ce639d1 100644
--- a/crates/proc-macro-srv/src/tests/mod.rs
+++ b/crates/proc-macro-srv/src/tests/mod.rs
@@ -144,7 +144,7 @@ fn test_fn_like_macro_clone_ident_subtree() {
SUBTREE $$ 42:[email protected]#ROOT2024 42:[email protected]#ROOT2024
IDENT ident 42:[email protected]#ROOT2024
PUNCH , [alone] 42:[email protected]#ROOT2024
- SUBTREE [] 42:[email protected]#ROOT2024 42:[email protected]#ROOT2024"#]],
+ SUBTREE [] 42:[email protected]#ROOT2024 42:[email protected]#ROOT2024"#]],
);
}