diff options
Diffstat (limited to 'crates/ide/src/diagnostics/fixes.rs')
-rw-r--r-- | crates/ide/src/diagnostics/fixes.rs | 21 |
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 | }; |
11 | use ide_db::base_db::FileId; | 11 | use ide_db::base_db::{AnchoredPathBuf, FileId}; |
12 | use ide_db::{ | 12 | use 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()?; |