diff options
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 6 | ||||
-rw-r--r-- | crates/ra_lsp_server/tests/heavy_tests/main.rs | 58 |
2 files changed, 64 insertions, 0 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index ca47ff5e1..409583634 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -555,12 +555,18 @@ pub fn handle_formatting( | |||
555 | let _p = profile("handle_formatting"); | 555 | let _p = profile("handle_formatting"); |
556 | let file_id = params.text_document.try_conv_with(&world)?; | 556 | let file_id = params.text_document.try_conv_with(&world)?; |
557 | let file = world.analysis().file_text(file_id)?; | 557 | let file = world.analysis().file_text(file_id)?; |
558 | let crate_ids = world.analysis().crate_for(file_id)?; | ||
558 | 559 | ||
559 | let file_line_index = world.analysis().file_line_index(file_id)?; | 560 | let file_line_index = world.analysis().file_line_index(file_id)?; |
560 | let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); | 561 | let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); |
561 | 562 | ||
562 | use std::process; | 563 | use std::process; |
563 | let mut rustfmt = process::Command::new("rustfmt"); | 564 | let mut rustfmt = process::Command::new("rustfmt"); |
565 | if let Some(&crate_id) = crate_ids.first() { | ||
566 | // Assume all crates are in the same edition | ||
567 | let edition = world.analysis().crate_edition(crate_id)?; | ||
568 | rustfmt.args(&["--edition", &edition.to_string()]); | ||
569 | } | ||
564 | rustfmt.stdin(process::Stdio::piped()).stdout(process::Stdio::piped()); | 570 | rustfmt.stdin(process::Stdio::piped()).stdout(process::Stdio::piped()); |
565 | 571 | ||
566 | if let Ok(path) = params.text_document.uri.to_file_path() { | 572 | if let Ok(path) = params.text_document.uri.to_file_path() { |
diff --git a/crates/ra_lsp_server/tests/heavy_tests/main.rs b/crates/ra_lsp_server/tests/heavy_tests/main.rs index 29224cbe8..fec50bd25 100644 --- a/crates/ra_lsp_server/tests/heavy_tests/main.rs +++ b/crates/ra_lsp_server/tests/heavy_tests/main.rs | |||
@@ -172,6 +172,7 @@ fn main() {} | |||
172 | fn test_format_document() { | 172 | fn test_format_document() { |
173 | let server = project( | 173 | let server = project( |
174 | r#" | 174 | r#" |
175 | //- Cargo.toml | ||
175 | [package] | 176 | [package] |
176 | name = "foo" | 177 | name = "foo" |
177 | version = "0.0.0" | 178 | version = "0.0.0" |
@@ -220,6 +221,63 @@ pub use std::collections::HashMap; | |||
220 | } | 221 | } |
221 | 222 | ||
222 | #[test] | 223 | #[test] |
224 | fn test_format_document_2018() { | ||
225 | let server = project( | ||
226 | r#" | ||
227 | //- Cargo.toml | ||
228 | [package] | ||
229 | name = "foo" | ||
230 | version = "0.0.0" | ||
231 | edition = "2018" | ||
232 | |||
233 | //- src/lib.rs | ||
234 | mod bar; | ||
235 | |||
236 | async fn test() { | ||
237 | } | ||
238 | |||
239 | fn main() { | ||
240 | } | ||
241 | |||
242 | pub use std::collections::HashMap; | ||
243 | "#, | ||
244 | ); | ||
245 | server.wait_until_workspace_is_loaded(); | ||
246 | |||
247 | server.request::<Formatting>( | ||
248 | DocumentFormattingParams { | ||
249 | text_document: server.doc_id("src/lib.rs"), | ||
250 | options: FormattingOptions { | ||
251 | tab_size: 4, | ||
252 | insert_spaces: false, | ||
253 | properties: HashMap::new(), | ||
254 | }, | ||
255 | }, | ||
256 | json!([ | ||
257 | { | ||
258 | "newText": r#"mod bar; | ||
259 | |||
260 | async fn test() {} | ||
261 | |||
262 | fn main() {} | ||
263 | |||
264 | pub use std::collections::HashMap; | ||
265 | "#, | ||
266 | "range": { | ||
267 | "end": { | ||
268 | "character": 0, | ||
269 | "line": 10 | ||
270 | }, | ||
271 | "start": { | ||
272 | "character": 0, | ||
273 | "line": 0 | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | ]), | ||
278 | ); | ||
279 | } | ||
280 | #[test] | ||
223 | fn test_missing_module_code_action() { | 281 | fn test_missing_module_code_action() { |
224 | let server = project( | 282 | let server = project( |
225 | r#" | 283 | r#" |