@@ -7,6 +7,8 @@ use cairo_lang_filesystem::cfg::CfgSet;
7
7
use cairo_lang_filesystem:: db:: {
8
8
CrateSettings , DependencySettings , Edition , ExperimentalFeaturesConfig ,
9
9
} ;
10
+ use cairo_lang_semantic:: inline_macros:: get_default_plugin_suite;
11
+ use cairo_lang_semantic:: plugin:: PluginSuite ;
10
12
use itertools:: Itertools ;
11
13
use scarb_metadata:: {
12
14
CompilationUnitComponentDependencyMetadata , CompilationUnitComponentId , Metadata ,
@@ -15,6 +17,7 @@ use scarb_metadata::{
15
17
use smol_str:: ToSmolStr ;
16
18
use tracing:: { debug, error, warn} ;
17
19
20
+ use super :: builtin_plugins:: BuiltinPlugin ;
18
21
use super :: manifest_registry:: member_config:: MemberConfig ;
19
22
use crate :: lang:: db:: AnalysisDatabase ;
20
23
use crate :: project:: crate_data:: Crate ;
@@ -180,12 +183,34 @@ pub fn extract_crates(metadata: &Metadata) -> Vec<Crate> {
180
183
181
184
let custom_main_file_stems = ( file_stem != "lib" ) . then_some ( vec ! [ file_stem. into( ) ] ) ;
182
185
186
+ let plugin_dependencies = package
187
+ . and_then ( |package| metadata. get_package_plugin_dependencies ( & package. id ) )
188
+ . unwrap_or_default ( ) ;
189
+
190
+ let plugins = plugin_dependencies
191
+ . into_iter ( )
192
+ . filter_map ( |plugin_metadata| {
193
+ let builtin_plugin =
194
+ BuiltinPlugin :: from_plugin_metadata ( metadata, plugin_metadata) ?;
195
+
196
+ Some ( builtin_plugin. suite ( ) )
197
+ } )
198
+ . chain ( [ get_default_plugin_suite ( ) ] . into_iter ( ) )
199
+ . fold ( PluginSuite :: default ( ) , |mut acc, suite| {
200
+ acc. add ( suite) ;
201
+ acc
202
+ } ) ;
203
+
204
+ // TODO: delete before merging
205
+ debug ! ( "Plugins for {}: {:#?}" , package. unwrap( ) . id. repr, plugins) ;
206
+
183
207
let cr = Crate {
184
208
name : crate_name. into ( ) ,
185
209
discriminator : component. discriminator . as_ref ( ) . map ( ToSmolStr :: to_smolstr) ,
186
210
root : root. into ( ) ,
187
211
custom_main_file_stems,
188
212
settings,
213
+ plugins,
189
214
} ;
190
215
191
216
if compilation_unit. package == component. package {
@@ -237,6 +262,8 @@ pub fn extract_crates(metadata: &Metadata) -> Vec<Crate> {
237
262
let name = first_crate. name . clone ( ) ;
238
263
let discriminator = first_crate. discriminator . clone ( ) ;
239
264
265
+ let plugins = first_crate. plugins . clone ( ) ;
266
+
240
267
let custom_main_file_stems =
241
268
crs. into_iter ( ) . flat_map ( |cr| cr. custom_main_file_stems . unwrap ( ) ) . collect ( ) ;
242
269
@@ -246,6 +273,7 @@ pub fn extract_crates(metadata: &Metadata) -> Vec<Crate> {
246
273
root,
247
274
custom_main_file_stems : Some ( custom_main_file_stems) ,
248
275
settings,
276
+ plugins,
249
277
} ) ;
250
278
}
251
279
0 commit comments