Skip to content

Commit 2a4fd89

Browse files
committed
separate mod struct_types in scarb-doc
commit-id:af479360
1 parent 91a6658 commit 2a4fd89

File tree

10 files changed

+278
-229
lines changed

10 files changed

+278
-229
lines changed

Cargo.lock

Lines changed: 166 additions & 132 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extensions/scarb-doc/src/docs_generation.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ use crate::location_links::DocLocationLink;
22
use crate::types::module_type::Module;
33
use crate::types::other_types::{
44
Constant, Enum, ExternFunction, ExternType, FreeFunction, Impl, ImplAlias, ImplConstant,
5-
ImplFunction, ImplType, MacroDeclaration, Member, Struct, Trait, TraitConstant, TraitFunction,
6-
TraitType, TypeAlias, Variant,
5+
ImplFunction, ImplType, MacroDeclaration, Trait, TraitConstant, TraitFunction, TraitType,
6+
TypeAlias, Variant,
77
};
8+
use crate::types::struct_types::{Member, Struct};
89
use cairo_lang_doc::parser::DocumentationCommentToken;
910

1011
pub mod common;

extensions/scarb-doc/src/docs_generation/markdown/summary/files.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ use crate::docs_generation::{DocItem, TopLevelItems};
1111
use crate::types::module_type::Module;
1212
use crate::types::other_types::{
1313
Constant, Enum, ExternFunction, ExternType, FreeFunction, Impl, ImplAlias, MacroDeclaration,
14-
Struct, Trait, TypeAlias,
14+
Trait, TypeAlias,
1515
};
16+
use crate::types::struct_types::Struct;
1617
use anyhow::Result;
1718
use itertools::chain;
1819

extensions/scarb-doc/src/docs_generation/markdown/traits.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ use crate::types::item_data::{ItemData, SubItemData};
99
use crate::types::module_type::{Module, ModulePubUses};
1010
use crate::types::other_types::{
1111
Constant, Enum, ExternFunction, ExternType, FreeFunction, Impl, ImplAlias, ImplConstant,
12-
ImplFunction, ImplType, MacroDeclaration, Member, Struct, Trait, TraitConstant, TraitFunction,
13-
TraitType, TypeAlias, Variant,
12+
ImplFunction, ImplType, MacroDeclaration, Trait, TraitConstant, TraitFunction, TraitType,
13+
TypeAlias, Variant,
1414
};
15+
use crate::types::struct_types::{Member, Struct};
1516
use anyhow::Result;
1617
use cairo_lang_doc::parser::{CommentLinkToken, DocumentationCommentToken};
1718
use itertools::Itertools;

extensions/scarb-doc/src/types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ pub mod groups;
33
pub mod item_data;
44
pub mod module_type;
55
pub mod other_types;
6+
pub mod struct_types;

extensions/scarb-doc/src/types/groups.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use crate::types::module_type::{Module, ModulePubUses};
22
use crate::types::other_types::{
33
Constant, Enum, ExternFunction, ExternType, FreeFunction, Impl, ImplAlias, MacroDeclaration,
4-
Struct, Trait, TypeAlias,
4+
Trait, TypeAlias,
55
};
6+
use crate::types::struct_types::Struct;
67
use serde::Serialize;
78
use std::collections::HashMap;
89

extensions/scarb-doc/src/types/item_data.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ impl<'db> ItemData<'db> {
8989
}
9090
}
9191

92-
/// Helper struct for custom serialization of [`ItemData`] for [`crate::types::other_types::Variant`] and [`crate::types::other_types::Member`].
92+
/// Helper struct for custom serialization of [`ItemData`] for [`crate::types::other_types::Variant`] and [`crate::types::struct_types::Member`].
9393
#[derive(Debug, Serialize, Clone)]
9494
pub struct SubItemData<'db> {
9595
#[serde(skip_serializing)]

extensions/scarb-doc/src/types/module_type.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use crate::types::groups::{
99
use crate::types::item_data::ItemData;
1010
use crate::types::other_types::{
1111
Constant, Enum, ExternFunction, ExternType, FreeFunction, Impl, ImplAlias, MacroDeclaration,
12-
Struct, Trait, TypeAlias,
12+
Trait, TypeAlias,
1313
};
14+
use crate::types::struct_types::Struct;
1415
use cairo_lang_defs::db::DefsGroup;
1516
use cairo_lang_defs::ids::{
1617
GenericTypeId, ImplDefId, LanguageElementId, LookupItemId, ModuleId, ModuleItemId,

extensions/scarb-doc/src/types/other_types.rs

Lines changed: 3 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,18 @@ use crate::db::ScarbDocDatabase;
22
use crate::docs_generation::markdown::context::IncludedItems;
33
use crate::docs_generation::markdown::traits::WithPath;
44
use crate::types::item_data::{ItemData, SubItemData};
5-
use crate::types::module_type::is_doc_hidden_attr;
5+
use cairo_lang_defs::ids::NamedLanguageElementId;
66
use cairo_lang_defs::ids::{
77
ConstantId, EnumId, ExternFunctionId, ExternTypeId, FreeFunctionId, ImplAliasId,
88
ImplConstantDefId, ImplDefId, ImplFunctionId, ImplItemId, ImplTypeDefId, LanguageElementId,
9-
LookupItemId, MacroDeclarationId, MemberId, ModuleId, ModuleItemId, ModuleTypeAliasId,
10-
NamedLanguageElementId, StructId, TraitConstantId, TraitFunctionId, TraitId, TraitItemId,
11-
TraitTypeId, VariantId,
9+
LookupItemId, MacroDeclarationId, ModuleId, ModuleItemId, ModuleTypeAliasId, TraitConstantId,
10+
TraitFunctionId, TraitId, TraitItemId, TraitTypeId, VariantId,
1211
};
1312
use cairo_lang_diagnostics::Maybe;
1413
use cairo_lang_doc::documentable_item::DocumentableItemId;
1514
use cairo_lang_semantic::items::enm::EnumSemantic;
1615
use cairo_lang_semantic::items::imp::ImplSemantic;
17-
use cairo_lang_semantic::items::structure::StructSemantic;
1816
use cairo_lang_semantic::items::trt::TraitSemantic;
19-
use cairo_lang_semantic::items::visibility::Visibility;
2017
use cairo_lang_syntax::node::ast;
2118
use serde::Serialize;
2219
use std::collections::HashMap;
@@ -92,89 +89,6 @@ impl<'db> FreeFunction<'db> {
9289
}
9390
}
9491

95-
#[derive(Serialize, Clone)]
96-
pub struct Struct<'db> {
97-
#[serde(skip)]
98-
pub id: StructId<'db>,
99-
#[serde(skip)]
100-
pub node: ast::ItemStructPtr<'db>,
101-
102-
pub members: Vec<Member<'db>>,
103-
104-
pub item_data: ItemData<'db>,
105-
}
106-
107-
impl<'db> Struct<'db> {
108-
pub fn new(
109-
db: &'db ScarbDocDatabase,
110-
id: StructId<'db>,
111-
include_private_items: bool,
112-
) -> Maybe<Self> {
113-
let members = db.struct_members(id)?;
114-
115-
let item_data = ItemData::new(
116-
db,
117-
id,
118-
LookupItemId::ModuleItem(ModuleItemId::Struct(id)).into(),
119-
doc_full_path(&id.parent_module(db), db),
120-
);
121-
let members = members
122-
.iter()
123-
.filter_map(|(_, semantic_member)| {
124-
let visible = matches!(semantic_member.visibility, Visibility::Public);
125-
let syntax_node = &semantic_member.id.stable_location(db).syntax_node(db);
126-
if (include_private_items || visible) && !is_doc_hidden_attr(db, syntax_node) {
127-
Some(Ok(Member::new(db, semantic_member.id)))
128-
} else {
129-
None
130-
}
131-
})
132-
.collect::<Maybe<Vec<_>>>()?;
133-
134-
let node = id.stable_ptr(db);
135-
Ok(Self {
136-
id,
137-
node,
138-
members,
139-
item_data,
140-
})
141-
}
142-
143-
pub fn get_all_item_ids<'a>(&'a self) -> IncludedItems<'a, 'db> {
144-
self.members
145-
.iter()
146-
.map(|item| (item.item_data.id, &item.item_data as &dyn WithPath))
147-
.collect()
148-
}
149-
}
150-
151-
#[derive(Serialize, Clone)]
152-
pub struct Member<'db> {
153-
#[serde(skip)]
154-
pub id: MemberId<'db>,
155-
#[serde(skip)]
156-
pub node: ast::MemberPtr<'db>,
157-
158-
pub item_data: SubItemData<'db>,
159-
}
160-
161-
impl<'db> Member<'db> {
162-
pub fn new(db: &'db ScarbDocDatabase, id: MemberId<'db>) -> Self {
163-
let node = id.stable_ptr(db);
164-
165-
let parent_path = format!(
166-
"{}::{}",
167-
doc_full_path(&id.parent_module(db), db),
168-
id.struct_id(db).name(db).to_string(db)
169-
);
170-
Self {
171-
id,
172-
node,
173-
item_data: ItemData::new(db, id, DocumentableItemId::Member(id), parent_path).into(),
174-
}
175-
}
176-
}
177-
17892
#[derive(Serialize, Clone)]
17993
pub struct Enum<'db> {
18094
#[serde(skip)]
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
use crate::db::ScarbDocDatabase;
2+
use crate::docs_generation::markdown::context::IncludedItems;
3+
use crate::docs_generation::markdown::traits::WithPath;
4+
use crate::types::item_data::ItemData;
5+
use crate::types::module_type::is_doc_hidden_attr;
6+
use crate::types::other_types::doc_full_path;
7+
use cairo_lang_defs::ids::{
8+
LanguageElementId, LookupItemId, MemberId, ModuleItemId, NamedLanguageElementId, StructId,
9+
};
10+
use cairo_lang_diagnostics::Maybe;
11+
use cairo_lang_doc::documentable_item::DocumentableItemId;
12+
use cairo_lang_semantic::items::structure::StructSemantic;
13+
use cairo_lang_semantic::items::visibility::Visibility;
14+
use cairo_lang_syntax::node::ast;
15+
use serde::Serialize;
16+
17+
#[derive(Serialize, Clone)]
18+
pub struct Struct<'db> {
19+
#[serde(skip)]
20+
pub id: StructId<'db>,
21+
#[serde(skip)]
22+
pub node: ast::ItemStructPtr<'db>,
23+
pub members: Vec<Member<'db>>,
24+
pub item_data: ItemData<'db>,
25+
}
26+
27+
impl<'db> Struct<'db> {
28+
pub fn new(
29+
db: &'db ScarbDocDatabase,
30+
id: StructId<'db>,
31+
include_private_items: bool,
32+
) -> Maybe<Self> {
33+
let members = db.struct_members(id)?;
34+
35+
let item_data = ItemData::new(
36+
db,
37+
id,
38+
LookupItemId::ModuleItem(ModuleItemId::Struct(id)).into(),
39+
doc_full_path(&id.parent_module(db), db),
40+
);
41+
let members = members
42+
.iter()
43+
.filter_map(|(_, semantic_member)| {
44+
let visible = matches!(semantic_member.visibility, Visibility::Public);
45+
let syntax_node = &semantic_member.id.stable_location(db).syntax_node(db);
46+
if (include_private_items || visible) && !is_doc_hidden_attr(db, syntax_node) {
47+
Some(Ok(Member::new(db, semantic_member.id)))
48+
} else {
49+
None
50+
}
51+
})
52+
.collect::<Maybe<Vec<_>>>()?;
53+
54+
let node = id.stable_ptr(db);
55+
Ok(Self {
56+
id,
57+
node,
58+
members,
59+
item_data,
60+
})
61+
}
62+
63+
pub fn get_all_item_ids<'a>(&'a self) -> IncludedItems<'a, 'db> {
64+
self.members
65+
.iter()
66+
.map(|item| (item.item_data.id, &item.item_data as &dyn WithPath))
67+
.collect()
68+
}
69+
}
70+
71+
#[derive(Serialize, Clone)]
72+
pub struct Member<'db> {
73+
#[serde(skip)]
74+
pub id: MemberId<'db>,
75+
#[serde(skip)]
76+
pub node: ast::MemberPtr<'db>,
77+
pub item_data: ItemData<'db>,
78+
}
79+
80+
impl<'db> Member<'db> {
81+
pub fn new(db: &'db ScarbDocDatabase, id: MemberId<'db>) -> Self {
82+
let node = id.stable_ptr(db);
83+
84+
let parent_path = format!(
85+
"{}::{}",
86+
doc_full_path(&id.parent_module(db), db),
87+
id.struct_id(db).name(db).to_string(db)
88+
);
89+
Self {
90+
id,
91+
node,
92+
item_data: ItemData::new(db, id, DocumentableItemId::Member(id), parent_path),
93+
}
94+
}
95+
}

0 commit comments

Comments
 (0)