@@ -523,7 +523,8 @@ impl<'a> CompletionContext<'a> {
523
523
// successful expansions
524
524
( Some ( actual_expansion) , Some ( ( fake_expansion, fake_mapped_token) ) ) => {
525
525
let new_offset = fake_mapped_token. text_range ( ) . start ( ) ;
526
- derive_ctx = Some ( ( actual_expansion, fake_expansion, new_offset) ) ;
526
+ derive_ctx =
527
+ Some ( ( actual_expansion, fake_expansion, new_offset, orig_attr) ) ;
527
528
break ' expansion;
528
529
}
529
530
// exactly one expansion failed, inconsistent state so stop expanding completely
@@ -718,7 +719,7 @@ impl<'a> CompletionContext<'a> {
718
719
original_file : & SyntaxNode ,
719
720
file_with_fake_ident : SyntaxNode ,
720
721
offset : TextSize ,
721
- derive_ctx : Option < ( SyntaxNode , SyntaxNode , TextSize ) > ,
722
+ derive_ctx : Option < ( SyntaxNode , SyntaxNode , TextSize , ast :: Attr ) > ,
722
723
) {
723
724
let fake_ident_token = file_with_fake_ident. token_at_offset ( offset) . right_biased ( ) . unwrap ( ) ;
724
725
let syntax_element = NodeOrToken :: Token ( fake_ident_token) ;
@@ -742,16 +743,14 @@ impl<'a> CompletionContext<'a> {
742
743
( self . expected_type , self . expected_name ) = self . expected_type_and_name ( ) ;
743
744
744
745
// Overwrite the path kind for derives
745
- if let Some ( ( original_file, file_with_fake_ident, offset) ) = derive_ctx {
746
- let attr = self
746
+ if let Some ( ( original_file, file_with_fake_ident, offset, origin_attr ) ) = derive_ctx {
747
+ self . existing_derives = self
747
748
. sema
748
- . token_ancestors_with_macros ( self . token . clone ( ) )
749
- . take_while ( |it| it. kind ( ) != SOURCE_FILE && it. kind ( ) != MODULE )
750
- . find_map ( ast:: Attr :: cast) ;
751
- if let Some ( attr) = & attr {
752
- self . existing_derives =
753
- self . sema . resolve_derive_macro ( attr) . into_iter ( ) . flatten ( ) . flatten ( ) . collect ( ) ;
754
- }
749
+ . resolve_derive_macro ( & origin_attr)
750
+ . into_iter ( )
751
+ . flatten ( )
752
+ . flatten ( )
753
+ . collect ( ) ;
755
754
756
755
if let Some ( ast:: NameLike :: NameRef ( name_ref) ) =
757
756
find_node_at_offset ( & file_with_fake_ident, offset)
0 commit comments