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

refactor logic into code_model.rs

address comments
This commit is contained in:
Anatol Liu 2020-11-04 20:08:46 -08:00
parent 90031a267a
commit 6b950d24d4
2 changed files with 3 additions and 16 deletions

View file

@ -41,7 +41,7 @@ use rustc_hash::FxHashSet;
use stdx::impl_from; use stdx::impl_from;
use syntax::{ use syntax::{
ast::{self, AttrsOwner, NameOwner}, ast::{self, AttrsOwner, NameOwner},
AstNode, SmolStr, SyntaxKind, AstNode, SmolStr,
}; };
use tt::{Ident, Leaf, Literal, TokenTree}; use tt::{Ident, Leaf, Literal, TokenTree};
@ -787,19 +787,6 @@ impl Function {
pub fn has_body(self, db: &dyn HirDatabase) -> bool { pub fn has_body(self, db: &dyn HirDatabase) -> bool {
db.function_data(self.id).has_body db.function_data(self.id).has_body
} }
/// whether this function is associated with some trait/impl
pub fn is_assoc_item(self, db: &dyn HirDatabase) -> bool {
let fn_parent_kind = self
.source(db)
.value
.syntax()
.parent()
.and_then(|s| s.parent())
.and_then(|s| Some(s.kind()));
matches!(fn_parent_kind, Some(SyntaxKind::IMPL) | Some(SyntaxKind::TRAIT))
}
} }
// Note: logically, this belongs to `hir_ty`, but we are not using it there yet. // Note: logically, this belongs to `hir_ty`, but we are not using it there yet.

View file

@ -6,7 +6,7 @@ pub(crate) mod tags;
#[cfg(test)] #[cfg(test)]
mod tests; mod tests;
use hir::{Local, Name, Semantics, VariantDef}; use hir::{AsAssocItem, Local, Name, Semantics, VariantDef};
use ide_db::{ use ide_db::{
defs::{Definition, NameClass, NameRefClass}, defs::{Definition, NameClass, NameRefClass},
RootDatabase, RootDatabase,
@ -746,7 +746,7 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
if func.is_unsafe(db) { if func.is_unsafe(db) {
h |= HighlightModifier::Unsafe; h |= HighlightModifier::Unsafe;
} }
if func.is_assoc_item(db) && func.self_param(db).is_none() { if func.as_assoc_item(db).is_some() && func.self_param(db).is_none() {
h |= HighlightModifier::Static; h |= HighlightModifier::Static;
} }
return h; return h;