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 db = TestDB::with_files(ra_fixture);
24 let krate = db.crate_graph().iter().next().unwrap();
25 let actual = db.crate_def_map(krate).dump();
26 expect.assert_eq(&actual);
30 fn crate_def_map_smoke_test() {
36 use crate::foo::bar::E;
46 union U { to_be: bool, not_to_be: u8 }
78 fn crate_def_map_super_super() {
111 fn crate_def_map_fn_mod_same_name() {
133 mark::check!(bogus_paths);
161 use crate::foo::Baz as Foo;
183 use crate::foo::bar::{Baz, Quux};
218 pub use self::bar::Baz;
240 mark::check!(std_prelude);
243 //- /main.rs crate:main deps:test_crate
246 //- /lib.rs crate:test_crate
252 pub enum Foo { Bar, Baz };
263 fn can_import_enum_variant() {
264 mark::check!(can_import_enum_variant);
279 fn edition_2015_imports() {
282 //- /main.rs crate:main deps:other_crate edition:2015
291 use other_crate::FromLib;
293 //- /lib.rs crate:other_crate edition:2018
312 fn item_map_using_self() {
317 use crate::foo::bar::Baz::{self};
340 fn item_map_across_crates() {
343 //- /main.rs crate:main deps:test_crate
346 //- /lib.rs crate:test_crate
357 fn extern_crate_rename() {
360 //- /main.rs crate:main deps:alloc
361 extern crate alloc as alloc_crate;
366 use alloc_crate::Arc;
368 //- /lib.rs crate:alloc
383 fn extern_crate_rename_2015_edition() {
386 //- /main.rs crate:main deps:alloc edition:2015
387 extern crate alloc as alloc_crate;
392 use alloc_crate::Arc;
394 //- /lib.rs crate:alloc
409 fn reexport_across_crates() {
412 //- /main.rs crate:main deps:test_crate
415 //- /lib.rs crate:test_crate
430 fn values_dont_shadow_extern_crates() {
433 //- /main.rs crate:main deps:foo
437 //- /foo/lib.rs crate:foo
449 fn std_prelude_takes_precedence_above_core_prelude() {
452 //- /main.rs crate:main deps:core,std
455 //- /std.rs crate:std deps:core
457 pub use self::prelude::*;
460 pub use core::prelude::Bar;
463 //- /core.rs crate:core
465 pub use self::prelude::*;
482 //- /main.rs crate:main deps:std
485 //- /lib.rs crate:std
487 pub use self::prelude::*;
493 #[cfg(all(not(any()), feature = "foo", feature = "bar", opt = "42"))]
510 //- /main.rs crate:main deps:std
513 //- /lib.rs crate:std cfg:test,feature=foo,feature=bar,opt=42
515 pub use self::prelude::*;
521 #[cfg(all(not(any()), feature = "foo", feature = "bar", opt = "42"))]
535 fn infer_multiple_namespace() {
547 pub const T: () = ();
566 fn underscore_import() {
592 fn underscore_reexport() {
601 use crate::tr::PrivTr as _;
602 pub use crate::tr::PubTr as _;
624 fn underscore_pub_crate_reexport() {
625 mark::check!(upgrade_underscore_visibility);
628 //- /main.rs crate:main deps:lib
631 //- /lib.rs crate:lib
647 fn underscore_nontrait() {
654 pub const CONST: () = ();
656 use crate::m::{Struct as _, Enum as _, CONST as _};
671 fn underscore_name_conflict() {