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