@@ -83,27 +83,31 @@ pub enum NameClass {
8383 Definition ( Definition ) ,
8484 /// `None` in `if let None = Some(82) {}`
8585 ConstReference ( Definition ) ,
86- FieldShorthand {
86+ /// `field` in `if let Foo { field } = todo!() {}`
87+ PatFieldShorthand {
8788 local : Local ,
8889 field : Definition ,
8990 } ,
9091}
9192
9293impl NameClass {
9394 pub fn definition ( self , db : & dyn HirDatabase ) -> Option < Definition > {
94- Some ( match self {
95+ let res = match self {
9596 NameClass :: ExternCrate ( krate) => Definition :: ModuleDef ( krate. root_module ( db) . into ( ) ) ,
9697 NameClass :: Definition ( it) => it,
9798 NameClass :: ConstReference ( _) => return None ,
98- NameClass :: FieldShorthand { local, field : _ } => Definition :: Local ( local) ,
99- } )
99+ /// Both `local` and `field` are definitions here, but only `local`
100+ /// is the definition which is introduced by this name.
101+ NameClass :: PatFieldShorthand { local, field : _ } => Definition :: Local ( local) ,
102+ } ;
103+ Some ( res)
100104 }
101105
102106 pub fn definition_or_reference ( self , db : & dyn HirDatabase ) -> Definition {
103107 match self {
104108 NameClass :: ExternCrate ( krate) => Definition :: ModuleDef ( krate. root_module ( db) . into ( ) ) ,
105109 NameClass :: Definition ( it) | NameClass :: ConstReference ( it) => it,
106- NameClass :: FieldShorthand { local : _, field } => field,
110+ NameClass :: PatFieldShorthand { local : _, field } => field,
107111 }
108112 }
109113}
@@ -161,7 +165,7 @@ pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option
161165 if record_pat_field. name_ref( ) . is_none( ) {
162166 if let Some ( field) = sema. resolve_record_pat_field( & record_pat_field) {
163167 let field = Definition :: Field ( field) ;
164- return Some ( NameClass :: FieldShorthand { local, field } ) ;
168+ return Some ( NameClass :: PatFieldShorthand { local, field } ) ;
165169 }
166170 }
167171 }
0 commit comments