From cb958cf5fec8b051d16833ac0890cace379ad765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauren=C8=9Biu=20Nicola?= Date: Wed, 22 Jul 2020 21:50:37 +0300 Subject: Store macro invocation parameters as text instead of tt --- crates/ra_hir/src/db.rs | 2 +- crates/ra_hir_expand/src/db.rs | 19 +++++++++++++------ crates/ra_ide_db/src/change.rs | 4 ++-- crates/ra_syntax/src/lib.rs | 4 +--- crates/ra_syntax/src/syntax_node.rs | 4 +++- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 1ad92a1f8..a2b9f3e35 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -11,7 +11,7 @@ pub use hir_def::db::{ }; pub use hir_expand::db::{ AstDatabase, AstDatabaseStorage, AstIdMapQuery, InternEagerExpansionQuery, InternMacroQuery, - MacroArgQuery, MacroDefQuery, MacroExpandQuery, ParseMacroQuery, + MacroArgTextQuery, MacroDefQuery, MacroExpandQuery, ParseMacroQuery, }; pub use hir_ty::db::{ AssociatedTyDataQuery, AssociatedTyValueQuery, CallableItemSignatureQuery, FieldTypesQuery, diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs index bf30d7151..e0ad1567f 100644 --- a/crates/ra_hir_expand/src/db.rs +++ b/crates/ra_hir_expand/src/db.rs @@ -6,7 +6,7 @@ use mbe::{ExpandResult, MacroRules}; use ra_db::{salsa, SourceDatabase}; use ra_parser::FragmentKind; use ra_prof::profile; -use ra_syntax::{algo::diff, AstNode, Parse, SyntaxKind::*, SyntaxNode}; +use ra_syntax::{algo::diff, AstNode, GreenNode, Parse, SyntaxKind::*, SyntaxNode}; use crate::{ ast_id_map::AstIdMap, BuiltinDeriveExpander, BuiltinFnLikeExpander, EagerCallLoc, EagerMacroId, @@ -72,6 +72,8 @@ pub trait AstDatabase: SourceDatabase { #[salsa::interned] fn intern_macro(&self, macro_call: MacroCallLoc) -> LazyMacroId; + fn macro_arg_text(&self, id: MacroCallId) -> Option; + #[salsa::transparent] fn macro_arg(&self, id: MacroCallId) -> Option>; fn macro_def(&self, id: MacroDefId) -> Option>; fn parse_macro(&self, macro_file: MacroFile) @@ -148,10 +150,7 @@ pub(crate) fn macro_def( } } -pub(crate) fn macro_arg( - db: &dyn AstDatabase, - id: MacroCallId, -) -> Option> { +pub(crate) fn macro_arg_text(db: &dyn AstDatabase, id: MacroCallId) -> Option { let id = match id { MacroCallId::LazyMacro(id) => id, MacroCallId::EagerMacro(_id) => { @@ -161,7 +160,15 @@ pub(crate) fn macro_arg( }; let loc = db.lookup_intern_macro(id); let arg = loc.kind.arg(db)?; - let (tt, tmap) = mbe::syntax_node_to_token_tree(&arg)?; + Some(arg.green().clone()) +} + +pub(crate) fn macro_arg( + db: &dyn AstDatabase, + id: MacroCallId, +) -> Option> { + let arg = db.macro_arg_text(id)?; + let (tt, tmap) = mbe::syntax_node_to_token_tree(&SyntaxNode::new_root(arg))?; Some(Arc::new((tt, tmap))) } diff --git a/crates/ra_ide_db/src/change.rs b/crates/ra_ide_db/src/change.rs index a1bb3043b..32d9a8d1f 100644 --- a/crates/ra_ide_db/src/change.rs +++ b/crates/ra_ide_db/src/change.rs @@ -151,7 +151,7 @@ impl RootDatabase { // Macros do take significant space, but less then the syntax trees // self.query(hir::db::MacroDefQuery).sweep(sweep); - // self.query(hir::db::MacroArgQuery).sweep(sweep); + // self.query(hir::db::MacroArgTextQuery).sweep(sweep); // self.query(hir::db::MacroExpandQuery).sweep(sweep); hir::db::AstIdMapQuery.in_db(self).sweep(sweep); @@ -199,7 +199,7 @@ impl RootDatabase { // AstDatabase hir::db::AstIdMapQuery - hir::db::MacroArgQuery + hir::db::MacroArgTextQuery hir::db::MacroDefQuery hir::db::ParseMacroQuery hir::db::MacroExpandQuery diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs index 9b7664576..ac59455e7 100644 --- a/crates/ra_syntax/src/lib.rs +++ b/crates/ra_syntax/src/lib.rs @@ -42,8 +42,6 @@ use std::{marker::PhantomData, sync::Arc}; use ra_text_edit::Indel; use stdx::format_to; -use crate::syntax_node::GreenNode; - pub use crate::{ algo::InsertPosition, ast::{AstNode, AstToken}, @@ -51,7 +49,7 @@ pub use crate::{ ptr::{AstPtr, SyntaxNodePtr}, syntax_error::SyntaxError, syntax_node::{ - Direction, NodeOrToken, SyntaxElement, SyntaxElementChildren, SyntaxNode, + Direction, GreenNode, NodeOrToken, SyntaxElement, SyntaxElementChildren, SyntaxNode, SyntaxNodeChildren, SyntaxToken, SyntaxTreeBuilder, }, }; diff --git a/crates/ra_syntax/src/syntax_node.rs b/crates/ra_syntax/src/syntax_node.rs index 9650b8781..a7dbdba7b 100644 --- a/crates/ra_syntax/src/syntax_node.rs +++ b/crates/ra_syntax/src/syntax_node.rs @@ -10,7 +10,9 @@ use rowan::{GreenNodeBuilder, Language}; use crate::{Parse, SmolStr, SyntaxError, SyntaxKind, TextSize}; -pub(crate) use rowan::{GreenNode, GreenToken}; +pub use rowan::GreenNode; + +pub(crate) use rowan::GreenToken; #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum RustLanguage {} -- cgit v1.2.3