aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/diagnostics
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide/src/diagnostics')
-rw-r--r--crates/ide/src/diagnostics/fixes.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/crates/ide/src/diagnostics/fixes.rs b/crates/ide/src/diagnostics/fixes.rs
index ba046232a..13240672f 100644
--- a/crates/ide/src/diagnostics/fixes.rs
+++ b/crates/ide/src/diagnostics/fixes.rs
@@ -6,9 +6,9 @@ use hir::{
6 Diagnostic, IncorrectCase, MissingFields, MissingOkInTailExpr, NoSuchField, 6 Diagnostic, IncorrectCase, MissingFields, MissingOkInTailExpr, NoSuchField,
7 RemoveThisSemicolon, UnresolvedModule, 7 RemoveThisSemicolon, UnresolvedModule,
8 }, 8 },
9 HasSource, HirDisplay, Semantics, VariantDef, 9 HasSource, HirDisplay, InFile, Semantics, VariantDef,
10}; 10};
11use ide_db::base_db::FileId; 11use ide_db::base_db::{AnchoredPathBuf, FileId};
12use ide_db::{ 12use ide_db::{
13 source_change::{FileSystemEdit, SourceFileEdit}, 13 source_change::{FileSystemEdit, SourceFileEdit},
14 RootDatabase, 14 RootDatabase,
@@ -36,8 +36,10 @@ impl DiagnosticWithFix for UnresolvedModule {
36 Some(Fix::new( 36 Some(Fix::new(
37 "Create module", 37 "Create module",
38 FileSystemEdit::CreateFile { 38 FileSystemEdit::CreateFile {
39 anchor: self.file.original_file(sema.db), 39 dst: AnchoredPathBuf {
40 dst: self.candidate.clone(), 40 anchor: self.file.original_file(sema.db),
41 path: self.candidate.clone(),
42 },
41 } 43 }
42 .into(), 44 .into(),
43 unresolved_module.syntax().text_range(), 45 unresolved_module.syntax().text_range(),
@@ -68,7 +70,8 @@ impl DiagnosticWithFix for MissingFields {
68 } 70 }
69 71
70 let root = sema.db.parse_or_expand(self.file)?; 72 let root = sema.db.parse_or_expand(self.file)?;
71 let old_field_list = self.field_list_parent.to_node(&root).record_expr_field_list()?; 73 let field_list_parent = self.field_list_parent.to_node(&root);
74 let old_field_list = field_list_parent.record_expr_field_list()?;
72 let mut new_field_list = old_field_list.clone(); 75 let mut new_field_list = old_field_list.clone();
73 for f in self.missed_fields.iter() { 76 for f in self.missed_fields.iter() {
74 let field = 77 let field =
@@ -85,7 +88,7 @@ impl DiagnosticWithFix for MissingFields {
85 Some(Fix::new( 88 Some(Fix::new(
86 "Fill struct fields", 89 "Fill struct fields",
87 SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(), 90 SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(),
88 sema.original_range(&old_field_list.syntax()).range, 91 sema.original_range(&field_list_parent.syntax()).range,
89 )) 92 ))
90 } 93 }
91} 94}
@@ -128,9 +131,9 @@ impl DiagnosticWithFix for IncorrectCase {
128 let root = sema.db.parse_or_expand(self.file)?; 131 let root = sema.db.parse_or_expand(self.file)?;
129 let name_node = self.ident.to_node(&root); 132 let name_node = self.ident.to_node(&root);
130 133
131 let file_id = self.file.original_file(sema.db); 134 let name_node = InFile::new(self.file, name_node.syntax());
132 let offset = name_node.syntax().text_range().start(); 135 let frange = name_node.original_file_range(sema.db);
133 let file_position = FilePosition { file_id, offset }; 136 let file_position = FilePosition { file_id: frange.file_id, offset: frange.range.start() };
134 137
135 let rename_changes = 138 let rename_changes =
136 rename_with_semantics(sema, file_position, &self.suggested_text).ok()?; 139 rename_with_semantics(sema, file_position, &self.suggested_text).ok()?;