From e14f5cfff04942f45a4af3b45152df9672b3458a Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:13:12 +0200 Subject: Move out and rewrite UseTree completion tests --- crates/ide_completion/src/tests/use_tree.rs | 261 ++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 crates/ide_completion/src/tests/use_tree.rs (limited to 'crates/ide_completion/src/tests/use_tree.rs') diff --git a/crates/ide_completion/src/tests/use_tree.rs b/crates/ide_completion/src/tests/use_tree.rs new file mode 100644 index 000000000..156ca244d --- /dev/null +++ b/crates/ide_completion/src/tests/use_tree.rs @@ -0,0 +1,261 @@ +use expect_test::{expect, Expect}; + +use crate::tests::completion_list; + +fn check(ra_fixture: &str, expect: Expect) { + let actual = completion_list(ra_fixture); + expect.assert_eq(&actual) +} + +#[test] +fn use_tree_start() { + cov_mark::check!(only_completes_modules_in_import); + check( + r#" +//- /lib.rs crate:main deps:other_crate +use f$0 + +struct Foo; +mod foo {} +//- /other_crate/lib.rs crate:other_crate +// nothing here +"#, + // FIXME: self in this case should also get the colons + expect![[r#" + kw crate:: + kw self + kw super:: + md foo + md other_crate + "#]], + ); +} + +#[test] +fn dont_complete_current_use() { + cov_mark::check!(dont_complete_current_use); + // FIXME: self shouldn't be here + check( + r#"use self::foo$0;"#, + expect![[r#" + kw self + "#]], + ); + check( + r#" +mod foo { pub struct S; } +use self::{foo::*, bar$0}; +"#, + expect![[r#" + kw self + st S + md foo + "#]], + ); +} + +#[test] +fn nested_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod foo { + pub mod bar { + pub struct FooBar; + } +} +use foo::{bar::$0} +"#, + expect![[r#" + kw self + st FooBar + "#]], + ); + check( + r#" +mod foo { + pub mod bar { + pub struct FooBar; + } +} +use foo::{$0} +"#, + expect![[r#" + kw self + md bar + "#]], + ); +} + +#[test] +fn deeply_nested_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod foo { + pub mod bar { + pub mod baz { + pub struct FooBarBaz; + } + } +} +use foo::{bar::{baz::$0}} +"#, + expect![[r#" + kw self + st FooBarBaz + "#]], + ); + check( + r#" +mod foo { + pub mod bar { + pub mod baz { + pub struct FooBarBaz; + } + } +} +use foo::{bar::{$0}} +"#, + expect![[r#" + kw self + md baz + "#]], + ); +} + +#[test] +fn plain_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use foo::$0 + +mod foo { + struct Private; + pub struct Foo; +} +struct Bar; +"#, + expect![[r#" + kw self + st Foo + "#]], + ); +} + +#[test] +fn self_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use self::$0 + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + md foo + st Bar + "#]], + ); +} + +#[test] +fn super_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod bar { + use super::$0 +} + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + kw super:: + st Bar + md bar + md foo + "#]], + ); +} + +#[test] +fn super_super_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod a { + const A: usize = 0; + mod b { + const B: usize = 0; + mod c { use super::super::$0 } + } +} +"#, + expect![[r#" + kw self + kw super:: + md b + ct A + "#]], + ); +} + +#[test] +fn crate_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use crate::$0 + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + md foo + st Bar + "#]], + ); +} + +#[test] +fn extern_crate_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +//- /lib.rs crate:main deps:other_crate +use other_crate::$0 +//- /other_crate/lib.rs crate:other_crate +pub struct Foo; +pub mod foo {} +"#, + expect![[r#" + kw self + st Foo + md foo + "#]], + ); +} + +#[test] +fn pub_use_tree() { + check( + r#" +pub struct X; +pub mod bar {} +pub use $0; +"#, + expect![[r#" + kw crate:: + kw self + kw super:: + md bar + "#]], + ); +} -- cgit v1.2.3 From 2225db2eb48bd8c8fdf399c50652d3f95c851ace Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:56:55 +0200 Subject: Refine `self`, `super` and `crate` completion in use paths --- crates/ide_completion/src/tests/use_tree.rs | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) (limited to 'crates/ide_completion/src/tests/use_tree.rs') diff --git a/crates/ide_completion/src/tests/use_tree.rs b/crates/ide_completion/src/tests/use_tree.rs index 156ca244d..878bc42bf 100644 --- a/crates/ide_completion/src/tests/use_tree.rs +++ b/crates/ide_completion/src/tests/use_tree.rs @@ -20,10 +20,9 @@ mod foo {} //- /other_crate/lib.rs crate:other_crate // nothing here "#, - // FIXME: self in this case should also get the colons expect![[r#" kw crate:: - kw self + kw self:: kw super:: md foo md other_crate @@ -34,13 +33,7 @@ mod foo {} #[test] fn dont_complete_current_use() { cov_mark::check!(dont_complete_current_use); - // FIXME: self shouldn't be here - check( - r#"use self::foo$0;"#, - expect![[r#" - kw self - "#]], - ); + check(r#"use self::foo$0;"#, expect![[r#""#]]); check( r#" mod foo { pub struct S; } @@ -56,7 +49,6 @@ use self::{foo::*, bar$0}; #[test] fn nested_use_tree() { - // FIXME: self shouldn't be here check( r#" mod foo { @@ -67,7 +59,6 @@ mod foo { use foo::{bar::$0} "#, expect![[r#" - kw self st FooBar "#]], ); @@ -89,7 +80,6 @@ use foo::{$0} #[test] fn deeply_nested_use_tree() { - // FIXME: self shouldn't be here check( r#" mod foo { @@ -102,7 +92,6 @@ mod foo { use foo::{bar::{baz::$0}} "#, expect![[r#" - kw self st FooBarBaz "#]], ); @@ -126,7 +115,6 @@ use foo::{bar::{$0}} #[test] fn plain_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" use foo::$0 @@ -138,7 +126,6 @@ mod foo { struct Bar; "#, expect![[r#" - kw self st Foo "#]], ); @@ -146,7 +133,6 @@ struct Bar; #[test] fn self_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" use self::$0 @@ -155,7 +141,6 @@ mod foo {} struct Bar; "#, expect![[r#" - kw self md foo st Bar "#]], @@ -164,7 +149,6 @@ struct Bar; #[test] fn super_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" mod bar { @@ -175,7 +159,6 @@ mod foo {} struct Bar; "#, expect![[r#" - kw self kw super:: st Bar md bar @@ -186,7 +169,6 @@ struct Bar; #[test] fn super_super_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" mod a { @@ -198,7 +180,6 @@ mod a { } "#, expect![[r#" - kw self kw super:: md b ct A @@ -208,7 +189,6 @@ mod a { #[test] fn crate_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" use crate::$0 @@ -217,7 +197,6 @@ mod foo {} struct Bar; "#, expect![[r#" - kw self md foo st Bar "#]], @@ -226,7 +205,6 @@ struct Bar; #[test] fn extern_crate_qualified_use_tree() { - // FIXME: self shouldn't be here check( r#" //- /lib.rs crate:main deps:other_crate @@ -236,7 +214,6 @@ pub struct Foo; pub mod foo {} "#, expect![[r#" - kw self st Foo md foo "#]], @@ -253,7 +230,7 @@ pub use $0; "#, expect![[r#" kw crate:: - kw self + kw self:: kw super:: md bar "#]], -- cgit v1.2.3 From 9353f36516e5b4026ce3a181d578c3a63876a18f Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:59:31 +0200 Subject: Fix incorrect completions in empty braced use statement --- crates/ide_completion/src/tests/use_tree.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'crates/ide_completion/src/tests/use_tree.rs') diff --git a/crates/ide_completion/src/tests/use_tree.rs b/crates/ide_completion/src/tests/use_tree.rs index 878bc42bf..7e6748ccc 100644 --- a/crates/ide_completion/src/tests/use_tree.rs +++ b/crates/ide_completion/src/tests/use_tree.rs @@ -236,3 +236,20 @@ pub use $0; "#]], ); } + +#[test] +fn use_tree_braces_at_start() { + check( + r#" +struct X; +mod bar {} +use {$0}; +"#, + expect![[r#" + kw crate:: + kw self:: + kw super:: + md bar + "#]], + ); +} -- cgit v1.2.3