Introduce SourceItemId
This commit is contained in:
parent
00df339c41
commit
9027a21f9a
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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(
|
||||
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user