diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-12-10 16:18:49 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-10 16:18:49 +0000 |
commit | 44978acf51e25513ef8420e228221273f42abf8c (patch) | |
tree | cc798690135a0adc9ee43bdb6d2b99686ce9e6f1 /crates/ide/src/diagnostics/fixes.rs | |
parent | 5a6065e3b05e2624c4c340f928b20c04ce579928 (diff) | |
parent | bbb0bc7b041278480edbfaa7c3cdadc5a704fc03 (diff) |
Merge #6769
6769: Add native "remove this semicolon" diagnostics r=matklad a=ivan770
Closes #6739
![demo2](https://user-images.githubusercontent.com/14003886/101530533-b76c3180-399a-11eb-9d18-5c8457721655.gif)
Co-authored-by: ivan770 <[email protected]>
Diffstat (limited to 'crates/ide/src/diagnostics/fixes.rs')
-rw-r--r-- | crates/ide/src/diagnostics/fixes.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/crates/ide/src/diagnostics/fixes.rs b/crates/ide/src/diagnostics/fixes.rs index a900d7bae..13240672f 100644 --- a/crates/ide/src/diagnostics/fixes.rs +++ b/crates/ide/src/diagnostics/fixes.rs | |||
@@ -4,7 +4,7 @@ use hir::{ | |||
4 | db::AstDatabase, | 4 | db::AstDatabase, |
5 | diagnostics::{ | 5 | diagnostics::{ |
6 | Diagnostic, IncorrectCase, MissingFields, MissingOkInTailExpr, NoSuchField, | 6 | Diagnostic, IncorrectCase, MissingFields, MissingOkInTailExpr, NoSuchField, |
7 | UnresolvedModule, | 7 | RemoveThisSemicolon, UnresolvedModule, |
8 | }, | 8 | }, |
9 | HasSource, HirDisplay, InFile, Semantics, VariantDef, | 9 | HasSource, HirDisplay, InFile, Semantics, VariantDef, |
10 | }; | 10 | }; |
@@ -105,6 +105,27 @@ impl DiagnosticWithFix for MissingOkInTailExpr { | |||
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | impl DiagnosticWithFix for RemoveThisSemicolon { | ||
109 | fn fix(&self, sema: &Semantics<RootDatabase>) -> Option<Fix> { | ||
110 | let root = sema.db.parse_or_expand(self.file)?; | ||
111 | |||
112 | let semicolon = self | ||
113 | .expr | ||
114 | .to_node(&root) | ||
115 | .syntax() | ||
116 | .parent() | ||
117 | .and_then(ast::ExprStmt::cast) | ||
118 | .and_then(|expr| expr.semicolon_token())? | ||
119 | .text_range(); | ||
120 | |||
121 | let edit = TextEdit::delete(semicolon); | ||
122 | let source_change = | ||
123 | SourceFileEdit { file_id: self.file.original_file(sema.db), edit }.into(); | ||
124 | |||
125 | Some(Fix::new("Remove this semicolon", source_change, semicolon)) | ||
126 | } | ||
127 | } | ||
128 | |||
108 | impl DiagnosticWithFix for IncorrectCase { | 129 | impl DiagnosticWithFix for IncorrectCase { |
109 | fn fix(&self, sema: &Semantics<RootDatabase>) -> Option<Fix> { | 130 | fn fix(&self, sema: &Semantics<RootDatabase>) -> Option<Fix> { |
110 | let root = sema.db.parse_or_expand(self.file)?; | 131 | let root = sema.db.parse_or_expand(self.file)?; |