Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/highlight.rs')
-rw-r--r--crates/ide/src/syntax_highlighting/highlight.rs178
1 files changed, 87 insertions, 91 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs
index 2bf83da4df..d63b0c87a9 100644
--- a/crates/ide/src/syntax_highlighting/highlight.rs
+++ b/crates/ide/src/syntax_highlighting/highlight.rs
@@ -246,7 +246,7 @@ fn node(
fn highlight_name_ref_in_attr(sema: &Semantics<RootDatabase>, name_ref: ast::NameRef) -> Highlight {
match NameRefClass::classify(sema, &name_ref) {
Some(name_class) => match name_class {
- NameRefClass::Definition(Definition::ModuleDef(hir::ModuleDef::Module(_)))
+ NameRefClass::Definition(Definition::Module(_))
if name_ref
.syntax()
.ancestors()
@@ -302,9 +302,7 @@ fn highlight_name_ref(
{
h |= HlMod::Consuming;
}
- Definition::ModuleDef(hir::ModuleDef::Trait(trait_))
- if trait_.is_unsafe(db) =>
- {
+ Definition::Trait(trait_) if trait_.is_unsafe(db) => {
if ast::Impl::for_trait_name_ref(&name_ref)
.map_or(false, |impl_| impl_.unsafe_token().is_some())
{
@@ -358,7 +356,7 @@ fn highlight_name(
match name_kind {
Some(NameClass::Definition(def)) => {
let mut h = highlight_def(sema, krate, def) | HlMod::Definition;
- if let Definition::ModuleDef(hir::ModuleDef::Trait(trait_)) = &def {
+ if let Definition::Trait(trait_) = &def {
if trait_.is_unsafe(db) {
h |= HlMod::Unsafe;
}
@@ -398,112 +396,110 @@ fn highlight_def(
let mut h = match def {
Definition::Macro(_) => Highlight::new(HlTag::Symbol(SymbolKind::Macro)),
Definition::Field(_) => Highlight::new(HlTag::Symbol(SymbolKind::Field)),
- Definition::ModuleDef(def) => match def {
- hir::ModuleDef::Module(module) => {
- let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Module));
- if module.parent(db).is_none() {
- h |= HlMod::CrateRoot
- }
- h
+ Definition::Module(module) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Module));
+ if module.parent(db).is_none() {
+ h |= HlMod::CrateRoot
}
- hir::ModuleDef::Function(func) => {
- let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function));
- if let Some(item) = func.as_assoc_item(db) {
- h |= HlMod::Associated;
- match func.self_param(db) {
- Some(sp) => match sp.access(db) {
- hir::Access::Exclusive => {
- h |= HlMod::Mutable;
- h |= HlMod::Reference;
- }
- hir::Access::Shared => h |= HlMod::Reference,
- hir::Access::Owned => h |= HlMod::Consuming,
- },
- None => h |= HlMod::Static,
- }
-
- match item.container(db) {
- hir::AssocItemContainer::Impl(i) => {
- if i.trait_(db).is_some() {
- h |= HlMod::Trait;
- }
+ h
+ }
+ Definition::Function(func) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Function));
+ if let Some(item) = func.as_assoc_item(db) {
+ h |= HlMod::Associated;
+ match func.self_param(db) {
+ Some(sp) => match sp.access(db) {
+ hir::Access::Exclusive => {
+ h |= HlMod::Mutable;
+ h |= HlMod::Reference;
}
- hir::AssocItemContainer::Trait(_t) => {
+ hir::Access::Shared => h |= HlMod::Reference,
+ hir::Access::Owned => h |= HlMod::Consuming,
+ },
+ None => h |= HlMod::Static,
+ }
+
+ match item.container(db) {
+ hir::AssocItemContainer::Impl(i) => {
+ if i.trait_(db).is_some() {
h |= HlMod::Trait;
}
}
+ hir::AssocItemContainer::Trait(_t) => {
+ h |= HlMod::Trait;
+ }
}
-
- if func.is_unsafe(db) {
- h |= HlMod::Unsafe;
- }
- if func.is_async(db) {
- h |= HlMod::Async;
- }
-
- h
}
- hir::ModuleDef::Adt(adt) => {
- let h = match adt {
- hir::Adt::Struct(_) => HlTag::Symbol(SymbolKind::Struct),
- hir::Adt::Enum(_) => HlTag::Symbol(SymbolKind::Enum),
- hir::Adt::Union(_) => HlTag::Symbol(SymbolKind::Union),
- };
- Highlight::new(h)
+ if func.is_unsafe(db) {
+ h |= HlMod::Unsafe;
}
- hir::ModuleDef::Variant(_) => Highlight::new(HlTag::Symbol(SymbolKind::Variant)),
- hir::ModuleDef::Const(konst) => {
- let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Const));
-
- if let Some(item) = konst.as_assoc_item(db) {
- h |= HlMod::Associated;
- match item.container(db) {
- hir::AssocItemContainer::Impl(i) => {
- if i.trait_(db).is_some() {
- h |= HlMod::Trait;
- }
- }
- hir::AssocItemContainer::Trait(_t) => {
+ if func.is_async(db) {
+ h |= HlMod::Async;
+ }
+
+ h
+ }
+ Definition::Adt(adt) => {
+ let h = match adt {
+ hir::Adt::Struct(_) => HlTag::Symbol(SymbolKind::Struct),
+ hir::Adt::Enum(_) => HlTag::Symbol(SymbolKind::Enum),
+ hir::Adt::Union(_) => HlTag::Symbol(SymbolKind::Union),
+ };
+
+ Highlight::new(h)
+ }
+ Definition::Variant(_) => Highlight::new(HlTag::Symbol(SymbolKind::Variant)),
+ Definition::Const(konst) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Const));
+
+ if let Some(item) = konst.as_assoc_item(db) {
+ h |= HlMod::Associated;
+ match item.container(db) {
+ hir::AssocItemContainer::Impl(i) => {
+ if i.trait_(db).is_some() {
h |= HlMod::Trait;
}
}
+ hir::AssocItemContainer::Trait(_t) => {
+ h |= HlMod::Trait;
+ }
}
-
- h
}
- hir::ModuleDef::Trait(_) => Highlight::new(HlTag::Symbol(SymbolKind::Trait)),
- hir::ModuleDef::TypeAlias(type_) => {
- let mut h = Highlight::new(HlTag::Symbol(SymbolKind::TypeAlias));
-
- if let Some(item) = type_.as_assoc_item(db) {
- h |= HlMod::Associated;
- match item.container(db) {
- hir::AssocItemContainer::Impl(i) => {
- if i.trait_(db).is_some() {
- h |= HlMod::Trait;
- }
- }
- hir::AssocItemContainer::Trait(_t) => {
+
+ h
+ }
+ Definition::Trait(_) => Highlight::new(HlTag::Symbol(SymbolKind::Trait)),
+ Definition::TypeAlias(type_) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::TypeAlias));
+
+ if let Some(item) = type_.as_assoc_item(db) {
+ h |= HlMod::Associated;
+ match item.container(db) {
+ hir::AssocItemContainer::Impl(i) => {
+ if i.trait_(db).is_some() {
h |= HlMod::Trait;
}
}
+ hir::AssocItemContainer::Trait(_t) => {
+ h |= HlMod::Trait;
+ }
}
-
- h
}
- hir::ModuleDef::BuiltinType(_) => Highlight::new(HlTag::BuiltinType),
- hir::ModuleDef::Static(s) => {
- let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Static));
- if s.is_mut(db) {
- h |= HlMod::Mutable;
- h |= HlMod::Unsafe;
- }
+ h
+ }
+ Definition::BuiltinType(_) => Highlight::new(HlTag::BuiltinType),
+ Definition::Static(s) => {
+ let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Static));
- h
+ if s.is_mut(db) {
+ h |= HlMod::Mutable;
+ h |= HlMod::Unsafe;
}
- },
+
+ h
+ }
Definition::SelfType(_) => Highlight::new(HlTag::Symbol(SymbolKind::Impl)),
Definition::GenericParam(it) => match it {
hir::GenericParam::TypeParam(_) => Highlight::new(HlTag::Symbol(SymbolKind::TypeParam)),
@@ -540,13 +536,13 @@ fn highlight_def(
let famous_defs = FamousDefs(sema, krate);
let def_crate = def.module(db).map(hir::Module::krate).or_else(|| match def {
- Definition::ModuleDef(hir::ModuleDef::Module(module)) => Some(module.krate()),
+ Definition::Module(module) => Some(module.krate()),
_ => None,
});
let is_from_other_crate = def_crate != krate;
let is_from_builtin_crate =
def_crate.map_or(false, |def_crate| famous_defs.builtin_crates().any(|it| def_crate == it));
- let is_builtin_type = matches!(def, Definition::ModuleDef(hir::ModuleDef::BuiltinType(_)));
+ let is_builtin_type = matches!(def, Definition::BuiltinType(_));
let is_public = def.visibility(db) == Some(hir::Visibility::Public);
match (is_from_other_crate, is_builtin_type, is_public) {