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.rs55
1 files changed, 28 insertions, 27 deletions
diff --git a/crates/proc-macro-api/src/lib.rs b/crates/proc-macro-api/src/lib.rs
index e54d501b94..dc3328ebcd 100644
--- a/crates/proc-macro-api/src/lib.rs
+++ b/crates/proc-macro-api/src/lib.rs
@@ -5,26 +5,26 @@
//! is used to provide basic infrastructure for communication between two
//! processes: Client (RA itself), Server (the external program)
-pub mod json;
-pub mod msg;
+pub mod legacy_protocol {
+ pub mod json;
+ pub mod msg;
+}
mod process;
use paths::{AbsPath, AbsPathBuf};
use span::Span;
use std::{fmt, io, sync::Arc};
-use serde::{Deserialize, Serialize};
-
use crate::{
- msg::{
+ legacy_protocol::msg::{
deserialize_span_data_index_map, flat::serialize_span_data_index_map, ExpandMacro,
- ExpnGlobals, FlatTree, PanicMessage, SpanDataIndexMap, HAS_GLOBAL_SPANS,
- RUST_ANALYZER_SPAN_SUPPORT,
+ ExpandMacroData, ExpnGlobals, FlatTree, PanicMessage, Request, Response, SpanDataIndexMap,
+ HAS_GLOBAL_SPANS, RUST_ANALYZER_SPAN_SUPPORT,
},
- process::ProcMacroProcessSrv,
+ process::ProcMacroServerProcess,
};
-#[derive(Copy, Clone, Eq, PartialEq, Debug, Serialize, Deserialize)]
+#[derive(Copy, Clone, Eq, PartialEq, Debug, serde_derive::Serialize, serde_derive::Deserialize)]
pub enum ProcMacroKind {
CustomDerive,
Attr,
@@ -37,12 +37,12 @@ pub enum ProcMacroKind {
/// A handle to an external process which load dylibs with macros (.so or .dll)
/// and runs actual macro expansion functions.
#[derive(Debug)]
-pub struct ProcMacroServer {
+pub struct ProcMacroClient {
/// Currently, the proc macro process expands all procedural macros sequentially.
///
/// That means that concurrent salsa requests may block each other when expanding proc macros,
/// which is unfortunate, but simple and good enough for the time being.
- process: Arc<ProcMacroProcessSrv>,
+ process: Arc<ProcMacroServerProcess>,
path: AbsPathBuf,
}
@@ -56,13 +56,13 @@ impl MacroDylib {
}
}
-/// A handle to a specific macro (a `#[proc_macro]` annotated function).
+/// A handle to a specific proc-macro (a `#[proc_macro]` annotated function).
///
-/// It exists within a context of a specific [`ProcMacroProcess`] -- currently
-/// we share a single expander process for all macros.
+/// It exists within the context of a specific proc-macro server -- currently
+/// we share a single expander process for all macros within a workspace.
#[derive(Debug, Clone)]
pub struct ProcMacro {
- process: Arc<ProcMacroProcessSrv>,
+ process: Arc<ProcMacroServerProcess>,
dylib_path: Arc<AbsPathBuf>,
name: Box<str>,
kind: ProcMacroKind,
@@ -95,21 +95,22 @@ impl fmt::Display for ServerError {
}
}
-impl ProcMacroServer {
+impl ProcMacroClient {
/// Spawns an external process as the proc macro server and returns a client connected to it.
pub fn spawn(
process_path: &AbsPath,
env: impl IntoIterator<Item = (impl AsRef<std::ffi::OsStr>, impl AsRef<std::ffi::OsStr>)>
+ Clone,
- ) -> io::Result<ProcMacroServer> {
- let process = ProcMacroProcessSrv::run(process_path, env)?;
- Ok(ProcMacroServer { process: Arc::new(process), path: process_path.to_owned() })
+ ) -> io::Result<ProcMacroClient> {
+ let process = ProcMacroServerProcess::run(process_path, env)?;
+ Ok(ProcMacroClient { process: Arc::new(process), path: process_path.to_owned() })
}
- pub fn path(&self) -> &AbsPath {
+ pub fn server_path(&self) -> &AbsPath {
&self.path
}
+ /// Loads a proc-macro dylib into the server process returning a list of `ProcMacro`s loaded.
pub fn load_dylib(&self, dylib: MacroDylib) -> Result<Vec<ProcMacro>, ServerError> {
let _p = tracing::info_span!("ProcMacroServer::load_dylib").entered();
let macros = self.process.find_proc_macros(&dylib.path)?;
@@ -145,14 +146,14 @@ impl ProcMacro {
pub fn expand(
&self,
- subtree: &tt::Subtree<Span>,
- attr: Option<&tt::Subtree<Span>>,
+ subtree: tt::SubtreeView<'_, Span>,
+ attr: Option<tt::SubtreeView<'_, Span>>,
env: Vec<(String, String)>,
def_site: Span,
call_site: Span,
mixed_site: Span,
current_dir: Option<String>,
- ) -> Result<Result<tt::Subtree<Span>, PanicMessage>, ServerError> {
+ ) -> Result<Result<tt::TopSubtree<Span>, PanicMessage>, ServerError> {
let version = self.process.version();
let mut span_data_table = SpanDataIndexMap::default();
@@ -160,7 +161,7 @@ impl ProcMacro {
let call_site = span_data_table.insert_full(call_site).0;
let mixed_site = span_data_table.insert_full(mixed_site).0;
let task = ExpandMacro {
- data: msg::ExpandMacroData {
+ data: ExpandMacroData {
macro_body: FlatTree::new(subtree, version, &mut span_data_table),
macro_name: self.name.to_string(),
attributes: attr
@@ -182,13 +183,13 @@ impl ProcMacro {
current_dir,
};
- let response = self.process.send_task(msg::Request::ExpandMacro(Box::new(task)))?;
+ let response = self.process.send_task(Request::ExpandMacro(Box::new(task)))?;
match response {
- msg::Response::ExpandMacro(it) => {
+ Response::ExpandMacro(it) => {
Ok(it.map(|tree| FlatTree::to_subtree_resolved(tree, version, &span_data_table)))
}
- msg::Response::ExpandMacroExtended(it) => Ok(it.map(|resp| {
+ Response::ExpandMacroExtended(it) => Ok(it.map(|resp| {
FlatTree::to_subtree_resolved(
resp.tree,
version,