about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-06-30 17:03:03 +0200
committerLukas Wirth <lukastw97@gmail.com>2024-06-30 17:03:03 +0200
commitfefcb46c3f48f53b09da7f9feafd4645dabcbd32 (patch)
tree96a7020391bc2a795c7a6236190bed5f3e7a2cd2 /src
parent45362de42f5143874671c3db82933eea1785d2c2 (diff)
downloadrust-fefcb46c3f48f53b09da7f9feafd4645dabcbd32.tar.gz
rust-fefcb46c3f48f53b09da7f9feafd4645dabcbd32.zip
Arc proc-macro expander paths
Diffstat (limited to 'src')
-rw-r--r--src/tools/rust-analyzer/crates/proc-macro-api/src/json.rs1
-rw-r--r--src/tools/rust-analyzer/crates/proc-macro-api/src/lib.rs7
2 files changed, 5 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/json.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/json.rs
index 415845c0bdc..ec89f6a9e65 100644
--- a/src/tools/rust-analyzer/crates/proc-macro-api/src/json.rs
+++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/json.rs
@@ -1,3 +1,4 @@
+//! Protocol functions for json.
 use std::io::{self, BufRead, Write};
 
 pub fn read_json<'a>(
diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/lib.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/lib.rs
index d7f49013aee..4c65dd5969c 100644
--- a/src/tools/rust-analyzer/crates/proc-macro-api/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/lib.rs
@@ -65,7 +65,7 @@ impl MacroDylib {
 #[derive(Debug, Clone)]
 pub struct ProcMacro {
     process: Arc<ProcMacroProcessSrv>,
-    dylib_path: AbsPathBuf,
+    dylib_path: Arc<AbsPathBuf>,
     name: SmolStr,
     kind: ProcMacroKind,
 }
@@ -75,7 +75,7 @@ impl PartialEq for ProcMacro {
     fn eq(&self, other: &Self) -> bool {
         self.name == other.name
             && self.kind == other.kind
-            && self.dylib_path == other.dylib_path
+            && Arc::ptr_eq(&self.dylib_path, &other.dylib_path)
             && Arc::ptr_eq(&self.process, &other.process)
     }
 }
@@ -116,6 +116,7 @@ impl ProcMacroServer {
         let _p = tracing::info_span!("ProcMacroServer::load_dylib").entered();
         let macros = self.process.find_proc_macros(&dylib.path)?;
 
+        let dylib_path = Arc::new(dylib.path);
         match macros {
             Ok(macros) => Ok(macros
                 .into_iter()
@@ -123,7 +124,7 @@ impl ProcMacroServer {
                     process: self.process.clone(),
                     name: name.into(),
                     kind,
-                    dylib_path: dylib.path.clone(),
+                    dylib_path: dylib_path.clone(),
                 })
                 .collect()),
             Err(message) => Err(ServerError { message, io: None }),