Add static semantic token modifier for associated functions with no &self

This commit is contained in:
Anatol Liu
2020-11-04 20:08:46 -08:00
parent 678a29e938
commit 3baa526fb0
8 changed files with 110 additions and 2 deletions

View File

@@ -746,6 +746,21 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
if func.is_unsafe(db) {
h |= HighlightModifier::Unsafe;
}
if let None = func.self_param(db) {
// if enclosing IMPL or TRAIT exists, this is a static method
let fn_parent_kind = func
.source(db)
.value
.syntax()
.parent()
.and_then(|s| s.parent())
.and_then(|s| Some(s.kind()));
if let Some(SyntaxKind::IMPL) = fn_parent_kind {
h |= HighlightModifier::Static;
} else if let Some(SyntaxKind::TRAIT) = fn_parent_kind {
h |= HighlightModifier::Static;
}
}
return h;
}
hir::ModuleDef::Adt(hir::Adt::Struct(_)) => HighlightTag::Struct,