From 786544f022418ed7813e401aded31e4bd5451391 Mon Sep 17 00:00:00 2001 From: kjeremy Date: Fri, 22 Nov 2019 10:05:04 -0500 Subject: Expand file! to dummy "" --- crates/ra_hir_expand/src/builtin_macro.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir_expand/src/builtin_macro.rs') diff --git a/crates/ra_hir_expand/src/builtin_macro.rs b/crates/ra_hir_expand/src/builtin_macro.rs index 9628666d4..d7057e005 100644 --- a/crates/ra_hir_expand/src/builtin_macro.rs +++ b/crates/ra_hir_expand/src/builtin_macro.rs @@ -10,6 +10,7 @@ use crate::quote; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum BuiltinExpander { + File, Line, Stringify, } @@ -22,6 +23,7 @@ impl BuiltinExpander { tt: &tt::Subtree, ) -> Result { match self { + BuiltinExpander::File => file_expand(db, id, tt), BuiltinExpander::Line => line_expand(db, id, tt), BuiltinExpander::Stringify => stringify_expand(db, id, tt), } @@ -34,7 +36,9 @@ pub fn find_builtin_macro( ast_id: AstId, ) -> Option { // FIXME: Better registering method - if ident == &name::LINE_MACRO { + if ident == &name::FILE_MACRO { + Some(MacroDefId { krate, ast_id, kind: MacroDefKind::BuiltIn(BuiltinExpander::File) }) + } else if ident == &name::LINE_MACRO { Some(MacroDefId { krate, ast_id, kind: MacroDefKind::BuiltIn(BuiltinExpander::Line) }) } else if ident == &name::STRINGIFY_MACRO { Some(MacroDefId { krate, ast_id, kind: MacroDefKind::BuiltIn(BuiltinExpander::Stringify) }) @@ -105,3 +109,23 @@ fn stringify_expand( Ok(expanded) } + +fn file_expand( + db: &dyn AstDatabase, + id: MacroCallId, + _tt: &tt::Subtree, +) -> Result { + let loc = db.lookup_intern_macro(id); + let macro_call = loc.ast_id.to_node(db); + let _ = macro_call.token_tree().ok_or_else(|| mbe::ExpandError::UnexpectedToken)?; + + // FIXME: RA purposefully lacks knowledge of absolute file names + // so just return "". + let file_name = ""; + + let expanded = quote! { + #file_name + }; + + Ok(expanded) +} -- cgit v1.2.3