From 4f7df2aac107c0de2cab851f2a4f1ab369511fc8 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Mon, 11 Nov 2019 18:45:55 +0800 Subject: Add MacroDefKind --- crates/ra_hir_expand/src/builtin_macro.rs | 8 ++------ crates/ra_hir_expand/src/db.rs | 12 ++++++------ crates/ra_hir_expand/src/hygiene.rs | 8 ++++---- crates/ra_hir_expand/src/lib.rs | 26 +++++++------------------- 4 files changed, 19 insertions(+), 35 deletions(-) (limited to 'crates/ra_hir_expand/src') diff --git a/crates/ra_hir_expand/src/builtin_macro.rs b/crates/ra_hir_expand/src/builtin_macro.rs index acb62da27..97fb0cb55 100644 --- a/crates/ra_hir_expand/src/builtin_macro.rs +++ b/crates/ra_hir_expand/src/builtin_macro.rs @@ -2,7 +2,7 @@ use crate::db::AstDatabase; use crate::{ ast::{self, AstNode}, - name, AstId, BuiltinMacro, CrateId, HirFileId, MacroCallId, MacroDefId, MacroFileKind, + name, AstId, CrateId, HirFileId, MacroCallId, MacroDefId, MacroDefKind, MacroFileKind, TextUnit, }; @@ -33,11 +33,7 @@ pub fn find_builtin_macro( ) -> Option { // FIXME: Better registering method if ident == &name::LINE_MACRO { - Some(MacroDefId::BuiltinMacro(BuiltinMacro { - expander: BuiltinExpander::Line, - krate, - ast_id, - })) + Some(MacroDefId { krate, ast_id, kind: MacroDefKind::BuiltIn(BuiltinExpander::Line) }) } else { None } diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs index 009ff5312..5eadee9c2 100644 --- a/crates/ra_hir_expand/src/db.rs +++ b/crates/ra_hir_expand/src/db.rs @@ -10,7 +10,7 @@ use ra_syntax::{AstNode, Parse, SyntaxNode}; use crate::{ ast_id_map::AstIdMap, BuiltinExpander, HirFileId, HirFileIdRepr, MacroCallId, MacroCallLoc, - MacroDefId, MacroFile, MacroFileKind, + MacroDefId, MacroDefKind, MacroFile, MacroFileKind, }; #[derive(Debug, Clone, Eq, PartialEq)] @@ -69,9 +69,9 @@ pub(crate) fn macro_def( db: &dyn AstDatabase, id: MacroDefId, ) -> Option> { - match id { - MacroDefId::DeclarativeMacro(it) => { - let macro_call = it.ast_id.to_node(db); + match id.kind { + MacroDefKind::Declarative => { + let macro_call = id.ast_id.to_node(db); let arg = macro_call.token_tree()?; let (tt, tmap) = mbe::ast_to_token_tree(&arg).or_else(|| { log::warn!("fail on macro_def to token tree: {:#?}", arg); @@ -83,8 +83,8 @@ pub(crate) fn macro_def( })?; Some(Arc::new((TokenExpander::MacroRules(rules), tmap))) } - MacroDefId::BuiltinMacro(it) => { - Some(Arc::new((TokenExpander::Builtin(it.expander.clone()), mbe::TokenMap::default()))) + MacroDefKind::BuiltIn(expander) => { + Some(Arc::new((TokenExpander::Builtin(expander.clone()), mbe::TokenMap::default()))) } } } diff --git a/crates/ra_hir_expand/src/hygiene.rs b/crates/ra_hir_expand/src/hygiene.rs index 6b682d3ab..379562a2c 100644 --- a/crates/ra_hir_expand/src/hygiene.rs +++ b/crates/ra_hir_expand/src/hygiene.rs @@ -9,7 +9,7 @@ use crate::{ db::AstDatabase, either::Either, name::{AsName, Name}, - HirFileId, HirFileIdRepr, MacroDefId, + HirFileId, HirFileIdRepr, MacroDefKind, }; #[derive(Debug)] @@ -24,9 +24,9 @@ impl Hygiene { HirFileIdRepr::FileId(_) => None, HirFileIdRepr::MacroFile(macro_file) => { let loc = db.lookup_intern_macro(macro_file.macro_call_id); - match loc.def { - MacroDefId::DeclarativeMacro(it) => Some(it.krate), - MacroDefId::BuiltinMacro(_) => None, + match loc.def.kind { + MacroDefKind::Declarative => Some(loc.def.krate), + MacroDefKind::BuiltIn(_) => None, } } }; diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs index 21d666f13..c6ffa2c6f 100644 --- a/crates/ra_hir_expand/src/lib.rs +++ b/crates/ra_hir_expand/src/lib.rs @@ -78,15 +78,9 @@ impl HirFileId { HirFileIdRepr::MacroFile(macro_file) => { let loc: MacroCallLoc = db.lookup_intern_macro(macro_file.macro_call_id); - // FIXME: Do we support expansion information in builtin macro? - let macro_decl = match loc.def { - MacroDefId::DeclarativeMacro(it) => (it), - MacroDefId::BuiltinMacro(_) => return None, - }; - let arg_start = loc.ast_id.to_node(db).token_tree()?.syntax().text_range().start(); let def_start = - macro_decl.ast_id.to_node(db).token_tree()?.syntax().text_range().start(); + loc.def.ast_id.to_node(db).token_tree()?.syntax().text_range().start(); let macro_def = db.macro_def(loc.def)?; let shift = macro_def.0.shift(); @@ -94,7 +88,7 @@ impl HirFileId { let macro_arg = db.macro_arg(macro_file.macro_call_id)?; let arg_start = (loc.ast_id.file_id, arg_start); - let def_start = (macro_decl.ast_id.file_id, def_start); + let def_start = (loc.def.ast_id.file_id, def_start); Some(ExpansionInfo { arg_start, def_start, macro_arg, macro_def, exp_map, shift }) } @@ -128,22 +122,16 @@ impl salsa::InternKey for MacroCallId { } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub enum MacroDefId { - DeclarativeMacro(DeclarativeMacro), - BuiltinMacro(BuiltinMacro), -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct DeclarativeMacro { +pub struct MacroDefId { pub krate: CrateId, pub ast_id: AstId, + pub kind: MacroDefKind, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct BuiltinMacro { - pub krate: CrateId, - pub ast_id: AstId, - pub expander: BuiltinExpander, +pub enum MacroDefKind { + Declarative, + BuiltIn(BuiltinExpander), } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -- cgit v1.2.3