Move ImportId

This commit is contained in:
Aleksey Kladov 2019-11-23 16:49:05 +03:00
parent 338ff052c2
commit dd5c2dc5bf
5 changed files with 26 additions and 28 deletions

View file

@ -9,11 +9,11 @@ use hir_def::{
body::scope::ExprScopes, body::scope::ExprScopes,
builtin_type::BuiltinType, builtin_type::BuiltinType,
docs::Documentation, docs::Documentation,
nameres::{per_ns::PerNs, raw::ImportId}, nameres::per_ns::PerNs,
resolver::{HasResolver, TypeNs}, resolver::{HasResolver, TypeNs},
type_ref::TypeRef, type_ref::TypeRef,
ContainerId, CrateModuleId, HasModule, ImplId, LocalEnumVariantId, LocalStructFieldId, Lookup, ContainerId, CrateModuleId, HasModule, ImplId, LocalEnumVariantId, LocalImportId,
ModuleId, UnionId, LocalStructFieldId, Lookup, ModuleId, UnionId,
}; };
use hir_expand::{ use hir_expand::{
diagnostics::DiagnosticSink, diagnostics::DiagnosticSink,
@ -229,7 +229,7 @@ impl Module {
pub struct Import { pub struct Import {
pub(crate) parent: Module, pub(crate) parent: Module,
pub(crate) id: ImportId, pub(crate) id: LocalImportId,
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]

View file

@ -99,6 +99,10 @@ impl ModuleSource {
} }
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LocalImportId(RawId);
impl_arena_id!(LocalImportId);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ModuleId { pub struct ModuleId {
pub krate: CrateId, pub krate: CrateId,

View file

@ -72,11 +72,9 @@ use rustc_hash::{FxHashMap, FxHashSet};
use crate::{ use crate::{
builtin_type::BuiltinType, builtin_type::BuiltinType,
db::DefDatabase, db::DefDatabase,
nameres::{ nameres::{diagnostics::DefDiagnostic, path_resolution::ResolveMode, per_ns::PerNs},
diagnostics::DefDiagnostic, path_resolution::ResolveMode, per_ns::PerNs, raw::ImportId,
},
path::Path, path::Path,
AstId, CrateModuleId, FunctionId, ImplId, ModuleDefId, ModuleId, TraitId, AstId, CrateModuleId, FunctionId, ImplId, LocalImportId, ModuleDefId, ModuleId, TraitId,
}; };
/// Contains all top-level defs from a macro-expanded crate /// Contains all top-level defs from a macro-expanded crate
@ -213,7 +211,7 @@ pub struct Resolution {
/// None for unresolved /// None for unresolved
pub def: PerNs, pub def: PerNs,
/// ident by which this is imported into local scope. /// ident by which this is imported into local scope.
pub import: Option<ImportId>, pub import: Option<LocalImportId>,
} }
impl CrateDefMap { impl CrateDefMap {

View file

@ -20,8 +20,8 @@ use crate::{
}, },
path::{Path, PathKind}, path::{Path, PathKind},
AdtId, AstId, AstItemDef, ConstLoc, ContainerId, CrateModuleId, EnumId, EnumVariantId, AdtId, AstId, AstItemDef, ConstLoc, ContainerId, CrateModuleId, EnumId, EnumVariantId,
FunctionLoc, ImplId, Intern, LocationCtx, ModuleDefId, ModuleId, StaticId, StructId, FunctionLoc, ImplId, Intern, LocalImportId, LocationCtx, ModuleDefId, ModuleId, StaticId,
StructOrUnionId, TraitId, TypeAliasLoc, UnionId, StructId, StructOrUnionId, TraitId, TypeAliasLoc, UnionId,
}; };
pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> CrateDefMap { pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> CrateDefMap {
@ -94,8 +94,8 @@ impl MacroStackMonitor {
struct DefCollector<'a, DB> { struct DefCollector<'a, DB> {
db: &'a DB, db: &'a DB,
def_map: CrateDefMap, def_map: CrateDefMap,
glob_imports: FxHashMap<CrateModuleId, Vec<(CrateModuleId, raw::ImportId)>>, glob_imports: FxHashMap<CrateModuleId, Vec<(CrateModuleId, LocalImportId)>>,
unresolved_imports: Vec<(CrateModuleId, raw::ImportId, raw::ImportData)>, unresolved_imports: Vec<(CrateModuleId, LocalImportId, raw::ImportData)>,
unexpanded_macros: Vec<(CrateModuleId, AstId<ast::MacroCall>, Path)>, unexpanded_macros: Vec<(CrateModuleId, AstId<ast::MacroCall>, Path)>,
mod_dirs: FxHashMap<CrateModuleId, ModDir>, mod_dirs: FxHashMap<CrateModuleId, ModDir>,
@ -293,7 +293,7 @@ where
&mut self, &mut self,
module_id: CrateModuleId, module_id: CrateModuleId,
def: PerNs, def: PerNs,
import_id: raw::ImportId, import_id: LocalImportId,
import: &raw::ImportData, import: &raw::ImportData,
) { ) {
if import.is_glob { if import.is_glob {
@ -388,7 +388,7 @@ where
fn update( fn update(
&mut self, &mut self,
module_id: CrateModuleId, module_id: CrateModuleId,
import: Option<raw::ImportId>, import: Option<LocalImportId>,
resolutions: &[(Name, Resolution)], resolutions: &[(Name, Resolution)],
) { ) {
self.update_recursive(module_id, import, resolutions, 0) self.update_recursive(module_id, import, resolutions, 0)
@ -397,7 +397,7 @@ where
fn update_recursive( fn update_recursive(
&mut self, &mut self,
module_id: CrateModuleId, module_id: CrateModuleId,
import: Option<raw::ImportId>, import: Option<LocalImportId>,
resolutions: &[(Name, Resolution)], resolutions: &[(Name, Resolution)],
depth: usize, depth: usize,
) { ) {

View file

@ -20,7 +20,7 @@ use crate::{
attr::{Attr, Attrs}, attr::{Attr, Attrs},
db::DefDatabase, db::DefDatabase,
path::Path, path::Path,
FileAstId, HirFileId, ModuleSource, Source, FileAstId, HirFileId, LocalImportId, ModuleSource, Source,
}; };
/// `RawItems` is a set of top-level items in a file (except for impls). /// `RawItems` is a set of top-level items in a file (except for impls).
@ -30,7 +30,7 @@ use crate::{
#[derive(Debug, Default, PartialEq, Eq)] #[derive(Debug, Default, PartialEq, Eq)]
pub struct RawItems { pub struct RawItems {
modules: Arena<Module, ModuleData>, modules: Arena<Module, ModuleData>,
imports: Arena<ImportId, ImportData>, imports: Arena<LocalImportId, ImportData>,
defs: Arena<Def, DefData>, defs: Arena<Def, DefData>,
macros: Arena<Macro, MacroData>, macros: Arena<Macro, MacroData>,
impls: Arena<Impl, ImplData>, impls: Arena<Impl, ImplData>,
@ -40,7 +40,7 @@ pub struct RawItems {
#[derive(Debug, Default, PartialEq, Eq)] #[derive(Debug, Default, PartialEq, Eq)]
pub struct ImportSourceMap { pub struct ImportSourceMap {
map: ArenaMap<ImportId, ImportSourcePtr>, map: ArenaMap<LocalImportId, ImportSourcePtr>,
} }
type ImportSourcePtr = Either<AstPtr<ast::UseTree>, AstPtr<ast::ExternCrateItem>>; type ImportSourcePtr = Either<AstPtr<ast::UseTree>, AstPtr<ast::ExternCrateItem>>;
@ -51,11 +51,11 @@ fn to_node(ptr: ImportSourcePtr, file: &SourceFile) -> ImportSource {
} }
impl ImportSourceMap { impl ImportSourceMap {
fn insert(&mut self, import: ImportId, ptr: ImportSourcePtr) { fn insert(&mut self, import: LocalImportId, ptr: ImportSourcePtr) {
self.map.insert(import, ptr) self.map.insert(import, ptr)
} }
pub fn get(&self, source: &ModuleSource, import: ImportId) -> ImportSource { pub fn get(&self, source: &ModuleSource, import: LocalImportId) -> ImportSource {
let file = match source { let file = match source {
ModuleSource::SourceFile(file) => file.clone(), ModuleSource::SourceFile(file) => file.clone(),
ModuleSource::Module(m) => m.syntax().ancestors().find_map(SourceFile::cast).unwrap(), ModuleSource::Module(m) => m.syntax().ancestors().find_map(SourceFile::cast).unwrap(),
@ -106,9 +106,9 @@ impl Index<Module> for RawItems {
} }
} }
impl Index<ImportId> for RawItems { impl Index<LocalImportId> for RawItems {
type Output = ImportData; type Output = ImportData;
fn index(&self, idx: ImportId) -> &ImportData { fn index(&self, idx: LocalImportId) -> &ImportData {
&self.imports[idx] &self.imports[idx]
} }
} }
@ -143,7 +143,7 @@ pub(super) struct RawItem {
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub(super) enum RawItemKind { pub(super) enum RawItemKind {
Module(Module), Module(Module),
Import(ImportId), Import(LocalImportId),
Def(Def), Def(Def),
Macro(Macro), Macro(Macro),
Impl(Impl), Impl(Impl),
@ -159,10 +159,6 @@ pub(super) enum ModuleData {
Definition { name: Name, ast_id: FileAstId<ast::Module>, items: Vec<RawItem> }, Definition { name: Name, ast_id: FileAstId<ast::Module>, items: Vec<RawItem> },
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ImportId(RawId);
impl_arena_id!(ImportId);
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct ImportData { pub struct ImportData {
pub(super) path: Path, pub(super) path: Path,