Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/proc-macro-srv/src/lib.rs3
-rw-r--r--crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs5
-rw-r--r--crates/proc-macro-srv/src/tests/utils.rs5
3 files changed, 12 insertions, 1 deletions
diff --git a/crates/proc-macro-srv/src/lib.rs b/crates/proc-macro-srv/src/lib.rs
index c1ef49a717..ac9f89352c 100644
--- a/crates/proc-macro-srv/src/lib.rs
+++ b/crates/proc-macro-srv/src/lib.rs
@@ -41,6 +41,7 @@ use std::{
env,
ffi::OsString,
fs,
+ ops::Range,
path::{Path, PathBuf},
sync::{Arc, Mutex, PoisonError},
thread,
@@ -100,6 +101,8 @@ pub trait ProcMacroClientInterface {
fn local_file(&mut self, file_id: span::FileId) -> Option<String>;
/// Line and column are 1-based.
fn line_column(&mut self, span: Span) -> Option<(u32, u32)>;
+
+ fn byte_range(&mut self, span: Span) -> Range<usize>;
}
const EXPANDER_STACK_SIZE: usize = 8 * 1024 * 1024;
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 3a25391b57..9946608247 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
@@ -162,7 +162,10 @@ impl server::Span for RaSpanServer<'_> {
span
}
fn 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 join(&mut self, first: Self::Span, second: Self::Span) -> Option<Self::Span> {
diff --git a/crates/proc-macro-srv/src/tests/utils.rs b/crates/proc-macro-srv/src/tests/utils.rs
index 81ff1965d6..b7c5c4fdd2 100644
--- a/crates/proc-macro-srv/src/tests/utils.rs
+++ b/crates/proc-macro-srv/src/tests/utils.rs
@@ -4,6 +4,7 @@ use expect_test::Expect;
use span::{
EditionedFileId, FileId, ROOT_ERASED_FILE_AST_ID, Span, SpanAnchor, SyntaxContext, TextRange,
};
+use std::ops::Range;
use crate::{
EnvSnapshot, ProcMacroClientInterface, ProcMacroSrv, SpanId, dylib, proc_macro_test_dylib_path,
@@ -137,6 +138,10 @@ impl ProcMacroClientInterface for MockCallback<'_> {
// proc_macro uses 1-based line/column
Some((line_col.line as u32 + 1, line_col.col as u32 + 1))
}
+
+ fn byte_range(&mut self, span: Span) -> Range<usize> {
+ Range { start: span.range.start().into(), end: span.range.end().into() }
+ }
}
pub fn assert_expand_with_callback(