about summary refs log tree commit diff
diff options
context:
space:
mode:
authordavidsemakula <hello@davidsemakula.com>2024-02-08 19:29:27 +0300
committerdavidsemakula <hello@davidsemakula.com>2024-02-08 19:32:53 +0300
commit602acfcb70f5b0af1157268196eba440cf064b25 (patch)
tree65f7df9b5e4bb2651653e0e110c7679537332c05
parenta250c2dde032c90ca6b4e789921831c085b0bc85 (diff)
downloadrust-602acfcb70f5b0af1157268196eba440cf064b25.tar.gz
rust-602acfcb70f5b0af1157268196eba440cf064b25.zip
fix conflicting "unnecessary else" and "trailing return" diagnostics tests
-rw-r--r--crates/hir/src/diagnostics.rs2
-rw-r--r--crates/ide-diagnostics/src/handlers/remove_trailing_return.rs10
-rw-r--r--crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs14
-rw-r--r--crates/ide-diagnostics/src/tests.rs28
4 files changed, 42 insertions, 12 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index e07c48aa8ac..08843a6c999 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -67,9 +67,9 @@ diagnostics![
     NoSuchField,
     PrivateAssocItem,
     PrivateField,
-    ReplaceFilterMapNextWithFindMap,
     RemoveTrailingReturn,
     RemoveUnnecessaryElse,
+    ReplaceFilterMapNextWithFindMap,
     TraitImplIncorrectSafety,
     TraitImplMissingAssocItems,
     TraitImplOrphan,
diff --git a/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs b/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
index 276ac0d15d9..605e8baba0a 100644
--- a/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
+++ b/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
@@ -54,7 +54,9 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &RemoveTrailingReturn) -> Option<Vec<A
 
 #[cfg(test)]
 mod tests {
-    use crate::tests::{check_diagnostics, check_fix};
+    use crate::tests::{
+        check_diagnostics, check_diagnostics_with_disabled, check_fix, check_fix_with_disabled,
+    };
 
     #[test]
     fn remove_trailing_return() {
@@ -127,7 +129,7 @@ fn foo() -> u8 {
 
     #[test]
     fn remove_trailing_return_in_if() {
-        check_diagnostics(
+        check_diagnostics_with_disabled(
             r#"
 fn foo(x: usize) -> u8 {
     if x > 0 {
@@ -138,6 +140,7 @@ fn foo(x: usize) -> u8 {
     } //^^^^^^^^^ 💡 weak: replace return <expr>; with <expr>
 }
 "#,
+            std::iter::once("remove-unnecessary-else".to_string()),
         );
     }
 
@@ -287,7 +290,7 @@ fn foo() -> u8 {
 
     #[test]
     fn replace_in_if() {
-        check_fix(
+        check_fix_with_disabled(
             r#"
 fn foo(x: usize) -> u8 {
     if x > 0 {
@@ -306,6 +309,7 @@ fn foo(x: usize) -> u8 {
     }
 }
 "#,
+            std::iter::once("remove-unnecessary-else".to_string()),
         );
         check_fix(
             r#"
diff --git a/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs b/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
index c6c85256f93..124086c8fa1 100644
--- a/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
+++ b/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
@@ -87,11 +87,15 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &RemoveUnnecessaryElse) -> Option<Vec<
 
 #[cfg(test)]
 mod tests {
-    use crate::tests::{check_diagnostics, check_fix};
+    use crate::tests::{check_diagnostics, check_diagnostics_with_disabled, check_fix};
+
+    fn check_diagnostics_with_needless_return_disabled(ra_fixture: &str) {
+        check_diagnostics_with_disabled(ra_fixture, std::iter::once("needless_return".to_string()));
+    }
 
     #[test]
     fn remove_unnecessary_else_for_return() {
-        check_diagnostics(
+        check_diagnostics_with_needless_return_disabled(
             r#"
 fn test() {
     if foo {
@@ -126,7 +130,7 @@ fn test() {
 
     #[test]
     fn remove_unnecessary_else_for_return2() {
-        check_diagnostics(
+        check_diagnostics_with_needless_return_disabled(
             r#"
 fn test() {
     if foo {
@@ -169,7 +173,7 @@ fn test() {
 
     #[test]
     fn remove_unnecessary_else_for_return_in_child_if_expr() {
-        check_diagnostics(
+        check_diagnostics_with_needless_return_disabled(
             r#"
 fn test() {
     if foo {
@@ -371,7 +375,7 @@ fn test() {
 
     #[test]
     fn no_diagnostic_if_no_divergence_in_else_branch() {
-        check_diagnostics(
+        check_diagnostics_with_needless_return_disabled(
             r#"
 fn test() {
     if foo {
diff --git a/crates/ide-diagnostics/src/tests.rs b/crates/ide-diagnostics/src/tests.rs
index c6f4d6be76c..da563b874bd 100644
--- a/crates/ide-diagnostics/src/tests.rs
+++ b/crates/ide-diagnostics/src/tests.rs
@@ -34,13 +34,35 @@ pub(crate) fn check_fixes(ra_fixture_before: &str, ra_fixtures_after: Vec<&str>)
 
 #[track_caller]
 fn check_nth_fix(nth: usize, ra_fixture_before: &str, ra_fixture_after: &str) {
+    let mut config = DiagnosticsConfig::test_sample();
+    config.expr_fill_default = ExprFillDefaultMode::Default;
+    check_nth_fix_with_config(config, nth, ra_fixture_before, ra_fixture_after)
+}
+
+#[track_caller]
+pub(crate) fn check_fix_with_disabled(
+    ra_fixture_before: &str,
+    ra_fixture_after: &str,
+    disabled: impl Iterator<Item = String>,
+) {
+    let mut config = DiagnosticsConfig::test_sample();
+    config.expr_fill_default = ExprFillDefaultMode::Default;
+    config.disabled.extend(disabled);
+    check_nth_fix_with_config(config, 0, ra_fixture_before, ra_fixture_after)
+}
+
+#[track_caller]
+fn check_nth_fix_with_config(
+    config: DiagnosticsConfig,
+    nth: usize,
+    ra_fixture_before: &str,
+    ra_fixture_after: &str,
+) {
     let after = trim_indent(ra_fixture_after);
 
     let (db, file_position) = RootDatabase::with_position(ra_fixture_before);
-    let mut conf = DiagnosticsConfig::test_sample();
-    conf.expr_fill_default = ExprFillDefaultMode::Default;
     let diagnostic =
-        super::diagnostics(&db, &conf, &AssistResolveStrategy::All, file_position.file_id)
+        super::diagnostics(&db, &config, &AssistResolveStrategy::All, file_position.file_id)
             .pop()
             .expect("no diagnostics");
     let fix = &diagnostic