module analyzer import os const mut_struct_keyword = 'mut:' const pub_struct_keyword = 'pub:' const pub_mut_struct_keyword = 'pub mut:' const global_struct_keyword = '__global:' struct SymbolRegistration { mut: store &Store = &Store(0) cursor TreeCursor module_name string src_text []u8 // skips the local scopes and registers only // the top-level ones regardless of its // visibility is_import bool is_script bool first_var_decl_pos C.TSRange } fn (mut sr SymbolRegistration) struct_field_decl(field_access SymbolAccess, field_decl_node C.TSNode) &Symbol { field_type_node := field_decl_node.child_by_field_name('type') field_name_node := field_decl_node.child_by_field_name('name') field_typ := sr.store.find_symbol_by_type_node(field_type_node, sr.src_text) or { void_type } return &Symbol{ name: field_name_node.get_text(sr.src_text) kind: .field range: field_name_node.range() access: field_access return_type: field_typ is_top_level: true file_path: sr.store.cur_file_path file_version: sr.store.cur_version } }