From 534d71a852264cced80290afb2f994b179ddb40a Mon Sep 17 00:00:00 2001 From: Hongxu Xu Date: Thu, 16 Jun 2022 08:52:57 +0800 Subject: [PATCH] disable private editable in TEST_CONFIG by default adjust test_visibility_filter test case --- crates/ide-completion/src/completions/dot.rs | 114 ++++++++++++++++++- crates/ide-completion/src/tests.rs | 8 +- crates/ide-completion/src/tests/special.rs | 28 +---- 3 files changed, 119 insertions(+), 31 deletions(-) diff --git a/crates/ide-completion/src/completions/dot.rs b/crates/ide-completion/src/completions/dot.rs index a11652ca302..4eb1fccd7d3 100644 --- a/crates/ide-completion/src/completions/dot.rs +++ b/crates/ide-completion/src/completions/dot.rs @@ -117,13 +117,20 @@ fn complete_methods( mod tests { use expect_test::{expect, Expect}; - use crate::tests::{check_edit, completion_list_no_kw}; + use crate::tests::{ + check_edit, completion_list_no_kw, completion_list_no_kw_with_private_editable, + }; fn check(ra_fixture: &str, expect: Expect) { let actual = completion_list_no_kw(ra_fixture); expect.assert_eq(&actual); } + fn check_with_private_editable(ra_fixture: &str, expect: Expect) { + let actual = completion_list_no_kw_with_private_editable(ra_fixture); + expect.assert_eq(&actual); + } + #[test] fn test_struct_field_and_method_completion() { check( @@ -202,10 +209,7 @@ pub struct A { fn foo(a: lib::m::A) { a.$0 } "#, expect![[r#" - fd crate_field u32 - fd private_field u32 - fd pub_field u32 - fd super_field u32 + fd pub_field u32 "#]], ); @@ -258,6 +262,104 @@ pub fn pub_method(&self) {} } //- /main.rs crate:main deps:lib new_source_root:local fn foo(a: lib::A) { a.$0 } +"#, + expect![[r#" + me pub_method() fn(&self) + "#]], + ); + check( + r#" +//- /lib.rs crate:lib new_source_root:library +pub struct A {} +mod m { + impl super::A { + fn private_method(&self) {} + pub(crate) fn crate_method(&self) {} + pub fn pub_method(&self) {} + } +} +//- /main.rs crate:main deps:lib new_source_root:local +fn foo(a: lib::A) { a.$0 } +"#, + expect![[r#" + me pub_method() fn(&self) + "#]], + ); + } + + #[test] + fn test_visibility_filtering_with_private_editable_enabled() { + check_with_private_editable( + r#" +//- /lib.rs crate:lib new_source_root:local +pub mod m { + pub struct A { + private_field: u32, + pub pub_field: u32, + pub(crate) crate_field: u32, + pub(super) super_field: u32, + } +} +//- /main.rs crate:main deps:lib new_source_root:local +fn foo(a: lib::m::A) { a.$0 } +"#, + expect![[r#" + fd crate_field u32 + fd private_field u32 + fd pub_field u32 + fd super_field u32 + "#]], + ); + + check_with_private_editable( + r#" +//- /lib.rs crate:lib new_source_root:library +pub mod m { + pub struct A { + private_field: u32, + pub pub_field: u32, + pub(crate) crate_field: u32, + pub(super) super_field: u32, + } +} +//- /main.rs crate:main deps:lib new_source_root:local +fn foo(a: lib::m::A) { a.$0 } +"#, + expect![[r#" + fd pub_field u32 + "#]], + ); + + check_with_private_editable( + r#" +//- /lib.rs crate:lib new_source_root:library +pub mod m { + pub struct A( + i32, + pub f64, + ); +} +//- /main.rs crate:main deps:lib new_source_root:local +fn foo(a: lib::m::A) { a.$0 } +"#, + expect![[r#" + fd 1 f64 + "#]], + ); + + check_with_private_editable( + r#" +//- /lib.rs crate:lib new_source_root:local +pub struct A {} +mod m { + impl super::A { + fn private_method(&self) {} + pub(crate) fn crate_method(&self) {} + pub fn pub_method(&self) {} + } +} +//- /main.rs crate:main deps:lib new_source_root:local +fn foo(a: lib::A) { a.$0 } "#, expect![[r#" me crate_method() fn(&self) @@ -265,7 +367,7 @@ fn foo(a: lib::A) { a.$0 } me pub_method() fn(&self) "#]], ); - check( + check_with_private_editable( r#" //- /lib.rs crate:lib new_source_root:library pub struct A {} diff --git a/crates/ide-completion/src/tests.rs b/crates/ide-completion/src/tests.rs index d30ff77bab6..4be6acbe846 100644 --- a/crates/ide-completion/src/tests.rs +++ b/crates/ide-completion/src/tests.rs @@ -65,7 +65,7 @@ union Union { field: i32 } enable_postfix_completions: true, enable_imports_on_the_fly: true, enable_self_on_the_fly: true, - enable_private_editable: true, + enable_private_editable: false, callable: Some(CallableSnippets::FillArguments), snippet_cap: SnippetCap::new(true), insert_use: InsertUseConfig { @@ -86,6 +86,12 @@ pub(crate) fn completion_list_no_kw(ra_fixture: &str) -> String { completion_list_with_config(TEST_CONFIG, ra_fixture, false, None) } +pub(crate) fn completion_list_no_kw_with_private_editable(ra_fixture: &str) -> String { + let mut config = TEST_CONFIG.clone(); + config.enable_private_editable = true; + completion_list_with_config(config, ra_fixture, false, None) +} + pub(crate) fn completion_list_with_trigger_character( ra_fixture: &str, trigger_character: Option, diff --git a/crates/ide-completion/src/tests/special.rs b/crates/ide-completion/src/tests/special.rs index 2f2351e27bf..4535923b28b 100644 --- a/crates/ide-completion/src/tests/special.rs +++ b/crates/ide-completion/src/tests/special.rs @@ -2,21 +2,13 @@ use expect_test::{expect, Expect}; -use crate::{ - tests::{check_edit, completion_list_no_kw, completion_list_with_config, TEST_CONFIG}, - CompletionConfig, -}; +use crate::tests::{check_edit, completion_list_no_kw}; fn check(ra_fixture: &str, expect: Expect) { let actual = completion_list_no_kw(ra_fixture); expect.assert_eq(&actual) } -fn check_with_config(config: CompletionConfig, ra_fixture: &str, expect: Expect) { - let actual = completion_list_with_config(config, ra_fixture, false, None); - expect.assert_eq(&actual) -} - #[test] fn completes_if_prefix_is_keyword() { check_edit( @@ -647,11 +639,7 @@ fn foo() (as Foo) fn() -> Self #[test] fn completes_fn_in_pub_trait_generated_by_macro() { - let mut config = TEST_CONFIG.clone(); - config.enable_private_editable = false; - - check_with_config( - config, + check( r#" mod other_mod { macro_rules! make_method { @@ -685,11 +673,7 @@ fn main() { #[test] fn completes_fn_in_pub_trait_generated_by_recursive_macro() { - let mut config = TEST_CONFIG.clone(); - config.enable_private_editable = false; - - check_with_config( - config, + check( r#" mod other_mod { macro_rules! make_method { @@ -729,11 +713,7 @@ fn main() { #[test] fn completes_const_in_pub_trait_generated_by_macro() { - let mut config = TEST_CONFIG.clone(); - config.enable_private_editable = false; - - check_with_config( - config, + check( r#" mod other_mod { macro_rules! make_const {