fix: don't suggest existing `#[derive]`s in completion by XFFXFF · Pull Request...
source link: https://github.com/rust-lang/rust-analyzer/pull/12024
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
fixes #12019
The immediate reason is that when we are doing derive completion, ctx.existing_derives
is empty, this is because we expand the macro when looking for the ancestors of the token to be completed. Take the following code as an example, we find the first SyntaxNode
with kind Attr
based on the ancestors of the token, but the parent of Attr
is not a Struct
as we expect.
#[derive(PartialEq, Eq, Or$0)] struct S;
The ancestors of the token to be completed above.
[email protected]
[email protected] "Or"
,
[email protected]
[email protected]
[email protected] "Or"
,
[email protected]
[email protected]
[email protected]
[email protected] "Or"
,
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "Or"
,
[email protected]
[email protected] "#"
[email protected] " "
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "Or"
[email protected] "]"
[email protected] " "
,
[email protected]
[email protected]
[email protected] "#"
[email protected] " "
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "PartialEq"
[email protected] "]"
[email protected] " "
[email protected]
[email protected] "#"
[email protected] " "
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "Eq"
[email protected] "]"
[email protected] " "
[email protected]
[email protected] "#"
[email protected] " "
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "Or"
[email protected] "]"
[email protected] " "
[email protected] "("
[email protected] " "
[email protected] ")"
[email protected] " "
...
I make a small change to not do macro expansion when looking up the ancestors of the token.
What I don't understand is that self.sema.token_ancestors_with_macros(self.token.clone())
doesn't seem to expand the macro if the derive completion triggered without any prefix, like #[derive(PartialEq, Eq, $0)]
.
The ancestors of the token with #[derive(PartialEq, Eq, $0)]
.
[email protected]
[email protected] "("
[email protected] "PartialEq"
[email protected] ","
[email protected] " "
[email protected] "Eq"
[email protected] ","
[email protected] " "
[email protected] ")"
,
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "derive"
[email protected]
[email protected] "("
[email protected] "PartialEq"
[email protected] ","
[email protected] " "
[email protected] "Eq"
[email protected] ","
[email protected] " "
[email protected] ")"
,
[email protected]
[email protected] "#"
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "derive"
[email protected]
[email protected] "("
[email protected] "PartialEq"
[email protected] ","
[email protected] " "
[email protected] "Eq"
[email protected] ","
[email protected] " "
[email protected] ")"
[email protected] "]"
,
[email protected]
[email protected]
[email protected] "#"
[email protected] "["
[email protected]
[email protected]
[email protected]
[email protected]
[email protected] "derive"
[email protected]
[email protected] "("
[email protected] "PartialEq"
[email protected] ","
[email protected] " "
[email protected] "Eq"
[email protected] ","
[email protected] " "
[email protected] ")"
[email protected] "]"
[email protected] " "
[email protected] "struct"
[email protected] " "
[email protected]
[email protected] "Test"
[email protected] ";"
...
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK