Skip to content

Commit ccdf19a

Browse files
authored
Proc macro server: Load ProcMacroHost (#1680)
**Stack**: - #1686 - #1685 - #1684 - #1683 - #1718 - #1682 - #1681 - #1680⚠️ *Part of a stack created by [spr](https://github.com/ejoffe/spr). Do not merge manually using the UI - doing so may have unexpected results.*
1 parent a00fe3f commit ccdf19a

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,55 @@
11
use anyhow::Result;
2-
use scarb::core::Config;
2+
use scarb::{
3+
compiler::{plugin::proc_macro::ProcMacroHost, CairoCompilationUnit, CompilationUnit},
4+
core::{Config, Workspace},
5+
ops::{self, FeaturesOpts, FeaturesSelector},
6+
};
37

48
#[tracing::instrument(skip_all, level = "info")]
5-
pub fn run(_config: &Config) -> Result<()> {
6-
unimplemented!()
9+
pub fn run(config: &mut Config) -> Result<()> {
10+
let ws = ops::read_workspace(config.manifest_path(), config)?;
11+
let resolve = ops::resolve_workspace(&ws)?;
12+
let compilation_units = ops::generate_compilation_units(
13+
&resolve,
14+
&FeaturesOpts {
15+
features: FeaturesSelector::AllFeatures,
16+
no_default_features: false,
17+
},
18+
true,
19+
&ws,
20+
)?;
21+
22+
// Compile procedural macros only.
23+
for unit in &compilation_units {
24+
if let CompilationUnit::ProcMacro(_) = unit {
25+
ops::compile_unit(unit.clone(), &ws)?;
26+
}
27+
}
28+
29+
let mut proc_macros = ProcMacroHost::default();
30+
31+
// Load previously compiled procedural macros.
32+
for unit in compilation_units {
33+
if let CompilationUnit::Cairo(unit) = unit {
34+
load_plugins(unit, &ws, &mut proc_macros)?;
35+
}
36+
}
37+
38+
ops::start_proc_macro_server(proc_macros)
39+
}
40+
41+
fn load_plugins(
42+
unit: CairoCompilationUnit,
43+
ws: &Workspace<'_>,
44+
proc_macros: &mut ProcMacroHost,
45+
) -> Result<()> {
46+
for plugin_info in unit
47+
.cairo_plugins
48+
.into_iter()
49+
.filter(|plugin_info| !plugin_info.builtin)
50+
{
51+
proc_macros.register(plugin_info.package, ws.config())?;
52+
}
53+
54+
Ok(())
755
}

scarb/src/ops/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub use manifest::*;
1111
pub use metadata::*;
1212
pub use new::*;
1313
pub use package::*;
14+
pub use proc_macro_server::*;
1415
pub use publish::*;
1516
pub use resolve::*;
1617
pub use scripts::*;
@@ -27,6 +28,7 @@ mod manifest;
2728
mod metadata;
2829
mod new;
2930
mod package;
31+
mod proc_macro_server;
3032
mod publish;
3133
mod resolve;
3234
mod scripts;
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::compiler::plugin::proc_macro::ProcMacroHost;
2+
use anyhow::Result;
3+
4+
pub fn start_proc_macro_server(_proc_macros: ProcMacroHost) -> Result<()> {
5+
unimplemented!()
6+
}

0 commit comments

Comments
 (0)