diff --git a/extensions/scarb-doc/src/main.rs b/extensions/scarb-doc/src/main.rs index 0a9849c46..9dd5f10df 100644 --- a/extensions/scarb-doc/src/main.rs +++ b/extensions/scarb-doc/src/main.rs @@ -92,6 +92,7 @@ fn print_module(module: &types::Module) { for imp in module.impls.iter() { println!(" Impl {:?}", imp.item_data.name); print_names!(" Impl types ", imp.impl_types); + print_names!(" Impl constants ", imp.impl_constants); print_names!(" Impl functions ", imp.impl_functions); } print_names!("Extern Types ", module.extern_types); diff --git a/extensions/scarb-doc/src/types.rs b/extensions/scarb-doc/src/types.rs index 7de12ad8e..b924c5ce6 100644 --- a/extensions/scarb-doc/src/types.rs +++ b/extensions/scarb-doc/src/types.rs @@ -1,10 +1,10 @@ use cairo_lang_compiler::db::RootDatabase; use cairo_lang_defs::db::DefsGroup; use cairo_lang_defs::ids::{ - ConstantId, EnumId, ExternFunctionId, ExternTypeId, FreeFunctionId, ImplAliasId, ImplDefId, - ImplFunctionId, ImplItemId, ImplTypeDefId, LookupItemId, MemberId, ModuleId, ModuleItemId, - ModuleTypeAliasId, StructId, TopLevelLanguageElementId, TraitConstantId, TraitFunctionId, - TraitId, TraitItemId, TraitTypeId, UseId, VariantId, + ConstantId, EnumId, ExternFunctionId, ExternTypeId, FreeFunctionId, ImplAliasId, + ImplConstantDefId, ImplDefId, ImplFunctionId, ImplItemId, ImplTypeDefId, LookupItemId, + MemberId, ModuleId, ModuleItemId, ModuleTypeAliasId, StructId, TopLevelLanguageElementId, + TraitConstantId, TraitFunctionId, TraitId, TraitItemId, TraitTypeId, UseId, VariantId, }; use cairo_lang_filesystem::ids::CrateId; use cairo_lang_semantic::db::SemanticGroup; @@ -530,6 +530,7 @@ pub struct Impl { pub node: ast::ItemImplPtr, pub impl_types: Vec, + pub impl_constants: Vec, pub impl_functions: Vec, pub item_data: ItemData, @@ -544,6 +545,12 @@ impl Impl { .map(|(id, _)| ImplType::new(db, *id)) .collect::>(); + let impl_constants = db.impl_constants(id).unwrap(); + let impl_constants = impl_constants + .iter() + .map(|(id, _)| ImplConstant::new(db, *id)) + .collect::>(); + let impl_functions = db.impl_functions(id).unwrap(); let impl_functions = impl_functions .iter() @@ -555,6 +562,7 @@ impl Impl { id, node, impl_types, + impl_constants, impl_functions, item_data: ItemData::new(db, id, node), lookup_item_data: LookupItemData::new( @@ -586,6 +594,30 @@ impl ImplType { } } +#[derive(Clone, Debug)] +pub struct ImplConstant { + pub id: ImplConstantDefId, + pub node: ast::ItemConstantPtr, + + pub item_data: ItemData, + pub lookup_item_data: LookupItemData, +} + +impl ImplConstant { + pub fn new(db: &RootDatabase, id: ImplConstantDefId) -> Self { + let node = id.stable_ptr(db); + Self { + id, + node, + item_data: ItemData::new(db, id, node), + lookup_item_data: LookupItemData::new( + db, + LookupItemId::ImplItem(ImplItemId::Constant(id)), + ), + } + } +} + #[derive(Clone, Debug)] pub struct ImplFunction { pub id: ImplFunctionId, diff --git a/extensions/scarb-doc/tests/test.rs b/extensions/scarb-doc/tests/test.rs index 5c93bb5fa..d1c162df2 100644 --- a/extensions/scarb-doc/tests/test.rs +++ b/extensions/scarb-doc/tests/test.rs @@ -80,6 +80,9 @@ fn test_main() { /// Type alias for a pair of circles type ShapePair = (Circle, Circle); + /// Shape constant + const SHAPE_CONST = "xyz"; + /// Implementation of the area method for Circle fn area(self: Circle) -> u32 { 3 * self.radius * self.radius @@ -106,8 +109,6 @@ fn test_main() { .success(); let stdout = std::str::from_utf8(&output.get_output().stdout).unwrap(); - println!("{:?}", &stdout); - assert_eq!( stdout, indoc! {r#" @@ -132,15 +133,19 @@ fn test_main() { Impls : ["CircleShape", "CircleDrop", "CircleSerde", "CirclePartialEq"] Impl "CircleShape" Impl types : ["ShapePair"] + Impl constants : ["SHAPE_CONST"] Impl functions : ["area"] Impl "CircleDrop" Impl types : [] + Impl constants : [] Impl functions : [] Impl "CircleSerde" Impl types : [] + Impl constants : [] Impl functions : ["serialize", "deserialize"] Impl "CirclePartialEq" Impl types : [] + Impl constants : [] Impl functions : ["eq"] Extern Types : [] Extern Functions: []