Unnamed repository; edit this file 'description' to name the repository.
Move all bridge methods into a single type
bjorn3 3 months ago
parent 5542658 · commit 0d59695
-rw-r--r--crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs70
-rw-r--r--crates/proc-macro-srv/src/server_impl/token_id.rs70
2 files changed, 78 insertions, 62 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 1845de75dd..4689163974 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
@@ -58,13 +58,19 @@ impl server::FreeFunctions for RaSpanServer<'_> {
fn emit_diagnostic(&mut self, _: Diagnostic<Self::Span>) {
// FIXME handle diagnostic
}
-}
-impl server::TokenStream for RaSpanServer<'_> {
- fn is_empty(&mut self, stream: &Self::TokenStream) -> bool {
+ fn tt_drop(&mut self, stream: Self::TokenStream) {
+ drop(stream);
+ }
+
+ fn tt_clone(&mut self, stream: &Self::TokenStream) -> Self::TokenStream {
+ stream.clone()
+ }
+
+ fn tt_is_empty(&mut self, stream: &Self::TokenStream) -> bool {
stream.is_empty()
}
- fn from_str(&mut self, src: &str) -> Self::TokenStream {
+ fn tt_from_str(&mut self, src: &str) -> Self::TokenStream {
Self::TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
Self::TokenStream::from_str(
&format!("compile_error!(\"failed to parse str to token stream: {e}\")"),
@@ -73,15 +79,15 @@ impl server::TokenStream for RaSpanServer<'_> {
.unwrap()
})
}
- fn to_string(&mut self, stream: &Self::TokenStream) -> String {
+ fn tt_to_string(&mut self, stream: &Self::TokenStream) -> String {
stream.to_string()
}
- fn from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
+ fn tt_from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
Self::TokenStream::new(vec![tree])
}
- fn expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
+ fn tt_expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
// FIXME: requires db, more importantly this requires name resolution so we would need to
// eagerly expand this proc-macro, but we can't know that this proc-macro is eager until we
// expand it ...
@@ -90,7 +96,7 @@ impl server::TokenStream for RaSpanServer<'_> {
Ok(self_.clone())
}
- fn concat_trees(
+ fn tt_concat_trees(
&mut self,
base: Option<Self::TokenStream>,
trees: Vec<TokenTree<Self::Span>>,
@@ -106,7 +112,7 @@ impl server::TokenStream for RaSpanServer<'_> {
}
}
- fn concat_streams(
+ fn tt_concat_streams(
&mut self,
base: Option<Self::TokenStream>,
streams: Vec<Self::TokenStream>,
@@ -118,28 +124,26 @@ impl server::TokenStream for RaSpanServer<'_> {
stream
}
- fn into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
+ fn tt_into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
(*stream.0).clone()
}
-}
-impl server::Span for RaSpanServer<'_> {
- fn debug(&mut self, span: Self::Span) -> String {
+ fn span_debug(&mut self, span: Self::Span) -> String {
format!("{:?}", span)
}
- fn file(&mut self, span: Self::Span) -> String {
+ fn span_file(&mut self, span: Self::Span) -> String {
self.callback.as_mut().map(|cb| cb.file(span.anchor.file_id.file_id())).unwrap_or_default()
}
- fn local_file(&mut self, span: Self::Span) -> Option<String> {
+ fn span_local_file(&mut self, span: Self::Span) -> Option<String> {
self.callback.as_mut().and_then(|cb| cb.local_file(span.anchor.file_id.file_id()))
}
- fn save_span(&mut self, _span: Self::Span) -> usize {
+ fn span_save_span(&mut self, _span: Self::Span) -> usize {
// FIXME, quote is incompatible with third-party tools
// This is called by the quote proc-macro which is expanded when the proc-macro is compiled
// As such, r-a will never observe this
0
}
- fn recover_proc_macro_span(&mut self, _id: usize) -> Self::Span {
+ fn span_recover_proc_macro_span(&mut self, _id: usize) -> Self::Span {
// FIXME, quote is incompatible with third-party tools
// This is called by the expansion of quote!, r-a will observe this, but we don't have
// access to the spans that were encoded
@@ -149,23 +153,23 @@ impl server::Span for RaSpanServer<'_> {
///
/// See PR:
/// https://github.com/rust-lang/rust/pull/55780
- fn source_text(&mut self, span: Self::Span) -> Option<String> {
+ fn span_source_text(&mut self, span: Self::Span) -> Option<String> {
self.callback.as_mut()?.source_text(span)
}
- fn parent(&mut self, _span: Self::Span) -> Option<Self::Span> {
+ fn span_parent(&mut self, _span: Self::Span) -> Option<Self::Span> {
// FIXME requires db, looks up the parent call site
None
}
- fn source(&mut self, span: Self::Span) -> Self::Span {
+ fn span_source(&mut self, span: Self::Span) -> Self::Span {
// FIXME requires db, returns the top level call site
span
}
- fn byte_range(&mut self, span: Self::Span) -> Range<usize> {
+ fn span_byte_range(&mut self, span: Self::Span) -> Range<usize> {
// FIXME requires db to resolve the ast id, THIS IS NOT INCREMENTAL
Range { start: span.range.start().into(), end: span.range.end().into() }
}
- fn join(&mut self, first: Self::Span, second: Self::Span) -> Option<Self::Span> {
+ fn span_join(&mut self, first: Self::Span, second: Self::Span) -> Option<Self::Span> {
// We can't modify the span range for fixup spans, those are meaningful to fixup, so just
// prefer the non-fixup span.
if first.anchor.ast_id == FIXUP_ERASED_FILE_AST_ID_MARKER {
@@ -193,7 +197,7 @@ impl server::Span for RaSpanServer<'_> {
ctx: second.ctx,
})
}
- fn subspan(
+ fn span_subspan(
&mut self,
span: Self::Span,
start: Bound<usize>,
@@ -237,11 +241,11 @@ impl server::Span for RaSpanServer<'_> {
})
}
- fn resolved_at(&mut self, span: Self::Span, at: Self::Span) -> Self::Span {
+ fn span_resolved_at(&mut self, span: Self::Span, at: Self::Span) -> Self::Span {
Span { ctx: at.ctx, ..span }
}
- fn end(&mut self, span: Self::Span) -> Self::Span {
+ fn span_end(&mut self, span: Self::Span) -> Self::Span {
// We can't modify the span range for fixup spans, those are meaningful to fixup.
if span.anchor.ast_id == FIXUP_ERASED_FILE_AST_ID_MARKER {
return span;
@@ -249,7 +253,7 @@ impl server::Span for RaSpanServer<'_> {
Span { range: TextRange::empty(span.range.end()), ..span }
}
- fn start(&mut self, span: Self::Span) -> Self::Span {
+ fn span_start(&mut self, span: Self::Span) -> Self::Span {
// We can't modify the span range for fixup spans, those are meaningful to fixup.
if span.anchor.ast_id == FIXUP_ERASED_FILE_AST_ID_MARKER {
return span;
@@ -257,24 +261,28 @@ impl server::Span for RaSpanServer<'_> {
Span { range: TextRange::empty(span.range.start()), ..span }
}
- fn line(&mut self, _span: Self::Span) -> usize {
+ fn span_line(&mut self, _span: Self::Span) -> usize {
// FIXME requires db to resolve line index, THIS IS NOT INCREMENTAL
1
}
- fn column(&mut self, _span: Self::Span) -> usize {
+ fn span_column(&mut self, _span: Self::Span) -> usize {
// FIXME requires db to resolve line index, THIS IS NOT INCREMENTAL
1
}
-}
-impl server::Symbol for RaSpanServer<'_> {
- fn normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> {
+ fn symbol_normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> {
// FIXME: nfc-normalize and validate idents
Ok(<Self as server::Server>::intern_symbol(string))
}
}
+impl server::TokenStream for RaSpanServer<'_> {}
+
+impl server::Span for RaSpanServer<'_> {}
+
+impl server::Symbol for RaSpanServer<'_> {}
+
impl server::Server for RaSpanServer<'_> {
fn globals(&mut self) -> ExpnGlobals<Self::Span> {
ExpnGlobals {
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 8b1e3c0d8d..804f6ce614 100644
--- a/crates/proc-macro-srv/src/server_impl/token_id.rs
+++ b/crates/proc-macro-srv/src/server_impl/token_id.rs
@@ -61,13 +61,19 @@ impl server::FreeFunctions for SpanIdServer<'_> {
}
fn emit_diagnostic(&mut self, _: Diagnostic<Self::Span>) {}
-}
-impl server::TokenStream for SpanIdServer<'_> {
- fn is_empty(&mut self, stream: &Self::TokenStream) -> bool {
+ fn tt_drop(&mut self, stream: Self::TokenStream) {
+ drop(stream);
+ }
+
+ fn tt_clone(&mut self, stream: &Self::TokenStream) -> Self::TokenStream {
+ stream.clone()
+ }
+
+ fn tt_is_empty(&mut self, stream: &Self::TokenStream) -> bool {
stream.is_empty()
}
- fn from_str(&mut self, src: &str) -> Self::TokenStream {
+ fn tt_from_str(&mut self, src: &str) -> Self::TokenStream {
Self::TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
Self::TokenStream::from_str(
&format!("compile_error!(\"failed to parse str to token stream: {e}\")"),
@@ -76,18 +82,18 @@ impl server::TokenStream for SpanIdServer<'_> {
.unwrap()
})
}
- fn to_string(&mut self, stream: &Self::TokenStream) -> String {
+ fn tt_to_string(&mut self, stream: &Self::TokenStream) -> String {
stream.to_string()
}
- fn from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
+ fn tt_from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
Self::TokenStream::new(vec![tree])
}
- fn expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
+ fn tt_expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
Ok(self_.clone())
}
- fn concat_trees(
+ fn tt_concat_trees(
&mut self,
base: Option<Self::TokenStream>,
trees: Vec<TokenTree<Self::Span>>,
@@ -103,7 +109,7 @@ impl server::TokenStream for SpanIdServer<'_> {
}
}
- fn concat_streams(
+ fn tt_concat_streams(
&mut self,
base: Option<Self::TokenStream>,
streams: Vec<Self::TokenStream>,
@@ -115,49 +121,47 @@ impl server::TokenStream for SpanIdServer<'_> {
stream
}
- fn into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
+ fn tt_into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
(*stream.0).clone()
}
-}
-impl server::Span for SpanIdServer<'_> {
- fn debug(&mut self, span: Self::Span) -> String {
+ fn span_debug(&mut self, span: Self::Span) -> String {
format!("{:?}", span.0)
}
- fn file(&mut self, _span: Self::Span) -> String {
+ fn span_file(&mut self, _span: Self::Span) -> String {
String::new()
}
- fn local_file(&mut self, _span: Self::Span) -> Option<String> {
+ fn span_local_file(&mut self, _span: Self::Span) -> Option<String> {
None
}
- fn save_span(&mut self, _span: Self::Span) -> usize {
+ fn span_save_span(&mut self, _span: Self::Span) -> usize {
0
}
- fn recover_proc_macro_span(&mut self, _id: usize) -> Self::Span {
+ fn span_recover_proc_macro_span(&mut self, _id: usize) -> Self::Span {
self.call_site
}
/// Recent feature, not yet in the proc_macro
///
/// See PR:
/// https://github.com/rust-lang/rust/pull/55780
- fn source_text(&mut self, _span: Self::Span) -> Option<String> {
+ fn span_source_text(&mut self, _span: Self::Span) -> Option<String> {
None
}
- fn parent(&mut self, _span: Self::Span) -> Option<Self::Span> {
+ fn span_parent(&mut self, _span: Self::Span) -> Option<Self::Span> {
None
}
- fn source(&mut self, span: Self::Span) -> Self::Span {
+ fn span_source(&mut self, span: Self::Span) -> Self::Span {
span
}
- fn byte_range(&mut self, _span: Self::Span) -> Range<usize> {
+ fn span_byte_range(&mut self, _span: Self::Span) -> Range<usize> {
Range { start: 0, end: 0 }
}
- fn join(&mut self, first: Self::Span, _second: Self::Span) -> Option<Self::Span> {
+ fn span_join(&mut self, first: Self::Span, _second: Self::Span) -> Option<Self::Span> {
// Just return the first span again, because some macros will unwrap the result.
Some(first)
}
- fn subspan(
+ fn span_subspan(
&mut self,
span: Self::Span,
_start: Bound<usize>,
@@ -166,34 +170,38 @@ impl server::Span for SpanIdServer<'_> {
// Just return the span again, because some macros will unwrap the result.
Some(span)
}
- fn resolved_at(&mut self, _span: Self::Span, _at: Self::Span) -> Self::Span {
+ fn span_resolved_at(&mut self, _span: Self::Span, _at: Self::Span) -> Self::Span {
self.call_site
}
- fn end(&mut self, _self_: Self::Span) -> Self::Span {
+ fn span_end(&mut self, _self_: Self::Span) -> Self::Span {
self.call_site
}
- fn start(&mut self, _self_: Self::Span) -> Self::Span {
+ fn span_start(&mut self, _self_: Self::Span) -> Self::Span {
self.call_site
}
- fn line(&mut self, _span: Self::Span) -> usize {
+ fn span_line(&mut self, _span: Self::Span) -> usize {
1
}
- fn column(&mut self, _span: Self::Span) -> usize {
+ fn span_column(&mut self, _span: Self::Span) -> usize {
1
}
-}
-impl server::Symbol for SpanIdServer<'_> {
- fn normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> {
+ fn symbol_normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> {
// FIXME: nfc-normalize and validate idents
Ok(<Self as server::Server>::intern_symbol(string))
}
}
+impl server::TokenStream for SpanIdServer<'_> {}
+
+impl server::Span for SpanIdServer<'_> {}
+
+impl server::Symbol for SpanIdServer<'_> {}
+
impl server::Server for SpanIdServer<'_> {
fn globals(&mut self) -> ExpnGlobals<Self::Span> {
ExpnGlobals {