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::{
FileId,
db::SyntaxDatabase,
hir::{SourceFileItems, SourceFileItemId},
hir::{SourceFileItems, SourceItemId},
hir::query_definitions,
hir::function::{FnId, FnScopes},
hir::module::{
@ -39,7 +39,7 @@ pub(crate) trait HirDatabase: SyntaxDatabase {
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;
storage dependencies;
use fn query_definitions::file_item;

View File

@ -16,6 +16,7 @@ use std::ops::Index;
use ra_syntax::{SyntaxNodeRef, SyntaxNode};
use crate::{
FileId,
hir::db::HirDatabase,
loc2id::{DefId, DefLoc},
Cancelable,
@ -53,6 +54,12 @@ impl DefId {
/// it's OK to use it as a salsa key/value.
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.
#[derive(Debug, PartialEq, Eq, Default)]
pub(crate) struct SourceFileItems {

View File

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

View File

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

View File

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