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.rs18
1 files changed, 8 insertions, 10 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 ec30630c10..c114d52ec3 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
@@ -30,13 +30,11 @@ pub struct RaSpanServer<'a> {
pub callback: Option<ProcMacroClientHandle<'a>>,
}
-impl server::Types for RaSpanServer<'_> {
+impl server::Server for RaSpanServer<'_> {
type TokenStream = crate::token_stream::TokenStream<Span>;
type Span = Span;
type Symbol = Symbol;
-}
-impl server::Server for RaSpanServer<'_> {
fn globals(&mut self) -> ExpnGlobals<Self::Span> {
ExpnGlobals {
def_site: self.def_site,
@@ -179,7 +177,9 @@ impl server::Server for RaSpanServer<'_> {
span
}
fn span_byte_range(&mut self, span: Self::Span) -> Range<usize> {
- // FIXME requires db to resolve the ast id, THIS IS NOT INCREMENTAL
+ if let Some(cb) = self.callback.as_mut() {
+ return cb.byte_range(span);
+ }
Range { start: span.range.start().into(), end: span.range.end().into() }
}
fn span_join(&mut self, first: Self::Span, second: Self::Span) -> Option<Self::Span> {
@@ -274,14 +274,12 @@ impl server::Server for RaSpanServer<'_> {
Span { range: TextRange::empty(span.range.start()), ..span }
}
- fn span_line(&mut self, _span: Self::Span) -> usize {
- // FIXME requires db to resolve line index, THIS IS NOT INCREMENTAL
- 1
+ fn span_line(&mut self, span: Self::Span) -> usize {
+ self.callback.as_mut().and_then(|cb| cb.line_column(span)).map_or(1, |(l, _)| l as usize)
}
- fn span_column(&mut self, _span: Self::Span) -> usize {
- // FIXME requires db to resolve line index, THIS IS NOT INCREMENTAL
- 1
+ fn span_column(&mut self, span: Self::Span) -> usize {
+ self.callback.as_mut().and_then(|cb| cb.line_column(span)).map_or(1, |(_, c)| c as usize)
}
fn symbol_normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> {