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.rs49
1 files changed, 25 insertions, 24 deletions
diff --git a/crates/proc-macro-api/src/lib.rs b/crates/proc-macro-api/src/lib.rs
index e54d501b94..62e66684c7 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)?;
@@ -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,