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.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs
index 3c40246a69..8e96bfa01a 100644
--- a/crates/ide/src/syntax_highlighting/highlight.rs
+++ b/crates/ide/src/syntax_highlighting/highlight.rs
@@ -269,7 +269,26 @@ fn highlight_name_ref(
h
}
- NameRefClass::FieldShorthand { .. } => SymbolKind::Field.into(),
+ NameRefClass::FieldShorthand { field_ref, .. } => {
+ highlight_def(sema, krate, field_ref.into())
+ }
+ NameRefClass::ExternCrateShorthand { decl, krate: resolved_krate } => {
+ let mut h = HlTag::Symbol(SymbolKind::Module).into();
+
+ if resolved_krate != krate {
+ h |= HlMod::Library
+ }
+ let is_public = decl.visibility(db) == hir::Visibility::Public;
+ if is_public {
+ h |= HlMod::Public
+ }
+ let is_from_builtin_crate = resolved_krate.is_builtin(db);
+ if is_from_builtin_crate {
+ h |= HlMod::DefaultLibrary;
+ }
+ h |= HlMod::CrateRoot;
+ h
+ }
};
h.tag = match name_ref.token_kind() {
@@ -474,6 +493,14 @@ fn highlight_def(
}
h
}
+ Definition::ExternCrateDecl(extern_crate) => {
+ let mut highlight =
+ Highlight::new(HlTag::Symbol(SymbolKind::Module)) | HlMod::CrateRoot;
+ if extern_crate.alias(db).is_none() {
+ highlight |= HlMod::Library;
+ }
+ highlight
+ }
Definition::Label(_) => Highlight::new(HlTag::Symbol(SymbolKind::Label)),
Definition::BuiltinAttr(_) => Highlight::new(HlTag::Symbol(SymbolKind::BuiltinAttr)),
Definition::ToolModule(_) => Highlight::new(HlTag::Symbol(SymbolKind::ToolModule)),