@@ -434,7 +434,6 @@ pub(crate) struct ImportFromDefinitionNodeRef<'ast> {
434434#[ derive( Copy , Clone , Debug ) ]
435435pub ( crate ) struct ImportFromSubmoduleDefinitionNodeRef < ' ast > {
436436 pub ( crate ) node : & ' ast ast:: StmtImportFrom ,
437- pub ( crate ) module : & ' ast ast:: Identifier ,
438437 pub ( crate ) module_index : usize ,
439438}
440439
@@ -448,9 +447,6 @@ pub(crate) struct AssignmentDefinitionNodeRef<'ast, 'db> {
448447#[ derive( Copy , Clone , Debug ) ]
449448pub ( crate ) struct AnnotatedAssignmentDefinitionNodeRef < ' ast > {
450449 pub ( crate ) node : & ' ast ast:: StmtAnnAssign ,
451- pub ( crate ) annotation : & ' ast ast:: Expr ,
452- pub ( crate ) value : Option < & ' ast ast:: Expr > ,
453- pub ( crate ) target : & ' ast ast:: Expr ,
454450}
455451
456452#[ derive( Copy , Clone , Debug ) ]
@@ -538,11 +534,9 @@ impl<'db> DefinitionNodeRef<'_, 'db> {
538534 } ) ,
539535 DefinitionNodeRef :: ImportFromSubmodule ( ImportFromSubmoduleDefinitionNodeRef {
540536 node,
541- module,
542537 module_index,
543538 } ) => DefinitionKind :: ImportFromSubmodule ( ImportFromSubmoduleDefinitionKind {
544539 node : AstNodeRef :: new ( parsed, node) ,
545- module : AstNodeRef :: new ( parsed, module) ,
546540 module_index,
547541 } ) ,
548542 DefinitionNodeRef :: ImportStar ( star_import) => {
@@ -574,14 +568,9 @@ impl<'db> DefinitionNodeRef<'_, 'db> {
574568 target : AstNodeRef :: new ( parsed, target) ,
575569 } ) ,
576570 DefinitionNodeRef :: AnnotatedAssignment ( AnnotatedAssignmentDefinitionNodeRef {
577- node : _,
578- annotation,
579- value,
580- target,
571+ node,
581572 } ) => DefinitionKind :: AnnotatedAssignment ( AnnotatedAssignmentDefinitionKind {
582- target : AstNodeRef :: new ( parsed, target) ,
583- annotation : AstNodeRef :: new ( parsed, annotation) ,
584- value : value. map ( |v| AstNodeRef :: new ( parsed, v) ) ,
573+ node : AstNodeRef :: new ( parsed, node) ,
585574 } ) ,
586575 DefinitionNodeRef :: AugmentedAssignment ( augmented_assignment) => {
587576 DefinitionKind :: AugmentedAssignment ( AstNodeRef :: new ( parsed, augmented_assignment) )
@@ -896,15 +885,15 @@ impl DefinitionKind<'_> {
896885 DefinitionKind :: Class ( class) => class. node ( module) . name . range ( ) ,
897886 DefinitionKind :: TypeAlias ( type_alias) => type_alias. node ( module) . name . range ( ) ,
898887 DefinitionKind :: NamedExpression ( named) => named. node ( module) . target . range ( ) ,
899- DefinitionKind :: Assignment ( assignment) => assignment. target . node ( module) . range ( ) ,
900- DefinitionKind :: AnnotatedAssignment ( assign) => assign. target . node ( module) . range ( ) ,
888+ DefinitionKind :: Assignment ( assignment) => assignment. target ( module) . range ( ) ,
889+ DefinitionKind :: AnnotatedAssignment ( assign) => assign. target ( module) . range ( ) ,
901890 DefinitionKind :: AugmentedAssignment ( aug_assign) => {
902891 aug_assign. node ( module) . target . range ( )
903892 }
904893 DefinitionKind :: DictKeyAssignment ( dict_key_assignment) => {
905- dict_key_assignment. key . node ( module) . range ( )
894+ dict_key_assignment. key ( module) . range ( )
906895 }
907- DefinitionKind :: For ( for_stmt) => for_stmt. target . node ( module) . range ( ) ,
896+ DefinitionKind :: For ( for_stmt) => for_stmt. target ( module) . range ( ) ,
908897 DefinitionKind :: Comprehension ( comp) => comp. target ( module) . range ( ) ,
909898 DefinitionKind :: VariadicPositionalParameter ( parameter) => {
910899 parameter. node ( module) . name . range ( )
@@ -913,10 +902,8 @@ impl DefinitionKind<'_> {
913902 parameter. node ( module) . name . range ( )
914903 }
915904 DefinitionKind :: Parameter ( parameter) => parameter. node ( module) . parameter . name . range ( ) ,
916- DefinitionKind :: WithItem ( with_item) => with_item. target . node ( module) . range ( ) ,
917- DefinitionKind :: MatchPattern ( match_pattern) => {
918- match_pattern. identifier . node ( module) . range ( )
919- }
905+ DefinitionKind :: WithItem ( with_item) => with_item. target ( module) . range ( ) ,
906+ DefinitionKind :: MatchPattern ( match_pattern) => match_pattern. identifier ( module) . range ( ) ,
920907 DefinitionKind :: ExceptHandler ( handler) => handler
921908 . node ( module)
922909 . name
@@ -943,35 +930,33 @@ impl DefinitionKind<'_> {
943930 DefinitionKind :: TypeAlias ( type_alias) => type_alias. node ( module) . range ( ) ,
944931 DefinitionKind :: NamedExpression ( named) => named. node ( module) . range ( ) ,
945932 DefinitionKind :: Assignment ( assign) => {
946- let target_range = assign. target . node ( module) . range ( ) ;
947- let value_range = assign. value . node ( module) . range ( ) ;
933+ let target_range = assign. target ( module) . range ( ) ;
934+ let value_range = assign. value ( module) . range ( ) ;
948935 target_range. cover ( value_range)
949936 }
950937 DefinitionKind :: AnnotatedAssignment ( assign) => {
951- let mut full_range = assign. target . node ( module) . range ( ) ;
952- full_range = full_range. cover ( assign. annotation . node ( module) . range ( ) ) ;
938+ let mut full_range = assign. target ( module) . range ( ) ;
939+ full_range = full_range. cover ( assign. annotation ( module) . range ( ) ) ;
953940
954- if let Some ( ref value) = assign. value {
955- full_range = full_range. cover ( value. node ( module ) . range ( ) ) ;
941+ if let Some ( value) = assign. value ( module ) {
942+ full_range = full_range. cover ( value. range ( ) ) ;
956943 }
957944
958945 full_range
959946 }
960947 DefinitionKind :: AugmentedAssignment ( aug_assign) => aug_assign. node ( module) . range ( ) ,
961948 DefinitionKind :: DictKeyAssignment ( dict_key_assignment) => {
962- dict_key_assignment. key . node ( module) . range ( )
949+ dict_key_assignment. key ( module) . range ( )
963950 }
964- DefinitionKind :: For ( for_stmt) => for_stmt. target . node ( module) . range ( ) ,
951+ DefinitionKind :: For ( for_stmt) => for_stmt. target ( module) . range ( ) ,
965952 DefinitionKind :: Comprehension ( comp) => comp. target ( module) . range ( ) ,
966953 DefinitionKind :: VariadicPositionalParameter ( parameter) => {
967954 parameter. node ( module) . range ( )
968955 }
969956 DefinitionKind :: VariadicKeywordParameter ( parameter) => parameter. node ( module) . range ( ) ,
970957 DefinitionKind :: Parameter ( parameter) => parameter. node ( module) . parameter . range ( ) ,
971- DefinitionKind :: WithItem ( with_item) => with_item. target . node ( module) . range ( ) ,
972- DefinitionKind :: MatchPattern ( match_pattern) => {
973- match_pattern. identifier . node ( module) . range ( )
974- }
958+ DefinitionKind :: WithItem ( with_item) => with_item. target ( module) . range ( ) ,
959+ DefinitionKind :: MatchPattern ( match_pattern) => match_pattern. identifier ( module) . range ( ) ,
975960 DefinitionKind :: ExceptHandler ( handler) => handler. node ( module) . range ( ) ,
976961 DefinitionKind :: TypeVar ( type_var) => type_var. node ( module) . range ( ) ,
977962 DefinitionKind :: ParamSpec ( param_spec) => param_spec. node ( module) . range ( ) ,
@@ -1017,7 +1002,7 @@ impl DefinitionKind<'_> {
10171002 // Annotated assignment is always a declaration. It is also a binding if there is a RHS
10181003 // or if we are in a stub file. Unfortunately, it is common for stubs to omit even an `...` value placeholder.
10191004 DefinitionKind :: AnnotatedAssignment ( ann_assign) => {
1020- if in_stub || ann_assign. value . is_some ( ) {
1005+ if in_stub || ann_assign. value ( module ) . is_some ( ) {
10211006 DefinitionCategory :: DeclarationAndBinding
10221007 } else {
10231008 DefinitionCategory :: Declaration
@@ -1109,6 +1094,10 @@ impl MatchPatternDefinitionKind {
11091094 self . pattern . node ( module)
11101095 }
11111096
1097+ pub ( crate ) fn identifier < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Identifier {
1098+ self . identifier . node ( module)
1099+ }
1100+
11121101 pub ( crate ) fn index ( & self ) -> u32 {
11131102 self . index
11141103 }
@@ -1163,7 +1152,7 @@ impl ImportDefinitionKind {
11631152 }
11641153
11651154 pub ( crate ) fn alias < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Alias {
1166- & self . node . node ( module) . names [ self . alias_index ]
1155+ & self . import ( module) . names [ self . alias_index ]
11671156 }
11681157
11691158 pub ( crate ) fn is_reexported ( & self ) -> bool {
@@ -1184,7 +1173,7 @@ impl ImportFromDefinitionKind {
11841173 }
11851174
11861175 pub ( crate ) fn alias < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Alias {
1187- & self . node . node ( module) . names [ self . alias_index ]
1176+ & self . import ( module) . names [ self . alias_index ]
11881177 }
11891178
11901179 pub ( crate ) fn is_reexported ( & self ) -> bool {
@@ -1194,7 +1183,6 @@ impl ImportFromDefinitionKind {
11941183#[ derive( Clone , Debug , get_size2:: GetSize ) ]
11951184pub struct ImportFromSubmoduleDefinitionKind {
11961185 node : AstNodeRef < ast:: StmtImportFrom > ,
1197- module : AstNodeRef < ast:: Identifier > ,
11981186 module_index : usize ,
11991187}
12001188
@@ -1204,15 +1192,19 @@ impl ImportFromSubmoduleDefinitionKind {
12041192 }
12051193
12061194 pub fn module < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Identifier {
1207- self . module . node ( module)
1195+ self . import ( module)
1196+ . module
1197+ . as_ref ( )
1198+ . expect ( "import-from submodule definitions should always have a module identifier" )
12081199 }
12091200
12101201 pub fn target_range ( & self , module : & ParsedModuleRef ) -> TextRange {
12111202 let module_ident = self . module ( module) ;
12121203 let module_str = module_ident. as_str ( ) ;
12131204
12141205 // Find the dot that terminates the target component.
1215- let Some ( ( end_offset, _) ) = module_str. match_indices ( '.' ) . nth ( self . module_index ) else {
1206+ let Some ( ( end_offset, _) ) = module_str. match_indices ( '.' ) . nth ( self . module_index )
1207+ else {
12161208 // This shouldn't happen but just in case, provide a safe default
12171209 return module_ident. range ( ) ;
12181210 } ;
@@ -1253,22 +1245,24 @@ impl<'db> AssignmentDefinitionKind<'db> {
12531245
12541246#[ derive( Clone , Debug , get_size2:: GetSize ) ]
12551247pub struct AnnotatedAssignmentDefinitionKind {
1256- annotation : AstNodeRef < ast:: Expr > ,
1257- value : Option < AstNodeRef < ast:: Expr > > ,
1258- target : AstNodeRef < ast:: Expr > ,
1248+ node : AstNodeRef < ast:: StmtAnnAssign > ,
12591249}
12601250
12611251impl AnnotatedAssignmentDefinitionKind {
1252+ fn node < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: StmtAnnAssign {
1253+ self . node . node ( module)
1254+ }
1255+
12621256 pub ( crate ) fn value < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> Option < & ' ast ast:: Expr > {
1263- self . value . as_ref ( ) . map ( | value| value . node ( module ) )
1257+ self . node ( module ) . value . as_deref ( )
12641258 }
12651259
12661260 pub ( crate ) fn annotation < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Expr {
1267- self . annotation . node ( module)
1261+ & self . node ( module) . annotation
12681262 }
12691263
12701264 pub ( crate ) fn target < ' ast > ( & self , module : & ' ast ParsedModuleRef ) -> & ' ast ast:: Expr {
1271- self . target . node ( module)
1265+ & self . node ( module) . target
12721266 }
12731267}
12741268
0 commit comments