mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Update builtin tool list
This commit is contained in:
parent
aaa5426fec
commit
cd9e90cc71
4 changed files with 16 additions and 25 deletions
|
@ -12,9 +12,6 @@ use std::sync::OnceLock;
|
||||||
|
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
|
|
||||||
/// Ignored attribute namespaces used by tools.
|
|
||||||
pub const TOOL_MODULES: &[&str] = &["rustfmt", "clippy"];
|
|
||||||
|
|
||||||
pub struct BuiltinAttribute {
|
pub struct BuiltinAttribute {
|
||||||
pub name: &'static str,
|
pub name: &'static str,
|
||||||
pub template: AttributeTemplate,
|
pub template: AttributeTemplate,
|
||||||
|
|
|
@ -84,6 +84,14 @@ use crate::{
|
||||||
LocalModuleId, Lookup, MacroExpander, MacroId, ModuleId, ProcMacroId, UseId,
|
LocalModuleId, Lookup, MacroExpander, MacroId, ModuleId, ProcMacroId, UseId,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const PREDEFINED_TOOLS: &[SmolStr] = &[
|
||||||
|
SmolStr::new_static("clippy"),
|
||||||
|
SmolStr::new_static("rustfmt"),
|
||||||
|
SmolStr::new_static("diagnostic"),
|
||||||
|
SmolStr::new_static("miri"),
|
||||||
|
SmolStr::new_static("rust_analyzer"),
|
||||||
|
];
|
||||||
|
|
||||||
/// Contains the results of (early) name resolution.
|
/// Contains the results of (early) name resolution.
|
||||||
///
|
///
|
||||||
/// A `DefMap` stores the module tree and the definitions that are in scope in every module after
|
/// A `DefMap` stores the module tree and the definitions that are in scope in every module after
|
||||||
|
@ -160,7 +168,7 @@ impl DefMapCrateData {
|
||||||
fn_proc_macro_mapping: FxHashMap::default(),
|
fn_proc_macro_mapping: FxHashMap::default(),
|
||||||
proc_macro_loading_error: None,
|
proc_macro_loading_error: None,
|
||||||
registered_attrs: Vec::new(),
|
registered_attrs: Vec::new(),
|
||||||
registered_tools: Vec::new(),
|
registered_tools: PREDEFINED_TOOLS.into(),
|
||||||
unstable_features: FxHashSet::default(),
|
unstable_features: FxHashSet::default(),
|
||||||
rustc_coherence_is_core: false,
|
rustc_coherence_is_core: false,
|
||||||
no_core: false,
|
no_core: false,
|
||||||
|
|
|
@ -10,7 +10,7 @@ use syntax::{ast, SmolStr};
|
||||||
use triomphe::Arc;
|
use triomphe::Arc;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
attr::builtin::{find_builtin_attr_idx, TOOL_MODULES},
|
attr::builtin::find_builtin_attr_idx,
|
||||||
db::DefDatabase,
|
db::DefDatabase,
|
||||||
item_scope::BuiltinShadowMode,
|
item_scope::BuiltinShadowMode,
|
||||||
nameres::path_resolution::ResolveMode,
|
nameres::path_resolution::ResolveMode,
|
||||||
|
@ -82,8 +82,7 @@ impl DefMap {
|
||||||
let name = name.to_smol_str();
|
let name = name.to_smol_str();
|
||||||
let pred = |n: &_| *n == name;
|
let pred = |n: &_| *n == name;
|
||||||
|
|
||||||
let registered = self.data.registered_tools.iter().map(SmolStr::as_str);
|
let is_tool = self.data.registered_tools.iter().map(SmolStr::as_str).any(pred);
|
||||||
let is_tool = TOOL_MODULES.iter().copied().chain(registered).any(pred);
|
|
||||||
// FIXME: tool modules can be shadowed by actual modules
|
// FIXME: tool modules can be shadowed by actual modules
|
||||||
if is_tool {
|
if is_tool {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -3372,34 +3372,21 @@ impl BuiltinAttr {
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||||
pub struct ToolModule {
|
pub struct ToolModule {
|
||||||
krate: Option<CrateId>,
|
krate: CrateId,
|
||||||
idx: u32,
|
idx: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToolModule {
|
impl ToolModule {
|
||||||
// FIXME: consider crates\hir_def\src\nameres\attr_resolution.rs?
|
|
||||||
pub(crate) fn by_name(db: &dyn HirDatabase, krate: Crate, name: &str) -> Option<Self> {
|
pub(crate) fn by_name(db: &dyn HirDatabase, krate: Crate, name: &str) -> Option<Self> {
|
||||||
if let builtin @ Some(_) = Self::builtin(name) {
|
let krate = krate.id;
|
||||||
return builtin;
|
|
||||||
}
|
|
||||||
let idx =
|
let idx =
|
||||||
db.crate_def_map(krate.id).registered_tools().iter().position(|it| it == name)? as u32;
|
db.crate_def_map(krate).registered_tools().iter().position(|it| it == name)? as u32;
|
||||||
Some(ToolModule { krate: Some(krate.id), idx })
|
Some(ToolModule { krate, idx })
|
||||||
}
|
|
||||||
|
|
||||||
fn builtin(name: &str) -> Option<Self> {
|
|
||||||
hir_def::attr::builtin::TOOL_MODULES
|
|
||||||
.iter()
|
|
||||||
.position(|&tool| tool == name)
|
|
||||||
.map(|idx| ToolModule { krate: None, idx: idx as u32 })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(&self, db: &dyn HirDatabase) -> SmolStr {
|
pub fn name(&self, db: &dyn HirDatabase) -> SmolStr {
|
||||||
// FIXME: Return a `Name` here
|
// FIXME: Return a `Name` here
|
||||||
match self.krate {
|
db.crate_def_map(self.krate).registered_tools()[self.idx as usize].clone()
|
||||||
Some(krate) => db.crate_def_map(krate).registered_tools()[self.idx as usize].clone(),
|
|
||||||
None => SmolStr::new(hir_def::attr::builtin::TOOL_MODULES[self.idx as usize]),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue