10 use base_db::{fixture::WithFixture, SourceDatabase};
11 use expect_test::{expect, Expect};
14 use crate::{db::DefDatabase, nameres::*, test_db::TestDB};
16 fn compute_crate_def_map(fixture: &str) -> Arc<CrateDefMap> {
17 let db = TestDB::with_files(fixture);
18 let krate = db.crate_graph().iter().next().unwrap();
19 db.crate_def_map(krate)
22 fn check(ra_fixture: &str, expect: Expect) {
23 let def_map = compute_crate_def_map(ra_fixture);
24 let actual = def_map.dump();
25 expect.assert_eq(&actual);
29 fn crate_def_map_smoke_test() {
35 use crate::foo::bar::E;
45 union U { to_be: bool, not_to_be: u8 }
77 fn crate_def_map_super_super() {
110 fn crate_def_map_fn_mod_same_name() {
132 mark::check!(bogus_paths);
160 use crate::foo::Baz as Foo;
182 use crate::foo::bar::{Baz, Quux};
217 pub use self::bar::Baz;
239 mark::check!(std_prelude);
242 //- /main.rs crate:main deps:test_crate
245 //- /lib.rs crate:test_crate
251 pub enum Foo { Bar, Baz };
262 fn can_import_enum_variant() {
263 mark::check!(can_import_enum_variant);
278 fn edition_2015_imports() {
281 //- /main.rs crate:main deps:other_crate edition:2015
290 use other_crate::FromLib;
292 //- /lib.rs crate:other_crate edition:2018
311 fn item_map_using_self() {
316 use crate::foo::bar::Baz::{self};
339 fn item_map_across_crates() {
342 //- /main.rs crate:main deps:test_crate
345 //- /lib.rs crate:test_crate
356 fn extern_crate_rename() {
359 //- /main.rs crate:main deps:alloc
360 extern crate alloc as alloc_crate;
365 use alloc_crate::Arc;
367 //- /lib.rs crate:alloc
382 fn extern_crate_rename_2015_edition() {
385 //- /main.rs crate:main deps:alloc edition:2015
386 extern crate alloc as alloc_crate;
391 use alloc_crate::Arc;
393 //- /lib.rs crate:alloc
408 fn reexport_across_crates() {
411 //- /main.rs crate:main deps:test_crate
414 //- /lib.rs crate:test_crate
429 fn values_dont_shadow_extern_crates() {
432 //- /main.rs crate:main deps:foo
436 //- /foo/lib.rs crate:foo
448 fn std_prelude_takes_precedence_above_core_prelude() {
451 //- /main.rs crate:main deps:core,std
454 //- /std.rs crate:std deps:core
456 pub use self::prelude::*;
459 pub use core::prelude::Bar;
462 //- /core.rs crate:core
464 pub use self::prelude::*;
481 //- /main.rs crate:main deps:std
484 //- /lib.rs crate:std
486 pub use self::prelude::*;
492 #[cfg(all(not(any()), feature = "foo", feature = "bar", opt = "42"))]
509 //- /main.rs crate:main deps:std
512 //- /lib.rs crate:std cfg:test,feature=foo,feature=bar,opt=42
514 pub use self::prelude::*;
520 #[cfg(all(not(any()), feature = "foo", feature = "bar", opt = "42"))]
534 fn infer_multiple_namespace() {
546 pub const T: () = ();
565 fn underscore_import() {
591 fn underscore_reexport() {
600 use crate::tr::PrivTr as _;
601 pub use crate::tr::PubTr as _;
623 fn underscore_pub_crate_reexport() {
624 mark::check!(upgrade_underscore_visibility);
627 //- /main.rs crate:main deps:lib
630 //- /lib.rs crate:lib
646 fn underscore_nontrait() {
653 pub const CONST: () = ();
655 use crate::m::{Struct as _, Enum as _, CONST as _};
670 fn underscore_name_conflict() {
695 fn cfg_the_entire_crate() {