aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/diagnostics
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-12-10 16:18:49 +0000
committerGitHub <[email protected]>2020-12-10 16:18:49 +0000
commit44978acf51e25513ef8420e228221273f42abf8c (patch)
treecc798690135a0adc9ee43bdb6d2b99686ce9e6f1 /crates/ide/src/diagnostics
parent5a6065e3b05e2624c4c340f928b20c04ce579928 (diff)
parentbbb0bc7b041278480edbfaa7c3cdadc5a704fc03 (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')
-rw-r--r--crates/ide/src/diagnostics/fixes.rs23
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
108impl 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
108impl DiagnosticWithFix for IncorrectCase { 129impl 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)?;