mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 09:27:27 +00:00
Merge hir::MacroDef::is_* into hir::MacroDef::kind
This commit is contained in:
parent
bad4e48672
commit
7c4eb66c1a
3 changed files with 20 additions and 16 deletions
|
@ -1116,6 +1116,14 @@ impl BuiltinType {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum MacroKind {
|
||||
Declarative,
|
||||
ProcMacro,
|
||||
Derive,
|
||||
BuiltIn,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct MacroDef {
|
||||
pub(crate) id: MacroDefId,
|
||||
|
@ -1140,20 +1148,15 @@ impl MacroDef {
|
|||
}
|
||||
}
|
||||
|
||||
/// Indicate it is a proc-macro
|
||||
pub fn is_proc_macro(&self) -> bool {
|
||||
matches!(self.id.kind, MacroDefKind::ProcMacro(..))
|
||||
}
|
||||
|
||||
/// Indicate it is a derive macro
|
||||
pub fn is_derive_macro(&self) -> bool {
|
||||
// FIXME: wrong for `ProcMacro`
|
||||
matches!(self.id.kind, MacroDefKind::ProcMacro(..) | MacroDefKind::BuiltInDerive(..))
|
||||
}
|
||||
|
||||
/// Indicate it is a declarative macro
|
||||
pub fn is_declarative(&self) -> bool {
|
||||
matches!(self.id.kind, MacroDefKind::Declarative(..))
|
||||
pub fn kind(&self) -> MacroKind {
|
||||
match self.id.kind {
|
||||
MacroDefKind::Declarative(_) => MacroKind::Declarative,
|
||||
MacroDefKind::BuiltIn(_, _) => MacroKind::BuiltIn,
|
||||
MacroDefKind::BuiltInDerive(_, _) => MacroKind::Derive,
|
||||
MacroDefKind::BuiltInEager(_, _) => MacroKind::BuiltIn,
|
||||
// FIXME might be a derive
|
||||
MacroDefKind::ProcMacro(_, _) => MacroKind::ProcMacro,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -246,7 +246,8 @@ fn get_derive_names_in_scope(ctx: &CompletionContext) -> FxHashSet<String> {
|
|||
let mut result = FxHashSet::default();
|
||||
ctx.scope.process_all_names(&mut |name, scope_def| {
|
||||
if let hir::ScopeDef::MacroDef(mac) = scope_def {
|
||||
if mac.is_derive_macro() {
|
||||
// FIXME kind() doesn't check whether proc-macro is a derive
|
||||
if mac.kind() == hir::MacroKind::Derive || mac.kind() == hir::MacroKind::ProcMacro {
|
||||
result.insert(name.to_string());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -257,7 +257,7 @@ impl Definition {
|
|||
};
|
||||
|
||||
if let Definition::Macro(macro_def) = self {
|
||||
if macro_def.is_declarative() {
|
||||
if macro_def.kind() == hir::MacroKind::Declarative {
|
||||
return if macro_def.attrs(db).by_key("macro_export").exists() {
|
||||
rev_dep_scope()
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue