mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-01 20:31:59 +00:00
Merge pull request #18967 from Veykril/push-pwonkmwqmmol
Properly record meaningful imports as re-exports in symbol index
This commit is contained in:
commit
93a5846784
25 changed files with 382 additions and 279 deletions
|
|
@ -244,7 +244,7 @@ bitflags::bitflags! {
|
|||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct TraitData {
|
||||
pub name: Name,
|
||||
pub items: Vec<(Name, AssocItemId)>,
|
||||
pub items: Box<[(Name, AssocItemId)]>,
|
||||
pub flags: TraitFlags,
|
||||
pub visibility: RawVisibility,
|
||||
// box it as the vec is usually empty anyways
|
||||
|
|
@ -360,7 +360,7 @@ impl TraitAliasData {
|
|||
pub struct ImplData {
|
||||
pub target_trait: Option<TraitRef>,
|
||||
pub self_ty: TypeRefId,
|
||||
pub items: Box<[AssocItemId]>,
|
||||
pub items: Box<[(Name, AssocItemId)]>,
|
||||
pub is_negative: bool,
|
||||
pub is_unsafe: bool,
|
||||
// box it as the vec is usually empty anyways
|
||||
|
|
@ -393,7 +393,6 @@ impl ImplData {
|
|||
collector.collect(&item_tree, tree_id.tree_id(), &impl_def.items);
|
||||
|
||||
let (items, macro_calls, diagnostics) = collector.finish();
|
||||
let items = items.into_iter().map(|(_, item)| item).collect();
|
||||
|
||||
(
|
||||
Arc::new(ImplData {
|
||||
|
|
@ -648,12 +647,12 @@ impl<'a> AssocItemCollector<'a> {
|
|||
fn finish(
|
||||
self,
|
||||
) -> (
|
||||
Vec<(Name, AssocItemId)>,
|
||||
Box<[(Name, AssocItemId)]>,
|
||||
Option<Box<Vec<(AstId<ast::Item>, MacroCallId)>>>,
|
||||
Vec<DefDiagnostic>,
|
||||
) {
|
||||
(
|
||||
self.items,
|
||||
self.items.into_boxed_slice(),
|
||||
if self.macro_calls.is_empty() { None } else { Some(Box::new(self.macro_calls)) },
|
||||
self.diagnostics,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -162,6 +162,20 @@ impl ItemScope {
|
|||
.map(move |name| (name, self.get(name)))
|
||||
}
|
||||
|
||||
pub fn values(&self) -> impl Iterator<Item = (&Name, Item<ModuleDefId, ImportId>)> + '_ {
|
||||
self.values.iter().map(|(n, &i)| (n, i))
|
||||
}
|
||||
|
||||
pub fn types(
|
||||
&self,
|
||||
) -> impl Iterator<Item = (&Name, Item<ModuleDefId, ImportOrExternCrate>)> + '_ {
|
||||
self.types.iter().map(|(n, &i)| (n, i))
|
||||
}
|
||||
|
||||
pub fn macros(&self) -> impl Iterator<Item = (&Name, Item<MacroId, ImportId>)> + '_ {
|
||||
self.macros.iter().map(|(n, &i)| (n, i))
|
||||
}
|
||||
|
||||
pub fn imports(&self) -> impl Iterator<Item = ImportId> + '_ {
|
||||
self.use_imports_types
|
||||
.keys()
|
||||
|
|
@ -263,11 +277,6 @@ impl ItemScope {
|
|||
self.unnamed_consts.iter().copied()
|
||||
}
|
||||
|
||||
/// Iterate over all module scoped macros
|
||||
pub(crate) fn macros(&self) -> impl Iterator<Item = (&Name, MacroId)> + '_ {
|
||||
self.entries().filter_map(|(name, def)| def.take_macros().map(|macro_| (name, macro_)))
|
||||
}
|
||||
|
||||
/// Iterate over all legacy textual scoped macros visible at the end of the module
|
||||
pub fn legacy_macros(&self) -> impl Iterator<Item = (&Name, &[MacroId])> + '_ {
|
||||
self.legacy_macros.iter().map(|(name, def)| (name, &**def))
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ impl LangItems {
|
|||
for (_, module_data) in crate_def_map.modules() {
|
||||
for impl_def in module_data.scope.impls() {
|
||||
lang_items.collect_lang_item(db, impl_def, LangItemTarget::ImplDef);
|
||||
for assoc in db.impl_data(impl_def).items.iter().copied() {
|
||||
for &(_, assoc) in db.impl_data(impl_def).items.iter() {
|
||||
match assoc {
|
||||
AssocItemId::FunctionId(f) => {
|
||||
lang_items.collect_lang_item(db, f, LangItemTarget::Function)
|
||||
|
|
|
|||
|
|
@ -502,7 +502,7 @@ impl ModuleId {
|
|||
}
|
||||
|
||||
/// Whether this module represents the crate root module
|
||||
fn is_crate_root(&self) -> bool {
|
||||
pub fn is_crate_root(&self) -> bool {
|
||||
self.local_id == DefMap::ROOT && self.block.is_none()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -717,8 +717,8 @@ impl DefCollector<'_> {
|
|||
}
|
||||
}
|
||||
None => {
|
||||
for (name, def) in root_scope.macros() {
|
||||
self.def_map.macro_use_prelude.insert(name.clone(), (def, extern_crate));
|
||||
for (name, it) in root_scope.macros() {
|
||||
self.def_map.macro_use_prelude.insert(name.clone(), (it.def, extern_crate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -240,12 +240,12 @@ impl Visibility {
|
|||
|
||||
if a_ancestors.any(|m| m == mod_b.local_id) {
|
||||
// B is above A
|
||||
return Some(Visibility::Module(mod_a, expl_b));
|
||||
return Some(Visibility::Module(mod_a, expl_a));
|
||||
}
|
||||
|
||||
if b_ancestors.any(|m| m == mod_a.local_id) {
|
||||
// A is above B
|
||||
return Some(Visibility::Module(mod_b, expl_a));
|
||||
return Some(Visibility::Module(mod_b, expl_b));
|
||||
}
|
||||
|
||||
None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue