diff options
-rw-r--r-- | crates/ra_analysis/src/db.rs | 10 | ||||
-rw-r--r-- | crates/ra_analysis/src/syntax_ptr.rs | 17 |
2 files changed, 1 insertions, 26 deletions
diff --git a/crates/ra_analysis/src/db.rs b/crates/ra_analysis/src/db.rs index 97f170473..4c9c84e4f 100644 --- a/crates/ra_analysis/src/db.rs +++ b/crates/ra_analysis/src/db.rs | |||
@@ -2,13 +2,12 @@ use std::sync::Arc; | |||
2 | #[cfg(test)] | 2 | #[cfg(test)] |
3 | use parking_lot::Mutex; | 3 | use parking_lot::Mutex; |
4 | use ra_editor::LineIndex; | 4 | use ra_editor::LineIndex; |
5 | use ra_syntax::{SourceFileNode, SyntaxNode}; | 5 | use ra_syntax::{SourceFileNode}; |
6 | use salsa::{self, Database}; | 6 | use salsa::{self, Database}; |
7 | 7 | ||
8 | use crate::{ | 8 | use crate::{ |
9 | hir, | 9 | hir, |
10 | symbol_index::SymbolIndex, | 10 | symbol_index::SymbolIndex, |
11 | syntax_ptr::SyntaxPtr, | ||
12 | loc2id::{IdMaps}, | 11 | loc2id::{IdMaps}, |
13 | Cancelable, Canceled, FileId, | 12 | Cancelable, Canceled, FileId, |
14 | }; | 13 | }; |
@@ -122,7 +121,6 @@ salsa::database_storage! { | |||
122 | fn file_syntax() for FileSyntaxQuery; | 121 | fn file_syntax() for FileSyntaxQuery; |
123 | fn file_lines() for FileLinesQuery; | 122 | fn file_lines() for FileLinesQuery; |
124 | fn file_symbols() for FileSymbolsQuery; | 123 | fn file_symbols() for FileSymbolsQuery; |
125 | fn resolve_syntax_ptr() for ResolveSyntaxPtrQuery; | ||
126 | } | 124 | } |
127 | impl hir::db::HirDatabase { | 125 | impl hir::db::HirDatabase { |
128 | fn module_tree() for hir::db::ModuleTreeQuery; | 126 | fn module_tree() for hir::db::ModuleTreeQuery; |
@@ -148,12 +146,6 @@ salsa::query_group! { | |||
148 | fn file_symbols(file_id: FileId) -> Cancelable<Arc<SymbolIndex>> { | 146 | fn file_symbols(file_id: FileId) -> Cancelable<Arc<SymbolIndex>> { |
149 | type FileSymbolsQuery; | 147 | type FileSymbolsQuery; |
150 | } | 148 | } |
151 | fn resolve_syntax_ptr(ptr: SyntaxPtr) -> SyntaxNode { | ||
152 | type ResolveSyntaxPtrQuery; | ||
153 | // Don't retain syntax trees in memory | ||
154 | storage dependencies; | ||
155 | use fn crate::syntax_ptr::resolve_syntax_ptr; | ||
156 | } | ||
157 | } | 149 | } |
158 | } | 150 | } |
159 | 151 | ||
diff --git a/crates/ra_analysis/src/syntax_ptr.rs b/crates/ra_analysis/src/syntax_ptr.rs index 7bbf1fc33..f4b05fc19 100644 --- a/crates/ra_analysis/src/syntax_ptr.rs +++ b/crates/ra_analysis/src/syntax_ptr.rs | |||
@@ -1,22 +1,5 @@ | |||
1 | use ra_syntax::{SourceFileNode, SyntaxKind, SyntaxNode, SyntaxNodeRef, TextRange}; | 1 | use ra_syntax::{SourceFileNode, SyntaxKind, SyntaxNode, SyntaxNodeRef, TextRange}; |
2 | 2 | ||
3 | use crate::db::SyntaxDatabase; | ||
4 | use crate::FileId; | ||
5 | |||
6 | pub(crate) fn resolve_syntax_ptr(db: &impl SyntaxDatabase, ptr: SyntaxPtr) -> SyntaxNode { | ||
7 | let syntax = db.file_syntax(ptr.file_id); | ||
8 | ptr.local.resolve(&syntax) | ||
9 | } | ||
10 | |||
11 | /// SyntaxPtr is a cheap `Copy` id which identifies a particular syntax node, | ||
12 | /// without retaining syntax tree in memory. You need to explicitly `resolve` | ||
13 | /// `SyntaxPtr` to get a `SyntaxNode` | ||
14 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
15 | pub(crate) struct SyntaxPtr { | ||
16 | file_id: FileId, | ||
17 | local: LocalSyntaxPtr, | ||
18 | } | ||
19 | |||
20 | /// A pionter to a syntax node inside a file. | 3 | /// A pionter to a syntax node inside a file. |
21 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 4 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
22 | pub(crate) struct LocalSyntaxPtr { | 5 | pub(crate) struct LocalSyntaxPtr { |