From b17217b34afbdbdc6b1d8ec480fcf06ec4bd587e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 26 Mar 2019 18:57:57 +0300 Subject: [PATCH] simplify --- crates/ra_hir/src/db.rs | 2 +- crates/ra_hir/src/ids.rs | 7 ++++--- crates/ra_hir/src/source_id.rs | 33 ++++++++++++++++----------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 3296b9b31db..a7bbaefb891 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -22,7 +22,7 @@ pub trait DefDatabase: SourceDatabase + AsRef { #[salsa::invoke(crate::ids::macro_def_query)] fn macro_def(&self, macro_id: MacroDefId) -> Option>; - #[salsa::invoke(HirFileId::hir_parse)] + #[salsa::invoke(HirFileId::hir_parse_query)] fn hir_parse(&self, file_id: HirFileId) -> TreeArc; #[salsa::invoke(crate::adt::StructData::struct_data_query)] diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index c2df5ce00a9..81b3cfd2297 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs @@ -82,7 +82,10 @@ impl HirFileId { } } - pub(crate) fn hir_parse(db: &impl DefDatabase, file_id: HirFileId) -> TreeArc { + pub(crate) fn hir_parse_query( + db: &impl DefDatabase, + file_id: HirFileId, + ) -> TreeArc { match file_id.0 { HirFileIdRepr::File(file_id) => db.parse(file_id), HirFileIdRepr::Macro(macro_call_id) => { @@ -122,7 +125,6 @@ impl From for HirFileId { } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] - pub struct MacroDefId(pub(crate) AstId); pub(crate) fn macro_def_query(db: &impl DefDatabase, id: MacroDefId) -> Option> { @@ -152,7 +154,6 @@ impl MacroCallId { } impl MacroCallLoc { - #[allow(unused)] pub(crate) fn id(&self, db: &impl AsRef) -> MacroCallId { db.as_ref().macros.loc2id(&self) } diff --git a/crates/ra_hir/src/source_id.rs b/crates/ra_hir/src/source_id.rs index 04b7bb7b3e2..fb71417aff2 100644 --- a/crates/ra_hir/src/source_id.rs +++ b/crates/ra_hir/src/source_id.rs @@ -5,6 +5,7 @@ use ra_syntax::{SyntaxNodePtr, TreeArc, SyntaxNode, SourceFile, AstNode, ast}; use crate::{HirFileId, DefDatabase}; +/// `AstId` points to an AST node in any file #[derive(Debug)] pub(crate) struct AstId { file_id: HirFileId, @@ -43,6 +44,7 @@ impl AstId { } } +/// `AstId` points to an AST node in a specific file. #[derive(Debug)] pub(crate) struct FileAstId { raw: SourceFileItemId, @@ -89,7 +91,6 @@ pub struct SourceItemId { /// Maps items' `SyntaxNode`s to `SourceFileItemId`s and back. #[derive(Debug, PartialEq, Eq)] pub struct SourceFileItems { - file_id: HirFileId, arena: Arena, } @@ -99,7 +100,7 @@ impl SourceFileItems { file_id: HirFileId, ) -> Arc { let source_file = db.hir_parse(file_id); - Arc::new(SourceFileItems::from_source_file(&source_file, file_id)) + Arc::new(SourceFileItems::from_source_file(&source_file)) } pub(crate) fn file_item_query( @@ -113,11 +114,21 @@ impl SourceFileItems { } pub(crate) fn ast_id(&self, item: &N) -> FileAstId { - FileAstId { raw: self.id_of_unchecked(item.syntax()), _ty: PhantomData } + let ptr = SyntaxNodePtr::new(item.syntax()); + let raw = match self.arena.iter().find(|(_id, i)| **i == ptr) { + Some((it, _)) => it, + None => panic!( + "Can't find {:?} in SourceFileItems:\n{:?}", + item.syntax(), + self.arena.iter().map(|(_id, i)| i).collect::>(), + ), + }; + + FileAstId { raw, _ty: PhantomData } } - fn from_source_file(source_file: &SourceFile, file_id: HirFileId) -> SourceFileItems { - let mut res = SourceFileItems { file_id, arena: Arena::default() }; + fn from_source_file(source_file: &SourceFile) -> SourceFileItems { + let mut res = SourceFileItems { arena: Arena::default() }; // By walking the tree in bread-first order we make sure that parents // get lower ids then children. That is, adding a new child does not // change parent's id. This means that, say, adding a new function to a @@ -135,18 +146,6 @@ impl SourceFileItems { fn alloc(&mut self, item: &SyntaxNode) -> SourceFileItemId { self.arena.alloc(SyntaxNodePtr::new(item)) } - - fn id_of_unchecked(&self, item: &SyntaxNode) -> SourceFileItemId { - let ptr = SyntaxNodePtr::new(item); - if let Some((id, _)) = self.arena.iter().find(|(_id, i)| **i == ptr) { - return id; - } - panic!( - "Can't find {:?} in SourceFileItems:\n{:?}", - item, - self.arena.iter().map(|(_id, i)| i).collect::>(), - ); - } } /// Walks the subtree in bfs order, calling `f` for each node.