From 26c978f258ed2af45a6979eefea9860c1eaeacda Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 14 Jun 2021 18:46:27 +0300 Subject: internal: adapt diagnostics to the new rename API --- crates/ide_diagnostics/src/incorrect_case.rs | 46 +++++++++------------------- 1 file changed, 15 insertions(+), 31 deletions(-) (limited to 'crates/ide_diagnostics/src') 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 @@ use hir::{db::AstDatabase, InFile}; -use ide_db::{assists::Assist, base_db::FilePosition}; +use ide_db::{assists::Assist, defs::NameClass}; use syntax::AstNode; use crate::{ @@ -27,35 +27,26 @@ pub(super) fn incorrect_case(ctx: &DiagnosticsContext<'_>, d: &hir::IncorrectCas } fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::IncorrectCase) -> Option> { - if true { - return None; - } - let root = ctx.sema.db.parse_or_expand(d.file)?; let name_node = d.ident.to_node(&root); + let def = NameClass::classify(&ctx.sema, &name_node)?.defined(ctx.sema.db)?; let name_node = InFile::new(d.file, name_node.syntax()); let frange = name_node.original_file_range(ctx.sema.db); - let _file_position = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; let label = format!("Rename to {}", d.suggested_text); - let res = unresolved_fix("change_case", &label, frange.range); + let mut res = unresolved_fix("change_case", &label, frange.range); if ctx.resolve.should_resolve(&res.id) { - //let source_change = rename_with_semantics(&ctx.sema, file_position, &d.suggested_text); - //res.source_change = Some(source_change.ok().unwrap_or_default()); - todo!() + let source_change = def.rename(&ctx.sema, &d.suggested_text); + res.source_change = Some(source_change.ok().unwrap_or_default()); } Some(vec![res]) } -#[cfg(TODO)] +#[cfg(test)] mod change_case { - use crate::{ - fixture, - tests::{check_diagnostics, check_fix}, - AssistResolveStrategy, DiagnosticsConfig, - }; + use crate::tests::{check_diagnostics, check_fix}; #[test] fn test_rename_incorrect_case() { @@ -123,7 +114,7 @@ fn some_fn() { check_diagnostics( r#" fn foo() { - const ANOTHER_ITEM$0: &str = "some_item"; + const ANOTHER_ITEM: &str = "some_item"; } "#, ); @@ -155,20 +146,13 @@ impl TestStruct { #[test] fn test_single_incorrect_case_diagnostic_in_function_name_issue_6970() { - let input = r#"fn FOO$0() {}"#; - let expected = r#"fn foo() {}"#; - - let (analysis, file_position) = fixture::position(input); - let diagnostics = analysis - .diagnostics( - &DiagnosticsConfig::default(), - AssistResolveStrategy::All, - file_position.file_id, - ) - .unwrap(); - assert_eq!(diagnostics.len(), 1); - - check_fix(input, expected); + check_diagnostics( + r#" +fn FOO() {} +// ^^^ Function `FOO` should have snake_case name, e.g. `foo` +"#, + ); + check_fix(r#"fn FOO$0() {}"#, r#"fn foo() {}"#); } #[test] -- cgit v1.2.3