]> git.lizzy.rs Git - rust.git/commitdiff
Prevent multiple incorrect case diagnostics in functions
authorunexge <unexge@gmail.com>
Wed, 23 Dec 2020 19:18:31 +0000 (22:18 +0300)
committerunexge <unexge@gmail.com>
Wed, 23 Dec 2020 19:18:31 +0000 (22:18 +0300)
crates/hir/src/code_model.rs
crates/ide/src/diagnostics.rs

index 1d7e5ddd7f6a9aa9710aa36c94fe2391de8abffe..6d17d546acf92ec4d9ac16227ef01d753380cdcc 100644 (file)
@@ -374,8 +374,6 @@ pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) {
         let crate_def_map = db.crate_def_map(self.id.krate);
         crate_def_map.add_diagnostics(db.upcast(), self.id.local_id, sink);
         for decl in self.declarations(db) {
-            decl.diagnostics(db, sink);
-
             match decl {
                 crate::ModuleDef::Function(f) => f.diagnostics(db, sink),
                 crate::ModuleDef::Module(m) => {
@@ -384,7 +382,9 @@ pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) {
                         m.diagnostics(db, sink)
                     }
                 }
-                _ => (),
+                _ => {
+                    decl.diagnostics(db, sink);
+                }
             }
         }
 
index 3ad30f0c9e22c627d8cd231f3bfec87fbb021a01..b2714cb6915afe1816f727f974441a82fc9e2cd2 100644 (file)
@@ -895,4 +895,17 @@ pub fn some_fn() -> TestStruct {
 "#,
         );
     }
+
+    #[test]
+    fn test_single_incorrect_case_diagnostic_in_function_name_issue_6970() {
+        let input = r#"fn FOO<|>() {}"#;
+        let expected = r#"fn foo() {}"#;
+
+        let (analysis, file_position) = fixture::position(input);
+        let diagnostics =
+            analysis.diagnostics(&DiagnosticsConfig::default(), file_position.file_id).unwrap();
+        assert_eq!(diagnostics.len(), 1);
+
+        check_fixes(input, expected);
+    }
 }