diff options
Diffstat (limited to 'crates/ide_diagnostics/src')
-rw-r--r-- | crates/ide_diagnostics/src/incorrect_case.rs | 46 |
1 files changed, 15 insertions, 31 deletions
diff --git a/crates/ide_diagnostics/src/incorrect_case.rs b/crates/ide_diagnostics/src/incorrect_case.rs index 8e1a93aa7..2cf232d56 100644 --- a/crates/ide_diagnostics/src/incorrect_case.rs +++ b/crates/ide_diagnostics/src/incorrect_case.rs | |||
@@ -1,5 +1,5 @@ | |||
1 | use hir::{db::AstDatabase, InFile}; | 1 | use hir::{db::AstDatabase, InFile}; |
2 | use ide_db::{assists::Assist, base_db::FilePosition}; | 2 | use ide_db::{assists::Assist, defs::NameClass}; |
3 | use syntax::AstNode; | 3 | use syntax::AstNode; |
4 | 4 | ||
5 | use crate::{ | 5 | use crate::{ |
@@ -27,35 +27,26 @@ pub(super) fn incorrect_case(ctx: &DiagnosticsContext<'_>, d: &hir::IncorrectCas | |||
27 | } | 27 | } |
28 | 28 | ||
29 | fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::IncorrectCase) -> Option<Vec<Assist>> { | 29 | fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::IncorrectCase) -> Option<Vec<Assist>> { |
30 | if true { | ||
31 | return None; | ||
32 | } | ||
33 | |||
34 | let root = ctx.sema.db.parse_or_expand(d.file)?; | 30 | let root = ctx.sema.db.parse_or_expand(d.file)?; |
35 | let name_node = d.ident.to_node(&root); | 31 | let name_node = d.ident.to_node(&root); |
32 | let def = NameClass::classify(&ctx.sema, &name_node)?.defined(ctx.sema.db)?; | ||
36 | 33 | ||
37 | let name_node = InFile::new(d.file, name_node.syntax()); | 34 | let name_node = InFile::new(d.file, name_node.syntax()); |
38 | let frange = name_node.original_file_range(ctx.sema.db); | 35 | let frange = name_node.original_file_range(ctx.sema.db); |
39 | let _file_position = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; | ||
40 | 36 | ||
41 | let label = format!("Rename to {}", d.suggested_text); | 37 | let label = format!("Rename to {}", d.suggested_text); |
42 | let res = unresolved_fix("change_case", &label, frange.range); | 38 | let mut res = unresolved_fix("change_case", &label, frange.range); |
43 | if ctx.resolve.should_resolve(&res.id) { | 39 | if ctx.resolve.should_resolve(&res.id) { |
44 | //let source_change = rename_with_semantics(&ctx.sema, file_position, &d.suggested_text); | 40 | let source_change = def.rename(&ctx.sema, &d.suggested_text); |
45 | //res.source_change = Some(source_change.ok().unwrap_or_default()); | 41 | res.source_change = Some(source_change.ok().unwrap_or_default()); |
46 | todo!() | ||
47 | } | 42 | } |
48 | 43 | ||
49 | Some(vec![res]) | 44 | Some(vec![res]) |
50 | } | 45 | } |
51 | 46 | ||
52 | #[cfg(TODO)] | 47 | #[cfg(test)] |
53 | mod change_case { | 48 | mod change_case { |
54 | use crate::{ | 49 | use crate::tests::{check_diagnostics, check_fix}; |
55 | fixture, | ||
56 | tests::{check_diagnostics, check_fix}, | ||
57 | AssistResolveStrategy, DiagnosticsConfig, | ||
58 | }; | ||
59 | 50 | ||
60 | #[test] | 51 | #[test] |
61 | fn test_rename_incorrect_case() { | 52 | fn test_rename_incorrect_case() { |
@@ -123,7 +114,7 @@ fn some_fn() { | |||
123 | check_diagnostics( | 114 | check_diagnostics( |
124 | r#" | 115 | r#" |
125 | fn foo() { | 116 | fn foo() { |
126 | const ANOTHER_ITEM$0: &str = "some_item"; | 117 | const ANOTHER_ITEM: &str = "some_item"; |
127 | } | 118 | } |
128 | "#, | 119 | "#, |
129 | ); | 120 | ); |
@@ -155,20 +146,13 @@ impl TestStruct { | |||
155 | 146 | ||
156 | #[test] | 147 | #[test] |
157 | fn test_single_incorrect_case_diagnostic_in_function_name_issue_6970() { | 148 | fn test_single_incorrect_case_diagnostic_in_function_name_issue_6970() { |
158 | let input = r#"fn FOO$0() {}"#; | 149 | check_diagnostics( |
159 | let expected = r#"fn foo() {}"#; | 150 | r#" |
160 | 151 | fn FOO() {} | |
161 | let (analysis, file_position) = fixture::position(input); | 152 | // ^^^ Function `FOO` should have snake_case name, e.g. `foo` |
162 | let diagnostics = analysis | 153 | "#, |
163 | .diagnostics( | 154 | ); |
164 | &DiagnosticsConfig::default(), | 155 | check_fix(r#"fn FOO$0() {}"#, r#"fn foo() {}"#); |
165 | AssistResolveStrategy::All, | ||
166 | file_position.file_id, | ||
167 | ) | ||
168 | .unwrap(); | ||
169 | assert_eq!(diagnostics.len(), 1); | ||
170 | |||
171 | check_fix(input, expected); | ||
172 | } | 156 | } |
173 | 157 | ||
174 | #[test] | 158 | #[test] |