use base_db::CrateId;
use hir_expand::{name::Name, AstId, MacroCallId};
+use itertools::Itertools;
use once_cell::sync::Lazy;
use profile::Count;
use rustc_hash::{FxHashMap, FxHashSet};
impl ItemScope {
pub fn entries<'a>(&'a self) -> impl Iterator<Item = (&'a Name, PerNs)> + 'a {
// FIXME: shadowing
- let keys: FxHashSet<_> = self
- .types
+ self.types
.keys()
.chain(self.values.keys())
.chain(self.macros.keys())
.chain(self.unresolved.iter())
- .collect();
-
- keys.into_iter().map(move |name| (name, self.get(name)))
+ .sorted()
+ .unique()
+ .map(move |name| (name, self.get(name)))
}
pub fn declarations(&self) -> impl Iterator<Item = ModuleDefId> + '_ {
// pub struct Baz;
// }
//
-// use foo::{Baz, Bar};
+// use foo::{Bar, Baz};
//
// fn qux(bar: Bar, baz: Baz) {}
// ```
pub fn f() {}
}
-use foo::{Baz, Bar, f};
+use foo::{Bar, Baz, f};
fn qux(bar: Bar, baz: Baz) {
f();
pub fn f() {}
}
-use foo::{Baz, Bar, f};
+use foo::{Bar, Baz, f};
fn qux(bar: Bar, baz: Baz) {
f();
}
}
-use foo::{bar::{Baz, Bar, f}, baz::*};
+use foo::{bar::{Bar, Baz, f}, baz::*};
fn qux(bar: Bar, baz: Baz) {
f();
use foo::{
bar::{*, f},
- baz::{g, qux::{q, h}}
+ baz::{g, qux::{h, q}}
};
fn qux(bar: Bar, baz: Baz) {
pub struct Baz;
}
-use foo::{Baz, Bar};
+use foo::{Bar, Baz};
fn qux(bar: Bar, baz: Baz) {}
"#####,
st S []
st &mut S [type]
st S []
- fn main() []
fn foo(…) []
+ fn main() []
"#]],
);
check_relevance(
lc s [type+name+local]
st S [type]
st S []
- fn main() []
fn foo(…) []
+ fn main() []
"#]],
);
check_relevance(
lc ssss [type+local]
st S [type]
st S []
- fn main() []
fn foo(…) []
+ fn main() []
"#]],
);
}
lc &t [type+local]
st S []
st &S [type]
- st T []
st S []
- fn main() []
+ st T []
fn foo(…) []
+ fn main() []
md core []
"#]],
)
lc &mut t [type+local]
st S []
st &mut S [type]
- st T []
st S []
- fn main() []
+ st T []
fn foo(…) []
+ fn main() []
md core []
"#]],
)
expect![[r#"
st S []
st &S [type]
- st T []
st S []
- fn main() []
+ st T []
fn bar() []
fn &bar() [type]
fn foo(…) []
+ fn main() []
md core []
"#]],
)
ev Foo::B [type_could_unify]
fn foo() []
en Foo []
- fn baz() []
fn bar() []
+ fn baz() []
"#]],
);
}
}
"#,
expect![[r#"
- md std []
st Buffer []
fn f() []
+ md std []
tt BufRead (use std::io::BufRead) [requires_import]
st BufReader (use std::io::BufReader) [requires_import]
st BufWriter (use std::io::BufWriter) [requires_import]