diff --git a/extensions/scarb-doc/src/compilation.rs b/extensions/scarb-doc/src/compilation.rs index 2abbd4a77..6560da255 100644 --- a/extensions/scarb-doc/src/compilation.rs +++ b/extensions/scarb-doc/src/compilation.rs @@ -23,7 +23,6 @@ pub fn get_project_config( let corelib = get_corelib(compilation_unit_metadata); let dependencies = get_dependencies(compilation_unit_metadata); let crates_config = get_crates_config(metadata, compilation_unit_metadata); - ProjectConfig { base_path: package_metadata.root.clone().into(), corelib: Some(Directory::Real(corelib.source_root().into())), diff --git a/extensions/scarb-doc/src/main.rs b/extensions/scarb-doc/src/main.rs index 3ce321650..e3959ca56 100644 --- a/extensions/scarb-doc/src/main.rs +++ b/extensions/scarb-doc/src/main.rs @@ -58,6 +58,7 @@ fn main() -> Result<()> { let crate_ = Crate::new(db, main_crate_id); print_module(&crate_.root_module); + println!("{crate_:?}"); if args.save { let path = PathBuf::from(crate_.root_module.name.as_str()); diff --git a/extensions/scarb-doc/src/render.rs b/extensions/scarb-doc/src/render.rs index dbd2762ed..283d32e18 100644 --- a/extensions/scarb-doc/src/render.rs +++ b/extensions/scarb-doc/src/render.rs @@ -153,13 +153,13 @@ impl Markdown for Trait { writeln!( &mut markdown, "{}", - self.lookup_item_data.doc.as_ref().unwrap_or(&String::new()) + self.item_data.doc.as_ref().unwrap_or(&String::new()) )?; writeln!( &mut markdown, "```rust\n{}\n```\n", - self.lookup_item_data.signature + self.item_data.signature )?; if !self.trait_constants.is_empty() { @@ -190,7 +190,7 @@ impl Markdown for Trait { format!( "### {}\n{}", self.md_ref(), - self.lookup_item_data.doc.as_ref().unwrap_or(&String::new()) + self.item_data.doc.as_ref().unwrap_or(&String::new()) ) } } @@ -224,7 +224,7 @@ macro_rules! impl_md { format!( "##### {}\n{}", self.item_data.name, - self.lookup_item_data.doc.as_ref().unwrap_or(&String::new()) + self.item_data.doc.as_ref().unwrap_or(&String::new()) ) } } diff --git a/extensions/scarb-doc/src/types.rs b/extensions/scarb-doc/src/types.rs index 5df1c423d..7d6967491 100644 --- a/extensions/scarb-doc/src/types.rs +++ b/extensions/scarb-doc/src/types.rs @@ -1,4 +1,4 @@ -// TODO(drknzz): Remove if not needed. +// TODO(drknzz): Remove when not needed. #![allow(dead_code)] use cairo_lang_compiler::db::RootDatabase; @@ -160,9 +160,10 @@ impl Module { #[derive(Clone, Debug)] pub struct ItemData { pub name: String, - pub full_path: String, + pub doc: Option, + pub signature: String, - pub text: String, + pub full_path: String, pub text_without_trivia: String, } @@ -171,27 +172,28 @@ impl ItemData { db: &RootDatabase, id: impl TopLevelLanguageElementId, node: impl TypedStablePtr, + lookup_item_id: LookupItemId, ) -> Self { Self { name: id.name(db).into(), + doc: db.get_item_documentation(lookup_item_id), + signature: db.get_item_signature(lookup_item_id), full_path: id.full_path(db), - text: node.lookup(db).as_syntax_node().get_text(db), text_without_trivia: node.lookup(db).as_syntax_node().get_text_without_trivia(db), } } -} - -#[derive(Clone, Debug)] -pub struct LookupItemData { - pub doc: Option, - pub signature: String, -} -impl LookupItemData { - pub fn new(db: &RootDatabase, id: LookupItemId) -> Self { + pub fn new_without_docs_and_signature( + db: &RootDatabase, + id: impl TopLevelLanguageElementId, + node: impl TypedStablePtr, + ) -> Self { Self { - doc: db.get_item_documentation(id), - signature: db.get_item_signature(id), + name: id.name(db).into(), + doc: None, + signature: String::new(), + full_path: id.full_path(db), + text_without_trivia: node.lookup(db).as_syntax_node().get_text_without_trivia(db), } } } @@ -202,7 +204,6 @@ pub struct Constant { pub node: ast::ItemConstantPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Constant { @@ -211,9 +212,10 @@ impl Constant { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Constant(id)), ), } @@ -226,7 +228,6 @@ pub struct Use { pub node: ast::UsePathLeafPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Use { @@ -235,9 +236,10 @@ impl Use { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Use(id)), ), } @@ -250,7 +252,6 @@ pub struct FreeFunction { pub node: ast::FunctionWithBodyPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl FreeFunction { @@ -259,9 +260,10 @@ impl FreeFunction { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::FreeFunction(id)), ), } @@ -276,7 +278,6 @@ pub struct Struct { pub members: Vec, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Struct { @@ -293,9 +294,10 @@ impl Struct { id, node, members, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Struct(id)), ), } @@ -308,7 +310,6 @@ pub struct Member { pub node: ast::MemberPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Member { @@ -316,18 +317,18 @@ impl Member { let node = id.stable_ptr(db); let stable_location = StableLocation::new(node.0); - let mut item_data = ItemData::new(db, id, node); + let mut item_data = ItemData::new_without_docs_and_signature(db, id, node); + item_data.full_path.push_str("::"); item_data.full_path.push_str(name.as_str()); + item_data.signature = get_item_signature(db, &stable_location); + item_data.doc = get_item_documentation(db, &stable_location); + Self { id, node, item_data, - lookup_item_data: LookupItemData { - doc: get_item_documentation(db, &stable_location), - signature: get_item_signature(db, &stable_location), - }, } } } @@ -340,7 +341,6 @@ pub struct Enum { pub variants: Vec, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Enum { @@ -356,9 +356,10 @@ impl Enum { id, node, variants, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Enum(id)), ), } @@ -371,7 +372,6 @@ pub struct Variant { pub node: ast::VariantPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Variant { @@ -379,18 +379,18 @@ impl Variant { let node = id.stable_ptr(db); let stable_location = StableLocation::new(node.0); - let mut item_data = ItemData::new(db, id, node); + let mut item_data = ItemData::new_without_docs_and_signature(db, id, node); + item_data.full_path.push_str("::"); item_data.full_path.push_str(name.as_str()); + item_data.doc = get_item_documentation(db, &stable_location); + item_data.signature = get_item_signature(db, &stable_location); + Self { id, node, item_data, - lookup_item_data: LookupItemData { - doc: get_item_documentation(db, &stable_location), - signature: get_item_signature(db, &stable_location), - }, } } } @@ -401,7 +401,6 @@ pub struct TypeAlias { pub node: ast::ItemTypeAliasPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl TypeAlias { @@ -410,9 +409,10 @@ impl TypeAlias { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::TypeAlias(id)), ), } @@ -425,7 +425,6 @@ pub struct ImplAlias { pub node: ast::ItemImplAliasPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ImplAlias { @@ -434,9 +433,10 @@ impl ImplAlias { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::ImplAlias(id)), ), } @@ -453,7 +453,6 @@ pub struct Trait { pub trait_functions: Vec, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Trait { @@ -483,9 +482,10 @@ impl Trait { trait_constants, trait_types, trait_functions, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Trait(id)), ), } @@ -498,7 +498,6 @@ pub struct TraitConstant { pub node: ast::TraitItemConstantPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl TraitConstant { @@ -507,9 +506,10 @@ impl TraitConstant { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::TraitItem(TraitItemId::Constant(id)), ), } @@ -522,7 +522,6 @@ pub struct TraitType { pub node: ast::TraitItemTypePtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl TraitType { @@ -531,11 +530,7 @@ impl TraitType { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( - db, - LookupItemId::TraitItem(TraitItemId::Type(id)), - ), + item_data: ItemData::new(db, id, node, LookupItemId::TraitItem(TraitItemId::Type(id))), } } } @@ -546,7 +541,6 @@ pub struct TraitFunction { pub node: ast::TraitItemFunctionPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl TraitFunction { @@ -555,9 +549,10 @@ impl TraitFunction { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::TraitItem(TraitItemId::Function(id)), ), } @@ -574,7 +569,6 @@ pub struct Impl { pub impl_functions: Vec, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl Impl { @@ -604,9 +598,10 @@ impl Impl { impl_types, impl_constants, impl_functions, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::Impl(id)), ), } @@ -619,7 +614,6 @@ pub struct ImplType { pub node: ast::ItemTypeAliasPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ImplType { @@ -628,8 +622,7 @@ impl ImplType { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new(db, LookupItemId::ImplItem(ImplItemId::Type(id))), + item_data: ItemData::new(db, id, node, LookupItemId::ImplItem(ImplItemId::Type(id))), } } } @@ -640,7 +633,6 @@ pub struct ImplConstant { pub node: ast::ItemConstantPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ImplConstant { @@ -649,9 +641,10 @@ impl ImplConstant { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ImplItem(ImplItemId::Constant(id)), ), } @@ -664,7 +657,6 @@ pub struct ImplFunction { pub node: ast::FunctionWithBodyPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ImplFunction { @@ -673,9 +665,10 @@ impl ImplFunction { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ImplItem(ImplItemId::Function(id)), ), } @@ -688,7 +681,6 @@ pub struct ExternType { pub node: ast::ItemExternTypePtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ExternType { @@ -697,9 +689,10 @@ impl ExternType { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::ExternType(id)), ), } @@ -712,7 +705,6 @@ pub struct ExternFunction { pub node: ast::ItemExternFunctionPtr, pub item_data: ItemData, - pub lookup_item_data: LookupItemData, } impl ExternFunction { @@ -721,9 +713,10 @@ impl ExternFunction { Self { id, node, - item_data: ItemData::new(db, id, node), - lookup_item_data: LookupItemData::new( + item_data: ItemData::new( db, + id, + node, LookupItemId::ModuleItem(ModuleItemId::ExternFunction(id)), ), }