Introduce SourceItemId

This commit is contained in:
Aleksey Kladov 2018-11-28 01:53:54 +03:00
parent 00df339c41
commit 9027a21f9a
5 changed files with 24 additions and 17 deletions

View File

@ -8,7 +8,7 @@ use ra_syntax::{
use crate::{ use crate::{
FileId, FileId,
db::SyntaxDatabase, db::SyntaxDatabase,
hir::{SourceFileItems, SourceFileItemId}, hir::{SourceFileItems, SourceItemId},
hir::query_definitions, hir::query_definitions,
hir::function::{FnId, FnScopes}, hir::function::{FnId, FnScopes},
hir::module::{ hir::module::{
@ -39,7 +39,7 @@ pub(crate) trait HirDatabase: SyntaxDatabase {
use fn query_definitions::file_items; use fn query_definitions::file_items;
} }
fn file_item(file_id: FileId, file_item_id: SourceFileItemId) -> SyntaxNode { fn file_item(source_item_id: SourceItemId) -> SyntaxNode {
type FileItemQuery; type FileItemQuery;
storage dependencies; storage dependencies;
use fn query_definitions::file_item; use fn query_definitions::file_item;

View File

@ -16,6 +16,7 @@ use std::ops::Index;
use ra_syntax::{SyntaxNodeRef, SyntaxNode}; use ra_syntax::{SyntaxNodeRef, SyntaxNode};
use crate::{ use crate::{
FileId,
hir::db::HirDatabase, hir::db::HirDatabase,
loc2id::{DefId, DefLoc}, loc2id::{DefId, DefLoc},
Cancelable, Cancelable,
@ -53,6 +54,12 @@ impl DefId {
/// it's OK to use it as a salsa key/value. /// it's OK to use it as a salsa key/value.
pub(crate) type SourceFileItemId = Id<SyntaxNode>; pub(crate) type SourceFileItemId = Id<SyntaxNode>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) struct SourceItemId {
file_id: FileId,
item_id: SourceFileItemId,
}
/// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. /// Maps item's `SyntaxNode`s to `SourceFileItemId` and back.
#[derive(Debug, PartialEq, Eq, Default)] #[derive(Debug, PartialEq, Eq, Default)]
pub(crate) struct SourceFileItems { pub(crate) struct SourceFileItems {

View File

@ -30,7 +30,7 @@ use crate::{
Cancelable, FileId, Cancelable, FileId,
loc2id::{DefId, DefLoc}, loc2id::{DefId, DefLoc},
hir::{ hir::{
SourceFileItemId, SourceFileItems, SourceItemId, SourceFileItemId, SourceFileItems,
Path, PathKind, Path, PathKind,
HirDatabase, HirDatabase,
module::{ModuleId, ModuleTree}, module::{ModuleId, ModuleTree},
@ -99,7 +99,11 @@ pub(crate) struct NamedImport {
impl NamedImport { impl NamedImport {
pub(crate) fn range(&self, db: &impl HirDatabase, file_id: FileId) -> TextRange { pub(crate) fn range(&self, db: &impl HirDatabase, file_id: FileId) -> TextRange {
let syntax = db.file_item(file_id, self.file_item_id); let source_item_id = SourceItemId {
file_id,
item_id: self.file_item_id,
};
let syntax = db.file_item(source_item_id);
let offset = syntax.borrowed().range().start(); let offset = syntax.borrowed().range().start();
self.relative_range + offset self.relative_range + offset
} }
@ -247,8 +251,10 @@ where
continue; continue;
} }
let def_loc = DefLoc::Item { let def_loc = DefLoc::Item {
file_id, source_item_id: SourceItemId {
id: item.id, file_id,
item_id: item.id,
},
}; };
let def_id = self.db.id_maps().def_id(def_loc); let def_id = self.db.id_maps().def_id(def_loc);
let resolution = Resolution { let resolution = Resolution {

View File

@ -12,7 +12,7 @@ use ra_syntax::{
use crate::{ use crate::{
FileId, Cancelable, FileId, Cancelable,
hir::{ hir::{
SourceFileItems, SourceFileItemId, SourceFileItems, SourceItemId,
db::HirDatabase, db::HirDatabase,
function::{FnId, FnScopes}, function::{FnId, FnScopes},
module::{ module::{
@ -52,12 +52,8 @@ pub(super) fn file_items(db: &impl HirDatabase, file_id: FileId) -> Arc<SourceFi
Arc::new(res) Arc::new(res)
} }
pub(super) fn file_item( pub(super) fn file_item(db: &impl HirDatabase, source_item_id: SourceItemId) -> SyntaxNode {
db: &impl HirDatabase, db.file_items(source_item_id.file_id)[source_item_id.item_id].clone()
file_id: FileId,
file_item_id: SourceFileItemId,
) -> SyntaxNode {
db.file_items(file_id)[file_item_id].clone()
} }
pub(crate) fn submodules( pub(crate) fn submodules(

View File

@ -8,8 +8,7 @@ use std::{
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use crate::{ use crate::{
FileId, hir::{SourceItemId, ModuleId},
hir::{SourceFileItemId, ModuleId},
syntax_ptr::SyntaxPtr, syntax_ptr::SyntaxPtr,
input::SourceRootId, input::SourceRootId,
}; };
@ -103,8 +102,7 @@ pub(crate) enum DefLoc {
source_root: SourceRootId, source_root: SourceRootId,
}, },
Item { Item {
file_id: FileId, source_item_id: SourceItemId,
id: SourceFileItemId,
}, },
} }