Unnamed repository; edit this file 'description' to name the repository.
add byte range to main loop and direct the request via callback and define the callback on client side
bit-aloo 3 months ago
parent 31b3fb5 · commit f8e5c66
-rw-r--r--crates/load-cargo/src/lib.rs10
-rw-r--r--crates/proc-macro-srv-cli/src/main_loop.rs19
2 files changed, 28 insertions, 1 deletions
diff --git a/crates/load-cargo/src/lib.rs b/crates/load-cargo/src/lib.rs
index 33468a5003..904f704221 100644
--- a/crates/load-cargo/src/lib.rs
+++ b/crates/load-cargo/src/lib.rs
@@ -591,6 +591,16 @@ impl ProcMacroExpander for Expander {
Ok(SubResponse::FilePathResult { name })
}
+ SubRequest::ByteRange { file_id, ast_id, start, end } => {
+ let range = resolve_sub_span(
+ db,
+ file_id,
+ ast_id,
+ TextRange::new(TextSize::from(start), TextSize::from(end)),
+ );
+
+ Ok(SubResponse::ByteRangeResult { range: range.range.into() })
+ }
};
match self.0.expand(
subtree.view(),
diff --git a/crates/proc-macro-srv-cli/src/main_loop.rs b/crates/proc-macro-srv-cli/src/main_loop.rs
index 0c651d22b4..e35f832716 100644
--- a/crates/proc-macro-srv-cli/src/main_loop.rs
+++ b/crates/proc-macro-srv-cli/src/main_loop.rs
@@ -6,7 +6,7 @@ use proc_macro_api::{
transport::codec::{json::JsonProtocol, postcard::PostcardProtocol},
version::CURRENT_API_VERSION,
};
-use std::io::{self, BufRead, Write};
+use std::{io, ops::Range};
use legacy::Message;
@@ -240,6 +240,23 @@ impl<C: Codec> proc_macro_srv::ProcMacroClientInterface for ProcMacroClientHandl
_ => None,
}
}
+
+ fn byte_range(
+ &mut self,
+ proc_macro_srv::span::Span { range, anchor, ctx: _ }: proc_macro_srv::span::Span,
+ ) -> Range<usize> {
+ match self.roundtrip(bidirectional::SubRequest::ByteRange {
+ file_id: anchor.file_id.as_u32(),
+ ast_id: anchor.ast_id.into_raw(),
+ start: range.start().into(),
+ end: range.end().into(),
+ }) {
+ Some(bidirectional::BidirectionalMessage::SubResponse(
+ bidirectional::SubResponse::ByteRangeResult { range },
+ )) => range,
+ _ => Range { start: range.start().into(), end: range.end().into() },
+ }
+ }
}
fn handle_expand_ra<C: Codec>(