Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/lib.rs')
-rw-r--r--crates/proc-macro-api/src/lib.rs35
1 files changed, 24 insertions, 11 deletions
diff --git a/crates/proc-macro-api/src/lib.rs b/crates/proc-macro-api/src/lib.rs
index f697ecd351..a87becd63e 100644
--- a/crates/proc-macro-api/src/lib.rs
+++ b/crates/proc-macro-api/src/lib.rs
@@ -11,16 +11,19 @@ pub mod msg;
mod process;
mod version;
-use base_db::span::SpanData;
use indexmap::IndexSet;
use paths::AbsPathBuf;
+use span::Span;
use std::{fmt, io, sync::Mutex};
use triomphe::Arc;
use serde::{Deserialize, Serialize};
use crate::{
- msg::{ExpandMacro, ExpnGlobals, FlatTree, PanicMessage, HAS_GLOBAL_SPANS},
+ msg::{
+ deserialize_span_data_index_map, flat::serialize_span_data_index_map, ExpandMacro,
+ ExpnGlobals, FlatTree, PanicMessage, HAS_GLOBAL_SPANS, RUST_ANALYZER_SPAN_SUPPORT,
+ },
process::ProcMacroProcessSrv,
};
@@ -136,13 +139,13 @@ impl ProcMacro {
pub fn expand(
&self,
- subtree: &tt::Subtree<SpanData>,
- attr: Option<&tt::Subtree<SpanData>>,
+ subtree: &tt::Subtree<Span>,
+ attr: Option<&tt::Subtree<Span>>,
env: Vec<(String, String)>,
- def_site: SpanData,
- call_site: SpanData,
- mixed_site: SpanData,
- ) -> Result<Result<tt::Subtree<SpanData>, PanicMessage>, ServerError> {
+ def_site: Span,
+ call_site: Span,
+ mixed_site: Span,
+ ) -> Result<Result<tt::Subtree<Span>, PanicMessage>, ServerError> {
let version = self.process.lock().unwrap_or_else(|e| e.into_inner()).version();
let current_dir = env
.iter()
@@ -166,6 +169,11 @@ impl ProcMacro {
call_site,
mixed_site,
},
+ span_data_table: if version >= RUST_ANALYZER_SPAN_SUPPORT {
+ serialize_span_data_index_map(&span_data_table)
+ } else {
+ Vec::new()
+ },
};
let response = self
@@ -178,9 +186,14 @@ impl ProcMacro {
msg::Response::ExpandMacro(it) => {
Ok(it.map(|tree| FlatTree::to_subtree_resolved(tree, version, &span_data_table)))
}
- msg::Response::ListMacros(..) | msg::Response::ApiVersionCheck(..) => {
- Err(ServerError { message: "unexpected response".to_string(), io: None })
- }
+ msg::Response::ExpandMacroExtended(it) => Ok(it.map(|resp| {
+ FlatTree::to_subtree_resolved(
+ resp.tree,
+ version,
+ &deserialize_span_data_index_map(&resp.span_data_table),
+ )
+ })),
+ _ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
}
}
}