]> git.lizzy.rs Git - rust.git/commitdiff
internal: Prefer resolution of inert attributes
authorLukas Wirth <lukastw97@gmail.com>
Sun, 5 Dec 2021 15:23:20 +0000 (16:23 +0100)
committerLukas Wirth <lukastw97@gmail.com>
Sun, 5 Dec 2021 15:28:08 +0000 (16:28 +0100)
crates/hir/src/source_analyzer.rs

index 762f172c2afdb2a46b06ddb5bbbd412898e1608a..880596b37cd28ea2ce7d633819d521dfd3385255 100644 (file)
@@ -335,17 +335,16 @@ pub(crate) fn resolve_path(
                 }
             }
         } else if is_path_of_attr {
-            let res = resolve_hir_path_as_macro(db, &self.resolver, &hir_path);
-            return match res {
-                Some(_) => res.map(PathResolution::Macro),
-                None => path.as_single_name_ref().and_then(|name_ref| {
-                    if let builtin @ Some(_) = BuiltinAttr::by_name(&name_ref.text()) {
-                        builtin.map(PathResolution::BuiltinAttr)
-                    } else if let tool @ Some(_) = ToolModule::by_name(&name_ref.text()) {
-                        tool.map(PathResolution::ToolModule)
-                    } else {
-                        None
-                    }
+            let name_ref = path.as_single_name_ref();
+            let builtin =
+                name_ref.as_ref().map(ast::NameRef::text).as_deref().and_then(BuiltinAttr::by_name);
+            if let builtin @ Some(_) = builtin {
+                return builtin.map(PathResolution::BuiltinAttr);
+            }
+            return match resolve_hir_path_as_macro(db, &self.resolver, &hir_path) {
+                res @ Some(m) if m.is_attr() => res.map(PathResolution::Macro),
+                _ => name_ref.and_then(|name_ref| {
+                    ToolModule::by_name(&name_ref.text()).map(PathResolution::ToolModule)
                 }),
             };
         }