]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide/src/syntax_highlighting/highlight.rs
Run cargo fmt
[rust.git] / crates / ide / src / syntax_highlighting / highlight.rs
index bafbf6d9cc886c8e5f4d1ee429077d3ac76f3070..fd3723ed454859719e8a9726019e5cd7e01d90ba 100644 (file)
@@ -16,7 +16,7 @@
     Highlight, HlMod, HlTag,
 };
 
-pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Option<Highlight> {
+pub(super) fn token(sema: &Semantics<'_, RootDatabase>, token: SyntaxToken) -> Option<Highlight> {
     if let Some(comment) = ast::Comment::cast(token.clone()) {
         let h = HlTag::Comment;
         return Some(match comment.kind().doc {
@@ -27,18 +27,10 @@ pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Optio
 
     let highlight: Highlight = match token.kind() {
         STRING | BYTE_STRING => HlTag::StringLiteral.into(),
-        INT_NUMBER if token.ancestors().nth(1).map(|it| it.kind()) == Some(FIELD_EXPR) => {
+        INT_NUMBER if token.parent_ancestors().nth(1).map(|it| it.kind()) == Some(FIELD_EXPR) => {
             SymbolKind::Field.into()
         }
-        INT_NUMBER | FLOAT_NUMBER_PART | FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1
-        | FLOAT_NUMBER_START_2 => HlTag::NumericLiteral.into(),
-        DOT if matches!(
-            token.prev_token().map(|n| n.kind()),
-            Some(FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2)
-        ) =>
-        {
-            HlTag::NumericLiteral.into()
-        }
+        INT_NUMBER | FLOAT_NUMBER => HlTag::NumericLiteral.into(),
         BYTE => HlTag::ByteLiteral.into(),
         CHAR => HlTag::CharLiteral.into(),
         IDENT if token.parent().and_then(ast::TokenTree::cast).is_some() => {
@@ -54,7 +46,7 @@ pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Optio
 }
 
 pub(super) fn name_like(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     krate: hir::Crate,
     bindings_shadow_count: &mut FxHashMap<hir::Name, u32>,
     syntactic_name_ref_highlighting: bool,
@@ -87,7 +79,11 @@ pub(super) fn name_like(
     Some((highlight, binding_hash))
 }
 
-fn punctuation(sema: &Semantics<RootDatabase>, token: SyntaxToken, kind: SyntaxKind) -> Highlight {
+fn punctuation(
+    sema: &Semantics<'_, RootDatabase>,
+    token: SyntaxToken,
+    kind: SyntaxKind,
+) -> Highlight {
     let parent = token.parent();
     let parent_kind = parent.as_ref().map_or(EOF, SyntaxNode::kind);
     match (kind, parent_kind) {
@@ -159,7 +155,7 @@ fn punctuation(sema: &Semantics<RootDatabase>, token: SyntaxToken, kind: SyntaxK
 }
 
 fn keyword(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     token: SyntaxToken,
     kind: SyntaxKind,
 ) -> Option<Highlight> {
@@ -198,7 +194,7 @@ fn keyword(
 }
 
 fn highlight_name_ref(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     krate: hir::Crate,
     bindings_shadow_count: &mut FxHashMap<hir::Name, u32>,
     binding_hash: &mut Option<u64>,
@@ -282,7 +278,7 @@ fn highlight_name_ref(
 }
 
 fn highlight_name(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     bindings_shadow_count: &mut FxHashMap<hir::Name, u32>,
     binding_hash: &mut Option<u64>,
     krate: hir::Crate,
@@ -329,15 +325,19 @@ fn hash<T: std::hash::Hash + std::fmt::Debug>(x: T) -> u64 {
     hash((name, shadow_count))
 }
 
-fn highlight_def(sema: &Semantics<RootDatabase>, krate: hir::Crate, def: Definition) -> Highlight {
+fn highlight_def(
+    sema: &Semantics<'_, RootDatabase>,
+    krate: hir::Crate,
+    def: Definition,
+) -> Highlight {
     let db = sema.db;
     let mut h = match def {
         Definition::Macro(m) => Highlight::new(HlTag::Symbol(m.kind(sema.db).into())),
         Definition::Field(_) => Highlight::new(HlTag::Symbol(SymbolKind::Field)),
         Definition::Module(module) => {
             let mut h = Highlight::new(HlTag::Symbol(SymbolKind::Module));
-            if module.parent(db).is_none() {
-                h |= HlMod::CrateRoot
+            if module.is_crate_root(db) {
+                h |= HlMod::CrateRoot;
             }
             h
         }
@@ -474,10 +474,7 @@ fn highlight_def(sema: &Semantics<RootDatabase>, krate: hir::Crate, def: Definit
         Definition::ToolModule(_) => Highlight::new(HlTag::Symbol(SymbolKind::ToolModule)),
     };
 
-    let def_crate = def.module(db).map(hir::Module::krate).or_else(|| match def {
-        Definition::Module(module) => Some(module.krate()),
-        _ => None,
-    });
+    let def_crate = def.krate(db);
     let is_from_other_crate = def_crate != Some(krate);
     let is_from_builtin_crate = def_crate.map_or(false, |def_crate| def_crate.is_builtin(db));
     let is_builtin_type = matches!(def, Definition::BuiltinType(_));
@@ -497,7 +494,7 @@ fn highlight_def(sema: &Semantics<RootDatabase>, krate: hir::Crate, def: Definit
 }
 
 fn highlight_method_call_by_name_ref(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     krate: hir::Crate,
     name_ref: &ast::NameRef,
 ) -> Option<Highlight> {
@@ -506,7 +503,7 @@ fn highlight_method_call_by_name_ref(
 }
 
 fn highlight_method_call(
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     krate: hir::Crate,
     method_call: &ast::MethodCallExpr,
 ) -> Option<Highlight> {
@@ -521,7 +518,11 @@ fn highlight_method_call(
     if func.is_async(sema.db) {
         h |= HlMod::Async;
     }
-    if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() {
+    if func
+        .as_assoc_item(sema.db)
+        .and_then(|it| it.containing_trait_or_trait_impl(sema.db))
+        .is_some()
+    {
         h |= HlMod::Trait;
     }
 
@@ -591,7 +592,7 @@ fn highlight_name_by_syntax(name: ast::Name) -> Highlight {
 
 fn highlight_name_ref_by_syntax(
     name: ast::NameRef,
-    sema: &Semantics<RootDatabase>,
+    sema: &Semantics<'_, RootDatabase>,
     krate: hir::Crate,
 ) -> Highlight {
     let default = HlTag::UnresolvedReference;