aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r--crates/ra_lsp_server/src/main_loop/handlers.rs6
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/main.rs58
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() {}
172fn test_format_document() { 172fn test_format_document() {
173 let server = project( 173 let server = project(
174 r#" 174 r#"
175//- Cargo.toml
175[package] 176[package]
176name = "foo" 177name = "foo"
177version = "0.0.0" 178version = "0.0.0"
@@ -220,6 +221,63 @@ pub use std::collections::HashMap;
220} 221}
221 222
222#[test] 223#[test]
224fn test_format_document_2018() {
225 let server = project(
226 r#"
227//- Cargo.toml
228[package]
229name = "foo"
230version = "0.0.0"
231edition = "2018"
232
233//- src/lib.rs
234mod bar;
235
236async fn test() {
237}
238
239fn main() {
240}
241
242pub 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
260async fn test() {}
261
262fn main() {}
263
264pub 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]
223fn test_missing_module_code_action() { 281fn test_missing_module_code_action() {
224 let server = project( 282 let server = project(
225 r#" 283 r#"