diff options
Diffstat (limited to 'crates/ra_editor/src/lib.rs')
-rw-r--r-- | crates/ra_editor/src/lib.rs | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/crates/ra_editor/src/lib.rs b/crates/ra_editor/src/lib.rs index 7a689b0f2..898d9b8c7 100644 --- a/crates/ra_editor/src/lib.rs +++ b/crates/ra_editor/src/lib.rs | |||
@@ -42,6 +42,7 @@ pub struct Diagnostic { | |||
42 | pub range: TextRange, | 42 | pub range: TextRange, |
43 | pub msg: String, | 43 | pub msg: String, |
44 | pub severity: Severity, | 44 | pub severity: Severity, |
45 | pub fix: Option<LocalEdit>, | ||
45 | } | 46 | } |
46 | 47 | ||
47 | #[derive(Debug)] | 48 | #[derive(Debug)] |
@@ -111,6 +112,7 @@ pub fn diagnostics(file: &SourceFileNode) -> Vec<Diagnostic> { | |||
111 | range: location_to_range(err.location()), | 112 | range: location_to_range(err.location()), |
112 | msg: format!("Syntax Error: {}", err), | 113 | msg: format!("Syntax Error: {}", err), |
113 | severity: Severity::Error, | 114 | severity: Severity::Error, |
115 | fix: None, | ||
114 | }) | 116 | }) |
115 | .collect(); | 117 | .collect(); |
116 | 118 | ||
@@ -124,11 +126,27 @@ fn check_unnecessary_braces_in_use_statement(file: &SourceFileNode) -> Vec<Diagn | |||
124 | let mut diagnostics = Vec::new(); | 126 | let mut diagnostics = Vec::new(); |
125 | for node in file.syntax().descendants() { | 127 | for node in file.syntax().descendants() { |
126 | if let Some(use_tree_list) = ast::UseTreeList::cast(node) { | 128 | if let Some(use_tree_list) = ast::UseTreeList::cast(node) { |
127 | if use_tree_list.use_trees().count() <= 1 { | 129 | if use_tree_list.use_trees().count() == 1 { |
130 | let range = use_tree_list.syntax().range(); | ||
131 | // use_tree_list always has one child, so we use unwrap directly here. | ||
132 | let to_replace = typing::single_use_tree(use_tree_list) | ||
133 | .unwrap() | ||
134 | .syntax() | ||
135 | .text() | ||
136 | .to_string(); | ||
137 | let mut edit_builder = TextEditBuilder::new(); | ||
138 | edit_builder.delete(range); | ||
139 | edit_builder.insert(range.start(), to_replace); | ||
140 | |||
128 | diagnostics.push(Diagnostic { | 141 | diagnostics.push(Diagnostic { |
129 | range: use_tree_list.syntax().range(), | 142 | range: range, |
130 | msg: format!("Unnecessary braces in use statement"), | 143 | msg: format!("Unnecessary braces in use statement"), |
131 | severity: Severity::WeakWarning, | 144 | severity: Severity::WeakWarning, |
145 | fix: Some(LocalEdit { | ||
146 | label: "Remove unnecessary braces".to_string(), | ||
147 | edit: edit_builder.finish(), | ||
148 | cursor_position: None, | ||
149 | }), | ||
132 | }) | 150 | }) |
133 | } | 151 | } |
134 | } | 152 | } |
@@ -250,9 +268,7 @@ fn main() {} | |||
250 | ); | 268 | ); |
251 | let diagnostics = check_unnecessary_braces_in_use_statement(&file); | 269 | let diagnostics = check_unnecessary_braces_in_use_statement(&file); |
252 | assert_eq_dbg( | 270 | assert_eq_dbg( |
253 | r#"[Diagnostic { range: [12; 15), msg: "Unnecessary braces in use statement", severity: WeakWarning }, | 271 | "[Diagnostic { range: [12; 15), msg: \"Unnecessary braces in use statement\", severity: WeakWarning, fix: Some(LocalEdit { label: \"Remove unnecessary braces\", edit: TextEdit { atoms: [AtomTextEdit { delete: [12; 12), insert: \"b\" }, AtomTextEdit { delete: [12; 15), insert: \"\" }] }, cursor_position: Some(12) }) }, Diagnostic { range: [24; 27), msg: \"Unnecessary braces in use statement\", severity: WeakWarning, fix: Some(LocalEdit { label: \"Remove unnecessary braces\", edit: TextEdit { atoms: [AtomTextEdit { delete: [24; 24), insert: \"c\" }, AtomTextEdit { delete: [24; 27), insert: \"\" }] }, cursor_position: Some(24) }) }, Diagnostic { range: [61; 64), msg: \"Unnecessary braces in use statement\", severity: WeakWarning, fix: Some(LocalEdit { label: \"Remove unnecessary braces\", edit: TextEdit { atoms: [AtomTextEdit { delete: [61; 61), insert: \"e\" }, AtomTextEdit { delete: [61; 64), insert: \"\" }] }, cursor_position: Some(61) }) }]", |
254 | Diagnostic { range: [24; 27), msg: "Unnecessary braces in use statement", severity: WeakWarning }, | ||
255 | Diagnostic { range: [61; 64), msg: "Unnecessary braces in use statement", severity: WeakWarning }]"#, | ||
256 | &diagnostics, | 272 | &diagnostics, |
257 | ) | 273 | ) |
258 | } | 274 | } |