mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 14:13:58 +00:00
Clean up
This commit is contained in:
parent
ca957f4f82
commit
2e52aa1615
6 changed files with 41 additions and 6 deletions
|
@ -21,8 +21,8 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
msg::{
|
msg::{
|
||||||
flat::serialize_span_data_index_map, ExpandMacro, ExpnGlobals, FlatTree, PanicMessage,
|
deserialize_span_data_index_map, flat::serialize_span_data_index_map, ExpandMacro,
|
||||||
HAS_GLOBAL_SPANS, RUST_ANALYZER_SPAN_SUPPORT,
|
ExpnGlobals, FlatTree, PanicMessage, HAS_GLOBAL_SPANS, RUST_ANALYZER_SPAN_SUPPORT,
|
||||||
},
|
},
|
||||||
process::ProcMacroProcessSrv,
|
process::ProcMacroProcessSrv,
|
||||||
};
|
};
|
||||||
|
@ -186,6 +186,13 @@ impl ProcMacro {
|
||||||
msg::Response::ExpandMacro(it) => {
|
msg::Response::ExpandMacro(it) => {
|
||||||
Ok(it.map(|tree| FlatTree::to_subtree_resolved(tree, version, &span_data_table)))
|
Ok(it.map(|tree| FlatTree::to_subtree_resolved(tree, version, &span_data_table)))
|
||||||
}
|
}
|
||||||
|
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 }),
|
_ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,14 @@ pub const CURRENT_API_VERSION: u32 = RUST_ANALYZER_SPAN_SUPPORT;
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum Request {
|
pub enum Request {
|
||||||
|
/// Since [`NO_VERSION_CHECK_VERSION`]
|
||||||
ListMacros { dylib_path: PathBuf },
|
ListMacros { dylib_path: PathBuf },
|
||||||
|
/// Since [`NO_VERSION_CHECK_VERSION`]
|
||||||
ExpandMacro(ExpandMacro),
|
ExpandMacro(ExpandMacro),
|
||||||
SetSpanMode(SpanMode),
|
/// Since [`VERSION_CHECK_VERSION`]
|
||||||
ApiVersionCheck {},
|
ApiVersionCheck {},
|
||||||
|
/// Since [`RUST_ANALYZER_SPAN_SUPPORT`]
|
||||||
|
SetSpanMode(SpanMode),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Default, Debug, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Default, Debug, Serialize, Deserialize)]
|
||||||
|
@ -41,11 +45,22 @@ pub enum SpanMode {
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum Response {
|
pub enum Response {
|
||||||
|
/// Since [`NO_VERSION_CHECK_VERSION`]
|
||||||
ListMacros(Result<Vec<(String, ProcMacroKind)>, String>),
|
ListMacros(Result<Vec<(String, ProcMacroKind)>, String>),
|
||||||
|
/// Since [`NO_VERSION_CHECK_VERSION`]
|
||||||
ExpandMacro(Result<FlatTree, PanicMessage>),
|
ExpandMacro(Result<FlatTree, PanicMessage>),
|
||||||
ExpandMacroSpans(Result<(FlatTree, Vec<u32>), PanicMessage>),
|
/// Since [`NO_VERSION_CHECK_VERSION`]
|
||||||
ApiVersionCheck(u32),
|
ApiVersionCheck(u32),
|
||||||
|
/// Since [`RUST_ANALYZER_SPAN_SUPPORT`]
|
||||||
SetSpanMode(SpanMode),
|
SetSpanMode(SpanMode),
|
||||||
|
/// Since [`RUST_ANALYZER_SPAN_SUPPORT`]
|
||||||
|
ExpandMacroExtended(Result<ExpandMacroExtended, PanicMessage>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct ExpandMacroExtended {
|
||||||
|
pub tree: FlatTree,
|
||||||
|
pub span_data_table: Vec<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
|
|
@ -41,7 +41,12 @@ fn run() -> io::Result<()> {
|
||||||
}
|
}
|
||||||
msg::Request::ExpandMacro(task) => match srv.span_mode() {
|
msg::Request::ExpandMacro(task) => match srv.span_mode() {
|
||||||
msg::SpanMode::Id => msg::Response::ExpandMacro(srv.expand(task).map(|(it, _)| it)),
|
msg::SpanMode::Id => msg::Response::ExpandMacro(srv.expand(task).map(|(it, _)| it)),
|
||||||
msg::SpanMode::RustAnalyzer => msg::Response::ExpandMacroSpans(srv.expand(task)),
|
msg::SpanMode::RustAnalyzer => msg::Response::ExpandMacroExtended(
|
||||||
|
srv.expand(task).map(|(tree, span_data_table)| msg::ExpandMacroExtended {
|
||||||
|
tree,
|
||||||
|
span_data_table,
|
||||||
|
}),
|
||||||
|
),
|
||||||
},
|
},
|
||||||
msg::Request::ApiVersionCheck {} => {
|
msg::Request::ApiVersionCheck {} => {
|
||||||
msg::Response::ApiVersionCheck(proc_macro_api::msg::CURRENT_API_VERSION)
|
msg::Response::ApiVersionCheck(proc_macro_api::msg::CURRENT_API_VERSION)
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//! proc-macro server backend based on rust-analyzer's internal span represention
|
||||||
|
//! This backend is used solely by rust-analyzer as it ties into rust-analyzer internals.
|
||||||
|
//!
|
||||||
|
//! It is an unfortunate result of how the proc-macro API works that we need to look into the
|
||||||
|
//! concrete representation of the spans, and as such, RustRover cannot make use of this unless they
|
||||||
|
//! change their representation to be compatible with rust-analyzer's.
|
||||||
use std::{
|
use std::{
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
iter,
|
iter,
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
//! proc-macro server backend based on [`proc_macro_api::msg::TokenId`] as the backing span.
|
||||||
|
//! This backend is rather inflexible, used by RustRover and older rust-analyzer versions.
|
||||||
use std::{
|
use std::{
|
||||||
iter,
|
iter,
|
||||||
ops::{Bound, Range},
|
ops::{Bound, Range},
|
||||||
|
|
|
@ -832,7 +832,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(feature = "sysroot-abi")]
|
#[cfg(any(feature = "sysroot-abi", rust_analyzer))]
|
||||||
fn resolve_proc_macro() {
|
fn resolve_proc_macro() {
|
||||||
use expect_test::expect;
|
use expect_test::expect;
|
||||||
if skip_slow_tests() {
|
if skip_slow_tests() {
|
||||||
|
|
Loading…
Reference in a new issue