From f51457a643b768794092f73add6dda4aecd400a1 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Jan 2021 18:35:22 +0100 Subject: Group file source edits by FileId --- crates/ide/src/diagnostics/field_shorthand.rs | 7 +++---- crates/ide/src/diagnostics/fixes.rs | 18 +++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) (limited to 'crates/ide/src/diagnostics') diff --git a/crates/ide/src/diagnostics/field_shorthand.rs b/crates/ide/src/diagnostics/field_shorthand.rs index 16c6ea827..f4ec51b64 100644 --- a/crates/ide/src/diagnostics/field_shorthand.rs +++ b/crates/ide/src/diagnostics/field_shorthand.rs @@ -1,8 +1,7 @@ //! Suggests shortening `Foo { field: field }` to `Foo { field }` in both //! expressions and patterns. -use ide_db::base_db::FileId; -use ide_db::source_change::SourceFileEdit; +use ide_db::{base_db::FileId, source_change::SourceFileEdits}; use syntax::{ast, match_ast, AstNode, SyntaxNode}; use text_edit::TextEdit; @@ -50,7 +49,7 @@ fn check_expr_field_shorthand( Diagnostic::hint(field_range, "Shorthand struct initialization".to_string()).with_fix( Some(Fix::new( "Use struct shorthand initialization", - SourceFileEdit { file_id, edit }.into(), + SourceFileEdits::from_text_edit(file_id, edit).into(), field_range, )), ), @@ -89,7 +88,7 @@ fn check_pat_field_shorthand( acc.push(Diagnostic::hint(field_range, "Shorthand struct pattern".to_string()).with_fix( Some(Fix::new( "Use struct field shorthand", - SourceFileEdit { file_id, edit }.into(), + SourceFileEdits::from_text_edit(file_id, edit).into(), field_range, )), )); diff --git a/crates/ide/src/diagnostics/fixes.rs b/crates/ide/src/diagnostics/fixes.rs index d7ad88ed5..b04964ccd 100644 --- a/crates/ide/src/diagnostics/fixes.rs +++ b/crates/ide/src/diagnostics/fixes.rs @@ -8,9 +8,9 @@ use hir::{ }, HasSource, HirDisplay, InFile, Semantics, VariantDef, }; -use ide_db::base_db::{AnchoredPathBuf, FileId}; use ide_db::{ - source_change::{FileSystemEdit, SourceFileEdit}, + base_db::{AnchoredPathBuf, FileId}, + source_change::{FileSystemEdit, SourceFileEdits}, RootDatabase, }; use syntax::{ @@ -88,7 +88,7 @@ impl DiagnosticWithFix for MissingFields { }; Some(Fix::new( "Fill struct fields", - SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(), + SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(), sema.original_range(&field_list_parent.syntax()).range, )) } @@ -102,7 +102,7 @@ impl DiagnosticWithFix for MissingOkOrSomeInTailExpr { let replacement = format!("{}({})", self.required, tail_expr.syntax()); let edit = TextEdit::replace(tail_expr_range, replacement); let source_change = - SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(); + SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(); let name = if self.required == "Ok" { "Wrap with Ok" } else { "Wrap with Some" }; Some(Fix::new(name, source_change, tail_expr_range)) } @@ -123,7 +123,7 @@ impl DiagnosticWithFix for RemoveThisSemicolon { let edit = TextEdit::delete(semicolon); let source_change = - SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(); + SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(); Some(Fix::new("Remove this semicolon", source_change, semicolon)) } @@ -204,10 +204,10 @@ fn missing_record_expr_field_fix( new_field = format!(",{}", new_field); } - let source_change = SourceFileEdit { - file_id: def_file_id, - edit: TextEdit::insert(last_field_syntax.text_range().end(), new_field), - }; + let source_change = SourceFileEdits::from_text_edit( + def_file_id, + TextEdit::insert(last_field_syntax.text_range().end(), new_field), + ); return Some(Fix::new( "Create field", source_change.into(), -- cgit v1.2.3 From d5095329a1c12e93653d8de4a93f0b4f5cad4c6e Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Jan 2021 22:43:36 +0100 Subject: Phase out SourceFileEdits in favour of a plain HashMap --- crates/ide/src/diagnostics/field_shorthand.rs | 6 +++--- crates/ide/src/diagnostics/fixes.rs | 18 ++++++------------ 2 files changed, 9 insertions(+), 15 deletions(-) (limited to 'crates/ide/src/diagnostics') diff --git a/crates/ide/src/diagnostics/field_shorthand.rs b/crates/ide/src/diagnostics/field_shorthand.rs index f4ec51b64..5c89e2170 100644 --- a/crates/ide/src/diagnostics/field_shorthand.rs +++ b/crates/ide/src/diagnostics/field_shorthand.rs @@ -1,7 +1,7 @@ //! Suggests shortening `Foo { field: field }` to `Foo { field }` in both //! expressions and patterns. -use ide_db::{base_db::FileId, source_change::SourceFileEdits}; +use ide_db::{base_db::FileId, source_change::SourceChange}; use syntax::{ast, match_ast, AstNode, SyntaxNode}; use text_edit::TextEdit; @@ -49,7 +49,7 @@ fn check_expr_field_shorthand( Diagnostic::hint(field_range, "Shorthand struct initialization".to_string()).with_fix( Some(Fix::new( "Use struct shorthand initialization", - SourceFileEdits::from_text_edit(file_id, edit).into(), + SourceChange::from_text_edit(file_id, edit), field_range, )), ), @@ -88,7 +88,7 @@ fn check_pat_field_shorthand( acc.push(Diagnostic::hint(field_range, "Shorthand struct pattern".to_string()).with_fix( Some(Fix::new( "Use struct field shorthand", - SourceFileEdits::from_text_edit(file_id, edit).into(), + SourceChange::from_text_edit(file_id, edit), field_range, )), )); diff --git a/crates/ide/src/diagnostics/fixes.rs b/crates/ide/src/diagnostics/fixes.rs index b04964ccd..e4335119b 100644 --- a/crates/ide/src/diagnostics/fixes.rs +++ b/crates/ide/src/diagnostics/fixes.rs @@ -10,7 +10,7 @@ use hir::{ }; use ide_db::{ base_db::{AnchoredPathBuf, FileId}, - source_change::{FileSystemEdit, SourceFileEdits}, + source_change::{FileSystemEdit, SourceChange}, RootDatabase, }; use syntax::{ @@ -88,7 +88,7 @@ impl DiagnosticWithFix for MissingFields { }; Some(Fix::new( "Fill struct fields", - SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(), + SourceChange::from_text_edit(self.file.original_file(sema.db), edit), sema.original_range(&field_list_parent.syntax()).range, )) } @@ -101,8 +101,7 @@ impl DiagnosticWithFix for MissingOkOrSomeInTailExpr { let tail_expr_range = tail_expr.syntax().text_range(); let replacement = format!("{}({})", self.required, tail_expr.syntax()); let edit = TextEdit::replace(tail_expr_range, replacement); - let source_change = - SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(); + let source_change = SourceChange::from_text_edit(self.file.original_file(sema.db), edit); let name = if self.required == "Ok" { "Wrap with Ok" } else { "Wrap with Some" }; Some(Fix::new(name, source_change, tail_expr_range)) } @@ -122,8 +121,7 @@ impl DiagnosticWithFix for RemoveThisSemicolon { .text_range(); let edit = TextEdit::delete(semicolon); - let source_change = - SourceFileEdits::from_text_edit(self.file.original_file(sema.db), edit).into(); + let source_change = SourceChange::from_text_edit(self.file.original_file(sema.db), edit); Some(Fix::new("Remove this semicolon", source_change, semicolon)) } @@ -204,15 +202,11 @@ fn missing_record_expr_field_fix( new_field = format!(",{}", new_field); } - let source_change = SourceFileEdits::from_text_edit( + let source_change = SourceChange::from_text_edit( def_file_id, TextEdit::insert(last_field_syntax.text_range().end(), new_field), ); - return Some(Fix::new( - "Create field", - source_change.into(), - record_expr_field.syntax().text_range(), - )); + return Some(Fix::new("Create field", source_change, record_expr_field.syntax().text_range())); fn record_field_list(field_def_list: ast::FieldList) -> Option { match field_def_list { -- cgit v1.2.3