From 16cdd126b61086513c1b6049a80a7d64fc1d0f60 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 27 Nov 2018 13:58:42 +0300 Subject: add file items query --- crates/ra_analysis/src/descriptors/mod.rs | 17 +++++++++++++++-- crates/ra_analysis/src/descriptors/module/nameres.rs | 17 ++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) (limited to 'crates/ra_analysis/src/descriptors') diff --git a/crates/ra_analysis/src/descriptors/mod.rs b/crates/ra_analysis/src/descriptors/mod.rs index 97750ea64..f6b9102e7 100644 --- a/crates/ra_analysis/src/descriptors/mod.rs +++ b/crates/ra_analysis/src/descriptors/mod.rs @@ -6,13 +6,14 @@ use std::sync::Arc; use ra_syntax::{ ast::{self, FnDefNode, AstNode}, - TextRange, + TextRange, SyntaxNode, }; use crate::{ + FileId, db::SyntaxDatabase, descriptors::function::{resolve_local_name, FnId, FnScopes}, - descriptors::module::{ModuleId, ModuleTree, ModuleSource, nameres::{ItemMap, InputModuleItems}}, + descriptors::module::{ModuleId, ModuleTree, ModuleSource, nameres::{ItemMap, InputModuleItems, FileItemId}}, input::SourceRootId, loc2id::IdDatabase, syntax_ptr::LocalSyntaxPtr, @@ -28,6 +29,18 @@ salsa::query_group! { use fn function::imp::fn_scopes; } + fn _file_items(file_id: FileId) -> Arc> { + type FileItemsQuery; + storage volatile; + use fn module::nameres::file_items; + } + + fn _file_item(file_id: FileId, file_item_id: FileItemId) -> SyntaxNode { + type FileItemQuery; + storage volatile; + use fn module::nameres::file_item; + } + fn _input_module_items(source_root_id: SourceRootId, module_id: ModuleId) -> Cancelable> { type InputModuleItemsQuery; use fn module::nameres::input_module_items; diff --git a/crates/ra_analysis/src/descriptors/module/nameres.rs b/crates/ra_analysis/src/descriptors/module/nameres.rs index 648ec5e43..6251f5b86 100644 --- a/crates/ra_analysis/src/descriptors/module/nameres.rs +++ b/crates/ra_analysis/src/descriptors/module/nameres.rs @@ -22,12 +22,13 @@ use std::{ use rustc_hash::FxHashMap; use ra_syntax::{ + SyntaxNode, SmolStr, SyntaxKind::{self, *}, ast::{self, ModuleItemOwner} }; use crate::{ - Cancelable, + Cancelable, FileId, loc2id::{DefId, DefLoc}, descriptors::{ Path, PathKind, @@ -38,6 +39,20 @@ use crate::{ input::SourceRootId, }; + +#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug)] +pub(crate) struct FileItemId(u32); + +pub(crate) fn file_items(db: &impl DescriptorDatabase, file_id: FileId) -> Arc> { + unimplemented!() +} + +pub(crate) fn file_item(db: &impl DescriptorDatabase, file_id: FileId, file_item_id: FileItemId) -> SyntaxNode { + let items = db._file_items(file_id); + let idx = file_item_id.0 as usize; + items[idx].clone() +} + /// Item map is the result of the name resolution. Item map contains, for each /// module, the set of visible items. #[derive(Default, Debug, PartialEq, Eq)] -- cgit v1.2.3