Skip to content

Commit e535791

Browse files
bors[bot]matklad
andauthored
Merge #9983
9983: internal: remove unreasonable crate dependency r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 2943d9a + e863886 commit e535791

File tree

6 files changed

+71
-38
lines changed

6 files changed

+71
-38
lines changed

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/proc_macro_api/Cargo.toml

+7-8
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,16 @@ log = "0.4.8"
1515
crossbeam-channel = "0.5.0"
1616
jod-thread = "0.1.1"
1717
memmap2 = "0.3.0"
18-
object = { version = "0.26", default-features = false, features = [
19-
"std",
20-
"read_core",
21-
"elf",
22-
"macho",
23-
"pe",
24-
] }
2518
snap = "1.0"
2619

2720
paths = { path = "../paths", version = "0.0.0" }
2821
tt = { path = "../tt", version = "0.0.0" }
29-
base_db = { path = "../base_db", version = "0.0.0" }
3022
stdx = { path = "../stdx", version = "0.0.0" }
3123
profile = { path = "../profile", version = "0.0.0" }
24+
# Intentionally *not* depend on anything salsa-related
25+
# base_db = { path = "../base_db", version = "0.0.0" }
26+
27+
[dependencies.object]
28+
version = "0.26"
29+
default-features = false
30+
features = [ "std", "read_core", "elf", "macho", "pe" ]

crates/proc_macro_api/src/lib.rs

+21-21
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ mod process;
1010
mod rpc;
1111
mod version;
1212

13-
use base_db::{Env, ProcMacro};
1413
use paths::{AbsPath, AbsPathBuf};
1514
use std::{
1615
ffi::OsStr,
@@ -26,34 +25,44 @@ pub use rpc::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask,
2625
pub use version::{read_dylib_info, RustCInfo};
2726

2827
#[derive(Debug, Clone)]
29-
struct ProcMacroProcessExpander {
28+
pub struct ProcMacroProcessExpander {
3029
process: Arc<Mutex<ProcMacroProcessSrv>>,
3130
dylib_path: AbsPathBuf,
3231
name: SmolStr,
32+
kind: ProcMacroKind,
3333
}
3434

3535
impl Eq for ProcMacroProcessExpander {}
3636
impl PartialEq for ProcMacroProcessExpander {
3737
fn eq(&self, other: &Self) -> bool {
3838
self.name == other.name
39+
&& self.kind == other.kind
3940
&& self.dylib_path == other.dylib_path
4041
&& Arc::ptr_eq(&self.process, &other.process)
4142
}
4243
}
4344

44-
impl base_db::ProcMacroExpander for ProcMacroProcessExpander {
45-
fn expand(
45+
impl ProcMacroProcessExpander {
46+
pub fn name(&self) -> &str {
47+
&self.name
48+
}
49+
50+
pub fn kind(&self) -> ProcMacroKind {
51+
self.kind
52+
}
53+
54+
pub fn expand(
4655
&self,
4756
subtree: &Subtree,
4857
attr: Option<&Subtree>,
49-
env: &Env,
58+
env: Vec<(String, String)>,
5059
) -> Result<Subtree, tt::ExpansionError> {
5160
let task = ExpansionTask {
5261
macro_body: subtree.clone(),
5362
macro_name: self.name.to_string(),
5463
attributes: attr.cloned(),
5564
lib: self.dylib_path.to_path_buf(),
56-
env: env.iter().map(|(k, v)| (k.to_string(), v.to_string())).collect(),
65+
env,
5766
};
5867

5968
let result: ExpansionResult = self
@@ -86,7 +95,7 @@ impl ProcMacroClient {
8695
Ok(ProcMacroClient { process: Arc::new(Mutex::new(process)) })
8796
}
8897

89-
pub fn by_dylib_path(&self, dylib_path: &AbsPath) -> Vec<ProcMacro> {
98+
pub fn by_dylib_path(&self, dylib_path: &AbsPath) -> Vec<ProcMacroProcessExpander> {
9099
let _p = profile::span("ProcMacroClient::by_dylib_path");
91100
match version::read_dylib_info(dylib_path) {
92101
Ok(info) => {
@@ -118,20 +127,11 @@ impl ProcMacroClient {
118127

119128
macros
120129
.into_iter()
121-
.map(|(name, kind)| {
122-
let name = SmolStr::new(&name);
123-
let kind = match kind {
124-
ProcMacroKind::CustomDerive => base_db::ProcMacroKind::CustomDerive,
125-
ProcMacroKind::FuncLike => base_db::ProcMacroKind::FuncLike,
126-
ProcMacroKind::Attr => base_db::ProcMacroKind::Attr,
127-
};
128-
let expander = Arc::new(ProcMacroProcessExpander {
129-
process: self.process.clone(),
130-
name: name.clone(),
131-
dylib_path: dylib_path.to_path_buf(),
132-
});
133-
134-
ProcMacro { name, kind, expander }
130+
.map(|(name, kind)| ProcMacroProcessExpander {
131+
process: self.process.clone(),
132+
name: name.into(),
133+
kind,
134+
dylib_path: dylib_path.to_path_buf(),
135135
})
136136
.collect()
137137
}

crates/rust-analyzer/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ vfs = { path = "../vfs", version = "0.0.0" }
5252
vfs-notify = { path = "../vfs-notify", version = "0.0.0" }
5353
cfg = { path = "../cfg", version = "0.0.0" }
5454
toolchain = { path = "../toolchain", version = "0.0.0" }
55+
tt = { path = "../tt", version = "0.0.0" }
5556
proc_macro_api = { path = "../proc_macro_api", version = "0.0.0" }
5657

5758
# This should only be used in CLI

crates/rust-analyzer/src/cli/load_cargo.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use proc_macro_api::ProcMacroClient;
1111
use project_model::{CargoConfig, ProjectManifest, ProjectWorkspace, WorkspaceBuildScripts};
1212
use vfs::{loader::Handle, AbsPath, AbsPathBuf};
1313

14-
use crate::reload::{ProjectFolders, SourceRootConfig};
14+
use crate::reload::{load_proc_macro, ProjectFolders, SourceRootConfig};
1515

1616
// Note: Since this type is used by external tools that use rust-analyzer as a library
1717
// what otherwise would be `pub(crate)` has to be `pub` here instead.
@@ -69,9 +69,7 @@ pub fn load_workspace(
6969
});
7070

7171
let crate_graph = ws.to_crate_graph(
72-
&mut |path: &AbsPath| {
73-
proc_macro_client.as_ref().map(|it| it.by_dylib_path(path)).unwrap_or_default()
74-
},
72+
&mut |path: &AbsPath| load_proc_macro(proc_macro_client.as_ref(), path),
7573
&mut |path: &AbsPath| {
7674
let contents = loader.load_sync(path);
7775
let path = vfs::VfsPath::from(path.to_path_buf());

crates/rust-analyzer/src/reload.rs

+40-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use std::{mem, sync::Arc};
44
use flycheck::{FlycheckConfig, FlycheckHandle};
55
use hir::db::DefDatabase;
66
use ide::Change;
7-
use ide_db::base_db::{CrateGraph, SourceRoot, VfsPath};
7+
use ide_db::base_db::{
8+
CrateGraph, Env, ProcMacro, ProcMacroExpander, ProcMacroKind, SourceRoot, VfsPath,
9+
};
810
use proc_macro_api::ProcMacroClient;
911
use project_model::{ProjectWorkspace, WorkspaceBuildScripts};
1012
use vfs::{file_set::FileSetConfig, AbsPath, AbsPathBuf, ChangeKind};
@@ -398,9 +400,8 @@ impl GlobalState {
398400
// Create crate graph from all the workspaces
399401
let crate_graph = {
400402
let proc_macro_client = self.proc_macro_client.as_ref();
401-
let mut load_proc_macro = move |path: &AbsPath| {
402-
proc_macro_client.map(|it| it.by_dylib_path(path)).unwrap_or_default()
403-
};
403+
let mut load_proc_macro =
404+
move |path: &AbsPath| load_proc_macro(proc_macro_client, path);
404405

405406
let vfs = &mut self.vfs.write().0;
406407
let loader = &mut self.loader;
@@ -587,3 +588,38 @@ impl SourceRootConfig {
587588
.collect()
588589
}
589590
}
591+
592+
pub(crate) fn load_proc_macro(client: Option<&ProcMacroClient>, path: &AbsPath) -> Vec<ProcMacro> {
593+
return client
594+
.map(|it| it.by_dylib_path(path))
595+
.unwrap_or_default()
596+
.into_iter()
597+
.map(expander_to_proc_macro)
598+
.collect();
599+
600+
fn expander_to_proc_macro(expander: proc_macro_api::ProcMacroProcessExpander) -> ProcMacro {
601+
let name = expander.name().into();
602+
let kind = match expander.kind() {
603+
proc_macro_api::ProcMacroKind::CustomDerive => ProcMacroKind::CustomDerive,
604+
proc_macro_api::ProcMacroKind::FuncLike => ProcMacroKind::FuncLike,
605+
proc_macro_api::ProcMacroKind::Attr => ProcMacroKind::Attr,
606+
};
607+
let expander = Arc::new(Expander(expander));
608+
ProcMacro { name, kind, expander }
609+
}
610+
611+
#[derive(Debug)]
612+
struct Expander(proc_macro_api::ProcMacroProcessExpander);
613+
614+
impl ProcMacroExpander for Expander {
615+
fn expand(
616+
&self,
617+
subtree: &tt::Subtree,
618+
attrs: Option<&tt::Subtree>,
619+
env: &Env,
620+
) -> Result<tt::Subtree, tt::ExpansionError> {
621+
let env = env.iter().map(|(k, v)| (k.to_string(), v.to_string())).collect();
622+
self.0.expand(subtree, attrs, env)
623+
}
624+
}
625+
}

0 commit comments

Comments
 (0)