@@ -12,6 +12,7 @@ use cairo_lang_filesystem::db::{
12
12
AsFilesGroupMut , CrateIdentifier , CrateSettings , DependencySettings , FilesGroup , FilesGroupEx ,
13
13
} ;
14
14
use cairo_lang_filesystem:: ids:: CrateLongId ;
15
+ use cairo_lang_semantic:: plugin:: PluginSuite ;
15
16
use cairo_lang_utils:: ordered_hash_map:: OrderedHashMap ;
16
17
use smol_str:: SmolStr ;
17
18
use std:: path:: PathBuf ;
@@ -26,12 +27,13 @@ pub struct ScarbDatabase {
26
27
pub ( crate ) fn build_scarb_root_database (
27
28
unit : & CairoCompilationUnit ,
28
29
ws : & Workspace < ' _ > ,
30
+ additional_plugins : Vec < PluginSuite > ,
29
31
) -> Result < ScarbDatabase > {
30
32
let mut b = RootDatabase :: builder ( ) ;
31
33
b. with_project_config ( build_project_config ( unit) ?) ;
32
34
b. with_cfg ( unit. cfg_set . clone ( ) ) ;
33
35
b. with_inlining_strategy ( unit. compiler_config . inlining_strategy . clone ( ) . into ( ) ) ;
34
- let proc_macro_host = load_plugins ( unit, ws, & mut b) ?;
36
+ let proc_macro_host = load_plugins ( unit, ws, & mut b, additional_plugins ) ?;
35
37
if !unit. compiler_config . enable_gas {
36
38
b. skip_auto_withdraw_gas ( ) ;
37
39
}
@@ -50,6 +52,7 @@ fn load_plugins(
50
52
unit : & CairoCompilationUnit ,
51
53
ws : & Workspace < ' _ > ,
52
54
builder : & mut RootDatabaseBuilder ,
55
+ additional_plugins : Vec < PluginSuite > ,
53
56
) -> Result < Arc < ProcMacroHostPlugin > > {
54
57
let mut proc_macros = ProcMacroHost :: default ( ) ;
55
58
for plugin_info in & unit. cairo_plugins {
@@ -64,6 +67,9 @@ fn load_plugins(
64
67
proc_macros. register_new ( plugin_info. package . clone ( ) , ws. config ( ) ) ?;
65
68
}
66
69
}
70
+ for plugin in additional_plugins {
71
+ builder. with_plugin_suite ( plugin) ;
72
+ }
67
73
let macro_host = Arc :: new ( proc_macros. into_plugin ( ) ?) ;
68
74
builder. with_plugin_suite ( ProcMacroHostPlugin :: build_plugin_suite ( macro_host. clone ( ) ) ) ;
69
75
Ok ( macro_host)
0 commit comments