diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-09 10:22:13 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-09 10:22:13 +0000 |
commit | 77b70fcfd432a383243cd70e177b2bb30751da94 (patch) | |
tree | cde35c9e5218afd721a159f46c768641b496dd63 /crates/ra_hir/src/lib.rs | |
parent | 904438e993b4cc3c1d9269a44436c1b112de16c0 (diff) | |
parent | 159525b120121b217f2831869b6ea9a3cf9fe554 (diff) |
Merge #270
270: Checks r=matklad a=matklad
I see occasional panics when binding sources. Hopefully this assertions will make it clear where do the panics come from/
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/lib.rs')
-rw-r--r-- | crates/ra_hir/src/lib.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 983ce99cb..f50b922af 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs | |||
@@ -110,16 +110,32 @@ pub struct SourceItemId { | |||
110 | } | 110 | } |
111 | 111 | ||
112 | /// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. | 112 | /// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. |
113 | #[derive(Debug, PartialEq, Eq, Default)] | 113 | #[derive(Debug, PartialEq, Eq)] |
114 | pub struct SourceFileItems { | 114 | pub struct SourceFileItems { |
115 | file_id: FileId, | ||
115 | arena: Arena<SyntaxNode>, | 116 | arena: Arena<SyntaxNode>, |
116 | } | 117 | } |
117 | 118 | ||
118 | impl SourceFileItems { | 119 | impl SourceFileItems { |
120 | fn new(file_id: FileId) -> SourceFileItems { | ||
121 | SourceFileItems { | ||
122 | file_id, | ||
123 | arena: Arena::default(), | ||
124 | } | ||
125 | } | ||
126 | |||
119 | fn alloc(&mut self, item: SyntaxNode) -> SourceFileItemId { | 127 | fn alloc(&mut self, item: SyntaxNode) -> SourceFileItemId { |
120 | self.arena.alloc(item) | 128 | self.arena.alloc(item) |
121 | } | 129 | } |
122 | pub fn id_of(&self, item: SyntaxNodeRef) -> SourceFileItemId { | 130 | pub fn id_of(&self, file_id: FileId, item: SyntaxNodeRef) -> SourceFileItemId { |
131 | assert_eq!( | ||
132 | self.file_id, file_id, | ||
133 | "SourceFileItems: wrong file, expected {:?}, got {:?}", | ||
134 | self.file_id, file_id | ||
135 | ); | ||
136 | self.id_of_unchecked(item) | ||
137 | } | ||
138 | fn id_of_unchecked(&self, item: SyntaxNodeRef) -> SourceFileItemId { | ||
123 | let (id, _item) = self | 139 | let (id, _item) = self |
124 | .arena | 140 | .arena |
125 | .iter() | 141 | .iter() |