aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/diagnostics/fixes.rs
diff options
context:
space:
mode:
authorIgor Aleksanov <[email protected]>2020-10-03 15:34:52 +0100
committerIgor Aleksanov <[email protected]>2020-10-12 09:04:59 +0100
commite24e22f288eba33928a9e579f13653d6f04fcdfa (patch)
tree4fd9d128cf510dd7478f6a1fd955461cca70d2f4 /crates/ide/src/diagnostics/fixes.rs
parent17f1026c46e6e3797caf3c69737f66bd612c58e1 (diff)
Add fix for incorrect case diagnostic
Diffstat (limited to 'crates/ide/src/diagnostics/fixes.rs')
-rw-r--r--crates/ide/src/diagnostics/fixes.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/crates/ide/src/diagnostics/fixes.rs b/crates/ide/src/diagnostics/fixes.rs
index 68ae1c239..286ef0785 100644
--- a/crates/ide/src/diagnostics/fixes.rs
+++ b/crates/ide/src/diagnostics/fixes.rs
@@ -3,7 +3,10 @@
3use base_db::FileId; 3use base_db::FileId;
4use hir::{ 4use hir::{
5 db::AstDatabase, 5 db::AstDatabase,
6 diagnostics::{Diagnostic, MissingFields, MissingOkInTailExpr, NoSuchField, UnresolvedModule}, 6 diagnostics::{
7 Diagnostic, IncorrectCase, MissingFields, MissingOkInTailExpr, NoSuchField,
8 UnresolvedModule,
9 },
7 HasSource, HirDisplay, Semantics, VariantDef, 10 HasSource, HirDisplay, Semantics, VariantDef,
8}; 11};
9use ide_db::{ 12use ide_db::{
@@ -17,7 +20,7 @@ use syntax::{
17}; 20};
18use text_edit::TextEdit; 21use text_edit::TextEdit;
19 22
20use crate::diagnostics::Fix; 23use crate::{diagnostics::Fix, references::rename::rename_with_semantics, FilePosition};
21 24
22/// A [Diagnostic] that potentially has a fix available. 25/// A [Diagnostic] that potentially has a fix available.
23/// 26///
@@ -99,6 +102,19 @@ impl DiagnosticWithFix for MissingOkInTailExpr {
99 } 102 }
100} 103}
101 104
105impl DiagnosticWithFix for IncorrectCase {
106 fn fix(&self, sema: &Semantics<RootDatabase>) -> Option<Fix> {
107 let file_id = self.file.original_file(sema.db);
108 let offset = self.ident.text_range().start();
109 let file_position = FilePosition { file_id, offset };
110
111 let rename_changes = rename_with_semantics(sema, file_position, &self.suggested_text)?;
112
113 let label = format!("Rename to {}", self.suggested_text);
114 Some(Fix::new(&label, rename_changes.info, rename_changes.range))
115 }
116}
117
102fn missing_record_expr_field_fix( 118fn missing_record_expr_field_fix(
103 sema: &Semantics<RootDatabase>, 119 sema: &Semantics<RootDatabase>,
104 usage_file_id: FileId, 120 usage_file_id: FileId,