Skip to content

Commit ecb6d07

Browse files
committed
Add currently unused UseId variants
1 parent f86f6a8 commit ecb6d07

File tree

9 files changed

+34
-4
lines changed

9 files changed

+34
-4
lines changed

crates/hir-def/src/attr.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ impl AttrsWithOwner {
485485
},
486486
AttrDefId::ExternBlockId(it) => attrs_from_item_tree_loc(db, it),
487487
AttrDefId::ExternCrateId(it) => attrs_from_item_tree_loc(db, it),
488+
AttrDefId::UseId(it) => attrs_from_item_tree_loc(db, it),
488489
};
489490

490491
let attrs = raw_attrs.filter(db.upcast(), def.krate(db));
@@ -570,6 +571,7 @@ impl AttrsWithOwner {
570571
},
571572
AttrDefId::ExternBlockId(id) => any_has_attrs(db, id),
572573
AttrDefId::ExternCrateId(id) => any_has_attrs(db, id),
574+
AttrDefId::UseId(id) => any_has_attrs(db, id),
573575
};
574576

575577
AttrSourceMap::new(owner.as_ref().map(|node| node as &dyn HasAttrs))

crates/hir-def/src/child_by_source.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::{
1515
nameres::DefMap,
1616
src::{HasChildSource, HasSource},
1717
AdtId, AssocItemId, DefWithBodyId, EnumId, EnumVariantId, ExternCrateId, FieldId, ImplId,
18-
Lookup, MacroId, ModuleDefId, ModuleId, TraitId, VariantId,
18+
Lookup, MacroId, ModuleDefId, ModuleId, TraitId, UseId, VariantId,
1919
};
2020

2121
pub trait ChildBySource {
@@ -92,6 +92,7 @@ impl ChildBySource for ItemScope {
9292
self.declarations().for_each(|item| add_module_def(db, res, file_id, item));
9393
self.impls().for_each(|imp| add_impl(db, res, file_id, imp));
9494
self.extern_crate_decls().for_each(|ext| add_extern_crate(db, res, file_id, ext));
95+
self.use_decls().for_each(|ext| add_use(db, res, file_id, ext));
9596
self.unnamed_consts().for_each(|konst| {
9697
let loc = konst.lookup(db);
9798
if loc.id.file_id() == file_id {
@@ -179,6 +180,12 @@ impl ChildBySource for ItemScope {
179180
map[keys::EXTERN_CRATE].insert(loc.source(db).value, ext)
180181
}
181182
}
183+
fn add_use(db: &dyn DefDatabase, map: &mut DynMap, file_id: HirFileId, ext: UseId) {
184+
let loc = ext.lookup(db);
185+
if loc.id.file_id() == file_id {
186+
map[keys::USE].insert(loc.source(db).value, ext)
187+
}
188+
}
182189
}
183190
}
184191

crates/hir-def/src/dyn_map/keys.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
dyn_map::{DynMap, Policy},
1111
ConstId, EnumId, EnumVariantId, ExternCrateId, FieldId, FunctionId, ImplId, LifetimeParamId,
1212
Macro2Id, MacroRulesId, ProcMacroId, StaticId, StructId, TraitAliasId, TraitId, TypeAliasId,
13-
TypeOrConstParamId, UnionId,
13+
TypeOrConstParamId, UnionId, UseId,
1414
};
1515

1616
pub type Key<K, V> = crate::dyn_map::Key<K, V, AstPtrPolicy<K, V>>;
@@ -26,6 +26,7 @@ pub const STRUCT: Key<ast::Struct, StructId> = Key::new();
2626
pub const UNION: Key<ast::Union, UnionId> = Key::new();
2727
pub const ENUM: Key<ast::Enum, EnumId> = Key::new();
2828
pub const EXTERN_CRATE: Key<ast::ExternCrate, ExternCrateId> = Key::new();
29+
pub const USE: Key<ast::Use, UseId> = Key::new();
2930

3031
pub const VARIANT: Key<ast::Variant, EnumVariantId> = Key::new();
3132
pub const TUPLE_FIELD: Key<ast::TupleField, FieldId> = Key::new();

crates/hir-def/src/item_scope.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use syntax::ast;
1616
use crate::{
1717
db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, ConstId,
1818
ExternCrateId, HasModule, ImplId, LocalModuleId, MacroId, ModuleDefId, ModuleId, TraitId,
19+
UseId,
1920
};
2021

2122
#[derive(Copy, Clone, Debug)]
@@ -119,6 +120,11 @@ impl ItemScope {
119120
self.extern_crate_decls.iter().copied()
120121
}
121122

123+
pub fn use_decls(&self) -> impl Iterator<Item = UseId> + ExactSizeIterator + '_ {
124+
// FIXME: to be implemented
125+
std::iter::empty()
126+
}
127+
122128
pub fn impls(&self) -> impl Iterator<Item = ImplId> + ExactSizeIterator + '_ {
123129
self.impls.iter().copied()
124130
}

crates/hir-def/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,7 @@ pub enum AttrDefId {
842842
GenericParamId(GenericParamId),
843843
ExternBlockId(ExternBlockId),
844844
ExternCrateId(ExternCrateId),
845+
UseId(UseId),
845846
}
846847

847848
impl_from!(
@@ -1079,6 +1080,7 @@ impl AttrDefId {
10791080
}
10801081
AttrDefId::MacroId(it) => it.module(db).krate,
10811082
AttrDefId::ExternCrateId(it) => it.lookup(db).container.krate,
1083+
AttrDefId::UseId(it) => it.lookup(db).container.krate,
10821084
}
10831085
}
10841086
}

crates/hir-def/src/resolver.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::{
2525
EnumVariantId, ExternBlockId, ExternCrateId, FunctionId, GenericDefId, GenericParamId,
2626
HasModule, ImplId, ItemContainerId, LifetimeParamId, LocalModuleId, Lookup, Macro2Id, MacroId,
2727
MacroRulesId, ModuleDefId, ModuleId, ProcMacroId, StaticId, StructId, TraitAliasId, TraitId,
28-
TypeAliasId, TypeOrConstParamId, TypeOwnerId, TypeParamId, VariantId,
28+
TypeAliasId, TypeOrConstParamId, TypeOwnerId, TypeParamId, UseId, VariantId,
2929
};
3030

3131
#[derive(Debug, Clone)]
@@ -1024,6 +1024,12 @@ impl HasResolver for ExternCrateId {
10241024
}
10251025
}
10261026

1027+
impl HasResolver for UseId {
1028+
fn resolver(self, db: &dyn DefDatabase) -> Resolver {
1029+
self.lookup(db).container.resolver(db)
1030+
}
1031+
}
1032+
10271033
impl HasResolver for TypeOwnerId {
10281034
fn resolver(self, db: &dyn DefDatabase) -> Resolver {
10291035
match self {

crates/hir-ty/src/diagnostics/decl_check.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ impl<'a> DeclValidator<'a> {
176176
AttrDefId::ImplId(iid) => Some(iid.lookup(self.db.upcast()).container.into()),
177177
AttrDefId::ExternBlockId(id) => Some(id.lookup(self.db.upcast()).container.into()),
178178
AttrDefId::ExternCrateId(id) => Some(id.lookup(self.db.upcast()).container.into()),
179+
AttrDefId::UseId(id) => Some(id.lookup(self.db.upcast()).container.into()),
179180
// These warnings should not explore macro definitions at all
180181
AttrDefId::MacroId(_) => None,
181182
AttrDefId::AdtId(aid) => match aid {

crates/hir/src/attrs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ fn resolve_doc_path(
173173
AttrDefId::TypeAliasId(it) => it.resolver(db.upcast()),
174174
AttrDefId::ImplId(it) => it.resolver(db.upcast()),
175175
AttrDefId::ExternBlockId(it) => it.resolver(db.upcast()),
176+
AttrDefId::UseId(it) => it.resolver(db.upcast()),
176177
AttrDefId::MacroId(it) => it.resolver(db.upcast()),
177178
AttrDefId::ExternCrateId(it) => it.resolver(db.upcast()),
178179
AttrDefId::GenericParamId(it) => match it {

crates/hir/src/semantics/source_to_def.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ use hir_def::{
9595
hir::{BindingId, LabelId},
9696
AdtId, ConstId, ConstParamId, DefWithBodyId, EnumId, EnumVariantId, ExternCrateId, FieldId,
9797
FunctionId, GenericDefId, GenericParamId, ImplId, LifetimeParamId, MacroId, ModuleId, StaticId,
98-
StructId, TraitAliasId, TraitId, TypeAliasId, TypeParamId, UnionId, VariantId,
98+
StructId, TraitAliasId, TraitId, TypeAliasId, TypeParamId, UnionId, UseId, VariantId,
9999
};
100100
use hir_expand::{attrs::AttrId, name::AsName, HirFileId, MacroCallId};
101101
use rustc_hash::FxHashMap;
@@ -209,6 +209,10 @@ impl SourceToDefCtx<'_, '_> {
209209
) -> Option<ExternCrateId> {
210210
self.to_def(src, keys::EXTERN_CRATE)
211211
}
212+
#[allow(dead_code)]
213+
pub(super) fn use_to_def(&mut self, src: InFile<ast::Use>) -> Option<UseId> {
214+
self.to_def(src, keys::USE)
215+
}
212216
pub(super) fn adt_to_def(
213217
&mut self,
214218
InFile { file_id, value }: InFile<ast::Adt>,

0 commit comments

Comments
 (0)