11use cairo_lang_defs:: patcher:: RewriteNode ;
22use cairo_lang_defs:: plugin:: { MacroPluginMetadata , PluginDiagnostic } ;
3- use cairo_lang_syntax:: node:: helpers:: { GetIdentifier , QueryAttrs } ;
3+ use cairo_lang_syntax:: node:: helpers:: GetIdentifier ;
44use cairo_lang_syntax:: node:: { TypedSyntaxNode , ast} ;
55use indoc:: formatdoc;
66use itertools:: zip_eq;
@@ -9,10 +9,9 @@ use salsa::Database;
99use super :: starknet_module:: generation_data:: StarknetModuleCommonGenerationData ;
1010use super :: starknet_module:: { StarknetModuleKind , backwards_compatible_storage} ;
1111use super :: storage_interfaces:: {
12- StorageMemberConfig , StorageMemberKind , handle_storage_interface_struct,
13- struct_members_storage_configs,
12+ StorageMemberKind , handle_storage_interface_struct, struct_members_storage_configs,
1413} ;
15- use super :: { CONCRETE_COMPONENT_STATE_NAME , CONTRACT_STATE_NAME , FLAT_ATTR , STORAGE_STRUCT_NAME } ;
14+ use super :: { CONCRETE_COMPONENT_STATE_NAME , CONTRACT_STATE_NAME , STORAGE_STRUCT_NAME } ;
1615use crate :: plugin:: SUBSTORAGE_ATTR ;
1716
1817/// Generate getters and setters for the members of the storage struct.
@@ -29,9 +28,6 @@ pub fn handle_storage_struct<'db, 'a>(
2928 let full_generic_arg_str = starknet_module_kind. get_full_generic_arg_str ( ) ;
3029 let full_state_struct_name = starknet_module_kind. get_full_state_struct_name ( ) ;
3130
32- let mut members_struct_code = vec ! [ ] ;
33- let mut members_struct_code_mut = vec ! [ ] ;
34- let mut members_init_code = vec ! [ ] ;
3531 let mut substorage_members_struct_code = vec ! [ ] ;
3632 let mut substorage_members_init_code = vec ! [ ] ;
3733 let mut storage_struct_members = vec ! [ ] ;
@@ -53,12 +49,7 @@ pub fn handle_storage_struct<'db, 'a>(
5349 ) ) ;
5450 }
5551 }
56- let SimpleMemberGeneratedCode { struct_code, struct_code_mut, init_code, storage_member } =
57- get_simple_member_code ( db, & member, config, metadata) ;
58- members_struct_code. push ( struct_code) ;
59- members_struct_code_mut. push ( struct_code_mut) ;
60- members_init_code. push ( init_code) ;
61- storage_struct_members. push ( storage_member) ;
52+ storage_struct_members. push ( get_simple_member_code ( db, & member, metadata) ) ;
6253 }
6354
6455 let module_kind = starknet_module_kind. to_str_lower ( ) ;
@@ -129,12 +120,6 @@ pub fn handle_storage_struct<'db, 'a>(
129120 "substorage_members_init_code" . to_string ( ) ,
130121 RewriteNode :: new_modified ( substorage_members_init_code) ,
131122 ) ,
132- ( "members_struct_code" . to_string ( ) , RewriteNode :: new_modified ( members_struct_code) ) ,
133- (
134- "members_struct_code_mut" . to_string ( ) ,
135- RewriteNode :: new_modified ( members_struct_code_mut) ,
136- ) ,
137- ( "members_init_code" . to_string ( ) , RewriteNode :: new_modified ( members_init_code) ) ,
138123 ]
139124 . into ( ) ,
140125 )
@@ -206,75 +191,30 @@ fn get_substorage_member_code<'db>(
206191 }
207192}
208193
209- struct SimpleMemberGeneratedCode < ' db > {
210- struct_code : RewriteNode < ' db > ,
211- struct_code_mut : RewriteNode < ' db > ,
212- init_code : RewriteNode < ' db > ,
213- storage_member : RewriteNode < ' db > ,
214- }
215-
216- /// Returns the relevant code for a substorage storage member.
194+ /// Returns the relevant code for a storage member.
217195fn get_simple_member_code < ' db > (
218196 db : & ' db dyn Database ,
219197 member : & ast:: Member < ' db > ,
220- config : & StorageMemberConfig ,
221198 metadata : & MacroPluginMetadata < ' _ > ,
222- ) -> SimpleMemberGeneratedCode < ' db > {
223- let member_wrapper_type = RewriteNode :: text (
224- if matches ! ( config. kind, StorageMemberKind :: SubStorage | StorageMemberKind :: Flat ) {
225- "FlattenedStorage"
226- } else {
227- "StorageBase"
228- } ,
229- ) ;
199+ ) -> RewriteNode < ' db > {
230200 let member_visibility = if backwards_compatible_storage ( metadata. edition ) {
231201 RewriteNode :: text ( "pub" )
232202 } else {
233203 RewriteNode :: from_ast ( & member. visibility ( db) )
234204 } ;
235205 let member_name = RewriteNode :: from_ast_trimmed ( & member. name ( db) ) ;
236- let member_selector_name =
237- config. rename . as_deref ( ) . map_or_else ( || member_name. clone ( ) , RewriteNode :: text) ;
238- let patches = [
239- ( "attributes" . to_string ( ) , RewriteNode :: from_ast ( & member. attributes ( db) ) ) ,
240- ( "member_visibility" . to_string ( ) , member_visibility) ,
241- ( "member_wrapper_type" . to_string ( ) , member_wrapper_type) ,
242- ( "member_name" . to_string ( ) , member_name) ,
243- ( "member_selector_name" . to_string ( ) , member_selector_name) ,
244- ( "member_type" . to_string ( ) , RewriteNode :: from_ast_trimmed ( & member. type_clause ( db) . ty ( db) ) ) ,
245- ]
246- . into ( ) ;
247-
248- SimpleMemberGeneratedCode {
249- struct_code : RewriteNode :: interpolate_patched (
250- "\n $attributes$ $member_visibility$ $member_name$: \
251- starknet::storage::$member_wrapper_type$<$member_type$>,",
252- & patches,
253- )
254- . mapped ( db, member) ,
255- struct_code_mut : RewriteNode :: interpolate_patched (
256- "\n $attributes$ $member_visibility$ $member_name$: \
257- starknet::storage::$member_wrapper_type$<starknet::storage::Mutable<$member_type$>>,",
258- & patches,
259- )
260- . mapped ( db, member) ,
261- init_code : if member. has_attr ( db, SUBSTORAGE_ATTR ) || member. has_attr ( db, FLAT_ATTR ) {
262- RewriteNode :: interpolate_patched (
263- "\n $member_name$: starknet::storage::FlattenedStorage{}," ,
264- & patches,
265- )
266- } else {
267- RewriteNode :: interpolate_patched (
268- "\n $member_name$: starknet::storage::StorageBase{ address: \
269- selector!(\" $member_selector_name$\" ) },",
270- & patches,
271- )
272- }
273- . mapped ( db, member) ,
274- storage_member : RewriteNode :: interpolate_patched (
275- "\n $attributes$ $member_visibility$ $member_name$: $member_type$," ,
276- & patches,
277- )
278- . mapped ( db, member) ,
279- }
206+ RewriteNode :: interpolate_patched (
207+ "\n $attributes$ $member_visibility$ $member_name$: $member_type$," ,
208+ & [
209+ ( "attributes" . to_string ( ) , RewriteNode :: from_ast ( & member. attributes ( db) ) ) ,
210+ ( "member_visibility" . to_string ( ) , member_visibility) ,
211+ ( "member_name" . to_string ( ) , member_name) ,
212+ (
213+ "member_type" . to_string ( ) ,
214+ RewriteNode :: from_ast_trimmed ( & member. type_clause ( db) . ty ( db) ) ,
215+ ) ,
216+ ]
217+ . into ( ) ,
218+ )
219+ . mapped ( db, member)
280220}
0 commit comments