From b2fec18098b6a99613012d185801fed72e424997 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 1 Jan 2019 18:11:04 +0300 Subject: move more macros to hir --- crates/ra_analysis/src/db.rs | 18 +++++++++------ crates/ra_analysis/src/extend_selection.rs | 4 ++-- crates/ra_analysis/src/lib.rs | 1 - crates/ra_analysis/src/macros.rs | 32 --------------------------- crates/ra_analysis/src/syntax_highlighting.rs | 2 +- 5 files changed, 14 insertions(+), 43 deletions(-) delete mode 100644 crates/ra_analysis/src/macros.rs (limited to 'crates/ra_analysis') diff --git a/crates/ra_analysis/src/db.rs b/crates/ra_analysis/src/db.rs index 712f72484..2a71cc2b6 100644 --- a/crates/ra_analysis/src/db.rs +++ b/crates/ra_analysis/src/db.rs @@ -1,7 +1,6 @@ use std::{fmt, sync::Arc}; use salsa::{self, Database}; use ra_db::{LocationIntener, BaseDatabase}; -use hir::{self, DefId, DefLoc}; use crate::{ symbol_index, @@ -15,7 +14,8 @@ pub(crate) struct RootDatabase { #[derive(Default)] struct IdMaps { - defs: LocationIntener, + defs: LocationIntener, + macros: LocationIntener, } impl fmt::Debug for IdMaps { @@ -59,12 +59,18 @@ impl salsa::ParallelDatabase for RootDatabase { impl BaseDatabase for RootDatabase {} -impl AsRef> for RootDatabase { - fn as_ref(&self) -> &LocationIntener { +impl AsRef> for RootDatabase { + fn as_ref(&self) -> &LocationIntener { &self.id_maps.defs } } +impl AsRef> for RootDatabase { + fn as_ref(&self) -> &LocationIntener { + &self.id_maps.macros + } +} + salsa::database_storage! { pub(crate) struct RootDatabaseStorage for RootDatabase { impl ra_db::FilesDatabase { @@ -85,6 +91,7 @@ salsa::database_storage! { fn library_symbols() for symbol_index::LibrarySymbolsQuery; } impl hir::db::HirDatabase { + fn expand_macro_invocation() for hir::db::ExpandMacroInvocationQuery; fn module_tree() for hir::db::ModuleTreeQuery; fn fn_scopes() for hir::db::FnScopesQuery; fn file_items() for hir::db::SourceFileItemsQuery; @@ -98,8 +105,5 @@ salsa::database_storage! { fn struct_data() for hir::db::StructDataQuery; fn enum_data() for hir::db::EnumDataQuery; } - impl hir::MacroDatabase { - fn expand_macro() for hir::ExpandMacroQuery; - } } } diff --git a/crates/ra_analysis/src/extend_selection.rs b/crates/ra_analysis/src/extend_selection.rs index 62133ef29..f1b77f981 100644 --- a/crates/ra_analysis/src/extend_selection.rs +++ b/crates/ra_analysis/src/extend_selection.rs @@ -18,12 +18,12 @@ pub(crate) fn extend_selection(db: &RootDatabase, frange: FileRange) -> TextRang } fn extend_selection_in_macro( - db: &RootDatabase, + _db: &RootDatabase, source_file: &SourceFileNode, frange: FileRange, ) -> Option { let macro_call = find_macro_call(source_file.syntax(), frange.range)?; - let (off, exp) = crate::macros::expand(db, frange.file_id, macro_call)?; + let (off, exp) = hir::MacroDef::ast_expand(macro_call)?; let dst_range = exp.map_range_forward(frange.range - off)?; let dst_range = ra_editor::extend_selection(exp.syntax().borrowed(), dst_range)?; let src_range = exp.map_range_back(dst_range)? + off; diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index e6cfaecc3..08ecb125a 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -19,7 +19,6 @@ mod runnables; mod extend_selection; mod syntax_highlighting; -mod macros; use std::{fmt, sync::Arc}; diff --git a/crates/ra_analysis/src/macros.rs b/crates/ra_analysis/src/macros.rs deleted file mode 100644 index 21ec36cd6..000000000 --- a/crates/ra_analysis/src/macros.rs +++ /dev/null @@ -1,32 +0,0 @@ -/// Begining of macro expansion. -/// -/// This code should be moved out of ra_analysis into hir (?) ideally. -use std::sync::Arc; - -use ra_syntax::{ast, AstNode, TextUnit}; -use hir::MacroDatabase; - -use crate::{db::RootDatabase, FileId}; - -pub(crate) fn expand( - db: &RootDatabase, - _file_id: FileId, - macro_call: ast::MacroCall, -) -> Option<(TextUnit, Arc)> { - let path = macro_call.path()?; - if path.qualifier().is_some() { - return None; - } - let name_ref = path.segment()?.name_ref()?; - if name_ref.text() != "ctry" { - return None; - } - let arg = macro_call.token_tree()?.syntax(); - - let def = hir::MacroDef::CTry; - let input = hir::MacroInput { - text: arg.text().to_string(), - }; - let exp = db.expand_macro(def, input)?; - Some((arg.range().start(), exp)) -} diff --git a/crates/ra_analysis/src/syntax_highlighting.rs b/crates/ra_analysis/src/syntax_highlighting.rs index 35a4630e9..a644b3fe0 100644 --- a/crates/ra_analysis/src/syntax_highlighting.rs +++ b/crates/ra_analysis/src/syntax_highlighting.rs @@ -15,7 +15,7 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Cancelable