mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-16 09:48:10 +00:00
Auto merge of #14284 - Veykril:sem-derive-unresolved, r=Veykril
fix: Highlight unresolved derives as being unresolved Fixes https://github.com/rust-lang/rust-analyzer/issues/11350
This commit is contained in:
commit
c9510933a5
4 changed files with 6 additions and 4 deletions
|
@ -538,8 +538,8 @@ impl<'db> SemanticsImpl<'db> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expand_derive_as_pseudo_attr_macro(&self, attr: &ast::Attr) -> Option<SyntaxNode> {
|
fn expand_derive_as_pseudo_attr_macro(&self, attr: &ast::Attr) -> Option<SyntaxNode> {
|
||||||
let src = self.wrap_node_infile(attr.clone());
|
|
||||||
let adt = attr.syntax().parent().and_then(ast::Adt::cast)?;
|
let adt = attr.syntax().parent().and_then(ast::Adt::cast)?;
|
||||||
|
let src = self.wrap_node_infile(attr.clone());
|
||||||
let call_id = self.with_ctx(|ctx| {
|
let call_id = self.with_ctx(|ctx| {
|
||||||
ctx.attr_to_derive_macro_call(src.with_value(&adt), src).map(|(_, it, _)| it)
|
ctx.attr_to_derive_macro_call(src.with_value(&adt), src).map(|(_, it, _)| it)
|
||||||
})?;
|
})?;
|
||||||
|
|
|
@ -217,7 +217,9 @@ fn highlight_name_ref(
|
||||||
// to anything when used.
|
// to anything when used.
|
||||||
// We can fix this for derive attributes since derive helpers are recorded, but not for
|
// We can fix this for derive attributes since derive helpers are recorded, but not for
|
||||||
// general attributes.
|
// general attributes.
|
||||||
None if name_ref.syntax().ancestors().any(|it| it.kind() == ATTR) => {
|
None if name_ref.syntax().ancestors().any(|it| it.kind() == ATTR)
|
||||||
|
&& !sema.hir_file_for(name_ref.syntax()).is_derive_attr_pseudo_expansion(sema.db) =>
|
||||||
|
{
|
||||||
return HlTag::Symbol(SymbolKind::Attribute).into();
|
return HlTag::Symbol(SymbolKind::Attribute).into();
|
||||||
}
|
}
|
||||||
None => return HlTag::UnresolvedReference.into(),
|
None => return HlTag::UnresolvedReference.into(),
|
||||||
|
|
|
@ -53,6 +53,6 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||||
<span class="comment">// This is another normal comment</span>
|
<span class="comment">// This is another normal comment</span>
|
||||||
<span class="comment documentation">/// This is another doc comment</span>
|
<span class="comment documentation">/// This is another doc comment</span>
|
||||||
<span class="comment">// This is another normal comment</span>
|
<span class="comment">// This is another normal comment</span>
|
||||||
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="attribute attribute default_library library">derive</span><span class="parenthesis attribute">(</span><span class="derive attribute default_library library">Copy</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
|
<span class="attribute_bracket attribute">#</span><span class="attribute_bracket attribute">[</span><span class="attribute attribute default_library library">derive</span><span class="parenthesis attribute">(</span><span class="derive attribute default_library library">Copy</span><span class="comma attribute">,</span> <span class="unresolved_reference attribute">Unresolved</span><span class="parenthesis attribute">)</span><span class="attribute_bracket attribute">]</span>
|
||||||
<span class="comment">// The reason for these being here is to test AttrIds</span>
|
<span class="comment">// The reason for these being here is to test AttrIds</span>
|
||||||
<span class="keyword">struct</span> <span class="struct declaration">Foo</span><span class="semicolon">;</span></code></pre>
|
<span class="keyword">struct</span> <span class="struct declaration">Foo</span><span class="semicolon">;</span></code></pre>
|
|
@ -34,7 +34,7 @@ fn attributes() {
|
||||||
// This is another normal comment
|
// This is another normal comment
|
||||||
/// This is another doc comment
|
/// This is another doc comment
|
||||||
// This is another normal comment
|
// This is another normal comment
|
||||||
#[derive(Copy)]
|
#[derive(Copy, Unresolved)]
|
||||||
// The reason for these being here is to test AttrIds
|
// The reason for these being here is to test AttrIds
|
||||||
struct Foo;
|
struct Foo;
|
||||||
"#,
|
"#,
|
||||||
|
|
Loading…
Reference in a new issue