diff options
author | Aleksey Kladov <[email protected]> | 2018-11-27 22:53:54 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-11-27 22:53:54 +0000 |
commit | 9027a21f9a1c7fcee0a59a1e28928fed29781dd8 (patch) | |
tree | 48a1d6ae7046e995baafbb053c43688cd9496935 /crates/ra_analysis/src/hir | |
parent | 00df339c419fc75af6a939b75be8bef5b5a69732 (diff) |
Introduce SourceItemId
Diffstat (limited to 'crates/ra_analysis/src/hir')
-rw-r--r-- | crates/ra_analysis/src/hir/db.rs | 4 | ||||
-rw-r--r-- | crates/ra_analysis/src/hir/mod.rs | 7 | ||||
-rw-r--r-- | crates/ra_analysis/src/hir/module/nameres.rs | 14 | ||||
-rw-r--r-- | crates/ra_analysis/src/hir/query_definitions.rs | 10 |
4 files changed, 22 insertions, 13 deletions
diff --git a/crates/ra_analysis/src/hir/db.rs b/crates/ra_analysis/src/hir/db.rs index e74fcc8ad..0998295f5 100644 --- a/crates/ra_analysis/src/hir/db.rs +++ b/crates/ra_analysis/src/hir/db.rs | |||
@@ -8,7 +8,7 @@ use ra_syntax::{ | |||
8 | use crate::{ | 8 | use crate::{ |
9 | FileId, | 9 | FileId, |
10 | db::SyntaxDatabase, | 10 | db::SyntaxDatabase, |
11 | hir::{SourceFileItems, SourceFileItemId}, | 11 | hir::{SourceFileItems, SourceItemId}, |
12 | hir::query_definitions, | 12 | hir::query_definitions, |
13 | hir::function::{FnId, FnScopes}, | 13 | hir::function::{FnId, FnScopes}, |
14 | hir::module::{ | 14 | hir::module::{ |
@@ -39,7 +39,7 @@ pub(crate) trait HirDatabase: SyntaxDatabase { | |||
39 | use fn query_definitions::file_items; | 39 | use fn query_definitions::file_items; |
40 | } | 40 | } |
41 | 41 | ||
42 | fn file_item(file_id: FileId, file_item_id: SourceFileItemId) -> SyntaxNode { | 42 | fn file_item(source_item_id: SourceItemId) -> SyntaxNode { |
43 | type FileItemQuery; | 43 | type FileItemQuery; |
44 | storage dependencies; | 44 | storage dependencies; |
45 | use fn query_definitions::file_item; | 45 | use fn query_definitions::file_item; |
diff --git a/crates/ra_analysis/src/hir/mod.rs b/crates/ra_analysis/src/hir/mod.rs index aa416df20..9527cc33f 100644 --- a/crates/ra_analysis/src/hir/mod.rs +++ b/crates/ra_analysis/src/hir/mod.rs | |||
@@ -16,6 +16,7 @@ use std::ops::Index; | |||
16 | use ra_syntax::{SyntaxNodeRef, SyntaxNode}; | 16 | use ra_syntax::{SyntaxNodeRef, SyntaxNode}; |
17 | 17 | ||
18 | use crate::{ | 18 | use crate::{ |
19 | FileId, | ||
19 | hir::db::HirDatabase, | 20 | hir::db::HirDatabase, |
20 | loc2id::{DefId, DefLoc}, | 21 | loc2id::{DefId, DefLoc}, |
21 | Cancelable, | 22 | Cancelable, |
@@ -53,6 +54,12 @@ impl DefId { | |||
53 | /// it's OK to use it as a salsa key/value. | 54 | /// it's OK to use it as a salsa key/value. |
54 | pub(crate) type SourceFileItemId = Id<SyntaxNode>; | 55 | pub(crate) type SourceFileItemId = Id<SyntaxNode>; |
55 | 56 | ||
57 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
58 | pub(crate) struct SourceItemId { | ||
59 | file_id: FileId, | ||
60 | item_id: SourceFileItemId, | ||
61 | } | ||
62 | |||
56 | /// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. | 63 | /// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. |
57 | #[derive(Debug, PartialEq, Eq, Default)] | 64 | #[derive(Debug, PartialEq, Eq, Default)] |
58 | pub(crate) struct SourceFileItems { | 65 | pub(crate) struct SourceFileItems { |
diff --git a/crates/ra_analysis/src/hir/module/nameres.rs b/crates/ra_analysis/src/hir/module/nameres.rs index 9dc54f6c0..f22832eda 100644 --- a/crates/ra_analysis/src/hir/module/nameres.rs +++ b/crates/ra_analysis/src/hir/module/nameres.rs | |||
@@ -30,7 +30,7 @@ use crate::{ | |||
30 | Cancelable, FileId, | 30 | Cancelable, FileId, |
31 | loc2id::{DefId, DefLoc}, | 31 | loc2id::{DefId, DefLoc}, |
32 | hir::{ | 32 | hir::{ |
33 | SourceFileItemId, SourceFileItems, | 33 | SourceItemId, SourceFileItemId, SourceFileItems, |
34 | Path, PathKind, | 34 | Path, PathKind, |
35 | HirDatabase, | 35 | HirDatabase, |
36 | module::{ModuleId, ModuleTree}, | 36 | module::{ModuleId, ModuleTree}, |
@@ -99,7 +99,11 @@ pub(crate) struct NamedImport { | |||
99 | 99 | ||
100 | impl NamedImport { | 100 | impl NamedImport { |
101 | pub(crate) fn range(&self, db: &impl HirDatabase, file_id: FileId) -> TextRange { | 101 | pub(crate) fn range(&self, db: &impl HirDatabase, file_id: FileId) -> TextRange { |
102 | let syntax = db.file_item(file_id, self.file_item_id); | 102 | let source_item_id = SourceItemId { |
103 | file_id, | ||
104 | item_id: self.file_item_id, | ||
105 | }; | ||
106 | let syntax = db.file_item(source_item_id); | ||
103 | let offset = syntax.borrowed().range().start(); | 107 | let offset = syntax.borrowed().range().start(); |
104 | self.relative_range + offset | 108 | self.relative_range + offset |
105 | } | 109 | } |
@@ -247,8 +251,10 @@ where | |||
247 | continue; | 251 | continue; |
248 | } | 252 | } |
249 | let def_loc = DefLoc::Item { | 253 | let def_loc = DefLoc::Item { |
250 | file_id, | 254 | source_item_id: SourceItemId { |
251 | id: item.id, | 255 | file_id, |
256 | item_id: item.id, | ||
257 | }, | ||
252 | }; | 258 | }; |
253 | let def_id = self.db.id_maps().def_id(def_loc); | 259 | let def_id = self.db.id_maps().def_id(def_loc); |
254 | let resolution = Resolution { | 260 | let resolution = Resolution { |
diff --git a/crates/ra_analysis/src/hir/query_definitions.rs b/crates/ra_analysis/src/hir/query_definitions.rs index 53926cf16..ae292e964 100644 --- a/crates/ra_analysis/src/hir/query_definitions.rs +++ b/crates/ra_analysis/src/hir/query_definitions.rs | |||
@@ -12,7 +12,7 @@ use ra_syntax::{ | |||
12 | use crate::{ | 12 | use crate::{ |
13 | FileId, Cancelable, | 13 | FileId, Cancelable, |
14 | hir::{ | 14 | hir::{ |
15 | SourceFileItems, SourceFileItemId, | 15 | SourceFileItems, SourceItemId, |
16 | db::HirDatabase, | 16 | db::HirDatabase, |
17 | function::{FnId, FnScopes}, | 17 | function::{FnId, FnScopes}, |
18 | module::{ | 18 | module::{ |
@@ -52,12 +52,8 @@ pub(super) fn file_items(db: &impl HirDatabase, file_id: FileId) -> Arc<SourceFi | |||
52 | Arc::new(res) | 52 | Arc::new(res) |
53 | } | 53 | } |
54 | 54 | ||
55 | pub(super) fn file_item( | 55 | pub(super) fn file_item(db: &impl HirDatabase, source_item_id: SourceItemId) -> SyntaxNode { |
56 | db: &impl HirDatabase, | 56 | db.file_items(source_item_id.file_id)[source_item_id.item_id].clone() |
57 | file_id: FileId, | ||
58 | file_item_id: SourceFileItemId, | ||
59 | ) -> SyntaxNode { | ||
60 | db.file_items(file_id)[file_item_id].clone() | ||
61 | } | 57 | } |
62 | 58 | ||
63 | pub(crate) fn submodules( | 59 | pub(crate) fn submodules( |