diff options
author | Aleksey Kladov <[email protected]> | 2021-05-17 10:04:17 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-05-17 10:04:17 +0100 |
commit | fa7fc0e5cb5343e2c59220fb91370f005c13be3a (patch) | |
tree | 061cc578b86de2cd72f8f8a57e2979e5c988f7fc /crates/ide/src/diagnostics/fixes/remove_semicolon.rs | |
parent | db8fbb99ce6e60c072250bada004de9645431a43 (diff) |
internal: scalable module structure for fixits
Diffstat (limited to 'crates/ide/src/diagnostics/fixes/remove_semicolon.rs')
-rw-r--r-- | crates/ide/src/diagnostics/fixes/remove_semicolon.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/ide/src/diagnostics/fixes/remove_semicolon.rs b/crates/ide/src/diagnostics/fixes/remove_semicolon.rs new file mode 100644 index 000000000..058002c69 --- /dev/null +++ b/crates/ide/src/diagnostics/fixes/remove_semicolon.rs | |||
@@ -0,0 +1,31 @@ | |||
1 | use hir::{db::AstDatabase, diagnostics::RemoveThisSemicolon, Semantics}; | ||
2 | use ide_assists::{Assist, AssistResolveStrategy}; | ||
3 | use ide_db::{source_change::SourceChange, RootDatabase}; | ||
4 | use syntax::{ast, AstNode}; | ||
5 | use text_edit::TextEdit; | ||
6 | |||
7 | use crate::diagnostics::{fix, DiagnosticWithFix}; | ||
8 | |||
9 | impl DiagnosticWithFix for RemoveThisSemicolon { | ||
10 | fn fix( | ||
11 | &self, | ||
12 | sema: &Semantics<RootDatabase>, | ||
13 | _resolve: &AssistResolveStrategy, | ||
14 | ) -> Option<Assist> { | ||
15 | let root = sema.db.parse_or_expand(self.file)?; | ||
16 | |||
17 | let semicolon = self | ||
18 | .expr | ||
19 | .to_node(&root) | ||
20 | .syntax() | ||
21 | .parent() | ||
22 | .and_then(ast::ExprStmt::cast) | ||
23 | .and_then(|expr| expr.semicolon_token())? | ||
24 | .text_range(); | ||
25 | |||
26 | let edit = TextEdit::delete(semicolon); | ||
27 | let source_change = SourceChange::from_text_edit(self.file.original_file(sema.db), edit); | ||
28 | |||
29 | Some(fix("remove_semicolon", "Remove this semicolon", source_change, semicolon)) | ||
30 | } | ||
31 | } | ||