diff options
-rw-r--r-- | crates/ra_hir/src/lib.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir/src/source_id.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir_expand/src/ast_id_map.rs | 22 | ||||
-rw-r--r-- | crates/ra_hir_expand/src/lib.rs | 3 |
4 files changed, 9 insertions, 20 deletions
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index ca261e8f5..227e93183 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs | |||
@@ -80,7 +80,7 @@ pub use self::{ | |||
80 | path::{Path, PathKind}, | 80 | path::{Path, PathKind}, |
81 | resolve::ScopeDef, | 81 | resolve::ScopeDef, |
82 | source_binder::{PathResolution, ScopeEntryWithSyntax, SourceAnalyzer}, | 82 | source_binder::{PathResolution, ScopeEntryWithSyntax, SourceAnalyzer}, |
83 | source_id::{AstIdMap, ErasedFileAstId}, | 83 | source_id::AstIdMap, |
84 | ty::{ | 84 | ty::{ |
85 | display::HirDisplay, ApplicationTy, CallableDef, Substs, TraitRef, Ty, TypeCtor, TypeWalk, | 85 | display::HirDisplay, ApplicationTy, CallableDef, Substs, TraitRef, Ty, TypeCtor, TypeWalk, |
86 | }, | 86 | }, |
diff --git a/crates/ra_hir/src/source_id.rs b/crates/ra_hir/src/source_id.rs index c69a2afeb..463b1d453 100644 --- a/crates/ra_hir/src/source_id.rs +++ b/crates/ra_hir/src/source_id.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | 2 | ||
3 | pub use hir_expand::{ | 3 | pub use hir_expand::{ |
4 | ast_id_map::{AstIdMap, ErasedFileAstId, FileAstId}, | 4 | ast_id_map::{AstIdMap, FileAstId}, |
5 | AstId, | 5 | AstId, |
6 | }; | 6 | }; |
diff --git a/crates/ra_hir_expand/src/ast_id_map.rs b/crates/ra_hir_expand/src/ast_id_map.rs index 2f43abe15..919ede0a0 100644 --- a/crates/ra_hir_expand/src/ast_id_map.rs +++ b/crates/ra_hir_expand/src/ast_id_map.rs | |||
@@ -8,11 +8,10 @@ | |||
8 | use std::{ | 8 | use std::{ |
9 | hash::{Hash, Hasher}, | 9 | hash::{Hash, Hasher}, |
10 | marker::PhantomData, | 10 | marker::PhantomData, |
11 | ops, | ||
12 | }; | 11 | }; |
13 | 12 | ||
14 | use ra_arena::{impl_arena_id, Arena, RawId}; | 13 | use ra_arena::{impl_arena_id, Arena, RawId}; |
15 | use ra_syntax::{ast, AstNode, SyntaxNode, SyntaxNodePtr}; | 14 | use ra_syntax::{ast, AstNode, AstPtr, SyntaxNode, SyntaxNodePtr}; |
16 | 15 | ||
17 | /// `AstId` points to an AST node in a specific file. | 16 | /// `AstId` points to an AST node in a specific file. |
18 | #[derive(Debug)] | 17 | #[derive(Debug)] |
@@ -40,14 +39,8 @@ impl<N: AstNode> Hash for FileAstId<N> { | |||
40 | } | 39 | } |
41 | } | 40 | } |
42 | 41 | ||
43 | impl<N: AstNode> From<FileAstId<N>> for ErasedFileAstId { | ||
44 | fn from(id: FileAstId<N>) -> Self { | ||
45 | id.raw | ||
46 | } | ||
47 | } | ||
48 | |||
49 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | 42 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] |
50 | pub struct ErasedFileAstId(RawId); | 43 | struct ErasedFileAstId(RawId); |
51 | impl_arena_id!(ErasedFileAstId); | 44 | impl_arena_id!(ErasedFileAstId); |
52 | 45 | ||
53 | /// Maps items' `SyntaxNode`s to `ErasedFileAstId`s and back. | 46 | /// Maps items' `SyntaxNode`s to `ErasedFileAstId`s and back. |
@@ -90,15 +83,12 @@ impl AstIdMap { | |||
90 | } | 83 | } |
91 | } | 84 | } |
92 | 85 | ||
93 | fn alloc(&mut self, item: &SyntaxNode) -> ErasedFileAstId { | 86 | pub fn get<N: AstNode>(&self, id: FileAstId<N>) -> AstPtr<N> { |
94 | self.arena.alloc(SyntaxNodePtr::new(item)) | 87 | self.arena[id.raw].cast::<N>().unwrap() |
95 | } | 88 | } |
96 | } | ||
97 | 89 | ||
98 | impl ops::Index<ErasedFileAstId> for AstIdMap { | 90 | fn alloc(&mut self, item: &SyntaxNode) -> ErasedFileAstId { |
99 | type Output = SyntaxNodePtr; | 91 | self.arena.alloc(SyntaxNodePtr::new(item)) |
100 | fn index(&self, index: ErasedFileAstId) -> &SyntaxNodePtr { | ||
101 | &self.arena[index] | ||
102 | } | 92 | } |
103 | } | 93 | } |
104 | 94 | ||
diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs index 1fb124374..a31b9fa4c 100644 --- a/crates/ra_hir_expand/src/lib.rs +++ b/crates/ra_hir_expand/src/lib.rs | |||
@@ -172,7 +172,6 @@ impl<N: AstNode> AstId<N> { | |||
172 | 172 | ||
173 | pub fn to_node(&self, db: &impl AstDatabase) -> N { | 173 | pub fn to_node(&self, db: &impl AstDatabase) -> N { |
174 | let root = db.parse_or_expand(self.file_id).unwrap(); | 174 | let root = db.parse_or_expand(self.file_id).unwrap(); |
175 | let node = db.ast_id_map(self.file_id)[self.file_ast_id.into()].to_node(&root); | 175 | db.ast_id_map(self.file_id).get(self.file_ast_id).to_node(&root) |
176 | N::cast(node).unwrap() | ||
177 | } | 176 | } |
178 | } | 177 | } |