Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs')
-rw-r--r--crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs24
1 files changed, 12 insertions, 12 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 c114d52ec3..6b6bfcc934 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
@@ -62,8 +62,9 @@ impl server::Server for RaSpanServer<'_> {
self.tracked_paths.insert(path.into());
}
- fn literal_from_str(&mut self, s: &str) -> Result<Literal<Self::Span>, ()> {
+ fn literal_from_str(&mut self, s: &str) -> Result<Literal<Self::Span>, String> {
literal_from_str(s, self.call_site)
+ .map_err(|()| "cannot parse string into literal".to_string())
}
fn emit_diagnostic(&mut self, _: Diagnostic<Self::Span>) {
@@ -81,14 +82,9 @@ impl server::Server for RaSpanServer<'_> {
fn ts_is_empty(&mut self, stream: &Self::TokenStream) -> bool {
stream.is_empty()
}
- fn ts_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}\")"),
- self.call_site,
- )
- .unwrap()
- })
+ fn ts_from_str(&mut self, src: &str) -> Result<Self::TokenStream, String> {
+ Self::TokenStream::from_str(src, self.call_site)
+ .map_err(|e| format!("failed to parse str to token stream: {e}"))
}
fn ts_to_string(&mut self, stream: &Self::TokenStream) -> String {
stream.to_string()
@@ -168,12 +164,16 @@ impl server::Server for RaSpanServer<'_> {
self.callback.as_mut()?.source_text(span)
}
- fn span_parent(&mut self, _span: Self::Span) -> Option<Self::Span> {
- // FIXME requires db, looks up the parent call site
+ fn span_parent(&mut self, span: Self::Span) -> Option<Self::Span> {
+ if let Some(ref mut callback) = self.callback {
+ return callback.span_parent(span);
+ }
None
}
fn span_source(&mut self, span: Self::Span) -> Self::Span {
- // FIXME requires db, returns the top level call site
+ if let Some(ref mut callback) = self.callback {
+ return callback.span_source(span);
+ }
span
}
fn span_byte_range(&mut self, span: Self::Span) -> Range<usize> {