diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-06 18:17:09 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-12-06 18:17:09 +0000 |
commit | 8e60e751cbcfa47c7bed788dfe2ab5cebfcb78b3 (patch) | |
tree | 58f01a945f7c27d6baaecf38e84617ca46782073 /crates | |
parent | 5ad84f0ca5fe9bb250cd4026e5dcb5478d932666 (diff) | |
parent | 28ddecf6c99ef23bc96b9eb7bc8ee049f1732e76 (diff) |
Merge #260
260: Modernize r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates')
27 files changed, 82 insertions, 180 deletions
diff --git a/crates/gen_lsp_server/Cargo.toml b/crates/gen_lsp_server/Cargo.toml index cf5c34a88..08b357b1e 100644 --- a/crates/gen_lsp_server/Cargo.toml +++ b/crates/gen_lsp_server/Cargo.toml | |||
@@ -1,4 +1,5 @@ | |||
1 | [package] | 1 | [package] |
2 | edition = "2018" | ||
2 | name = "gen_lsp_server" | 3 | name = "gen_lsp_server" |
3 | version = "0.1.0" | 4 | version = "0.1.0" |
4 | authors = ["Aleksey Kladov <[email protected]>"] | 5 | authors = ["Aleksey Kladov <[email protected]>"] |
diff --git a/crates/gen_lsp_server/src/lib.rs b/crates/gen_lsp_server/src/lib.rs index 5dab8f408..8779fbf0f 100644 --- a/crates/gen_lsp_server/src/lib.rs +++ b/crates/gen_lsp_server/src/lib.rs | |||
@@ -59,16 +59,7 @@ | |||
59 | //! } | 59 | //! } |
60 | //! ``` | 60 | //! ``` |
61 | 61 | ||
62 | #[macro_use] | 62 | use failure::{bail, format_err}; |
63 | extern crate failure; | ||
64 | #[macro_use] | ||
65 | extern crate log; | ||
66 | extern crate serde; | ||
67 | extern crate serde_json; | ||
68 | #[macro_use] | ||
69 | extern crate serde_derive; | ||
70 | extern crate crossbeam_channel; | ||
71 | extern crate languageserver_types; | ||
72 | 63 | ||
73 | mod msg; | 64 | mod msg; |
74 | mod stdio; | 65 | mod stdio; |
@@ -81,7 +72,7 @@ use languageserver_types::{ | |||
81 | }; | 72 | }; |
82 | 73 | ||
83 | pub type Result<T> = ::std::result::Result<T, failure::Error>; | 74 | pub type Result<T> = ::std::result::Result<T, failure::Error>; |
84 | pub use { | 75 | pub use crate::{ |
85 | msg::{ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, RawResponseError}, | 76 | msg::{ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, RawResponseError}, |
86 | stdio::{stdio_transport, Threads}, | 77 | stdio::{stdio_transport, Threads}, |
87 | }; | 78 | }; |
@@ -98,18 +89,18 @@ pub fn run_server( | |||
98 | sender: Sender<RawMessage>, | 89 | sender: Sender<RawMessage>, |
99 | server: impl FnOnce(InitializeParams, &Receiver<RawMessage>, &Sender<RawMessage>) -> Result<()>, | 90 | server: impl FnOnce(InitializeParams, &Receiver<RawMessage>, &Sender<RawMessage>) -> Result<()>, |
100 | ) -> Result<()> { | 91 | ) -> Result<()> { |
101 | info!("lsp server initializes"); | 92 | log::info!("lsp server initializes"); |
102 | let params = initialize(&receiver, &sender, caps)?; | 93 | let params = initialize(&receiver, &sender, caps)?; |
103 | info!("lsp server initialized, serving requests"); | 94 | log::info!("lsp server initialized, serving requests"); |
104 | server(params, &receiver, &sender)?; | 95 | server(params, &receiver, &sender)?; |
105 | info!("lsp server waiting for exit notification"); | 96 | log::info!("lsp server waiting for exit notification"); |
106 | match receiver.recv() { | 97 | match receiver.recv() { |
107 | Some(RawMessage::Notification(n)) => n | 98 | Some(RawMessage::Notification(n)) => n |
108 | .cast::<Exit>() | 99 | .cast::<Exit>() |
109 | .map_err(|n| format_err!("unexpected notification during shutdown: {:?}", n))?, | 100 | .map_err(|n| format_err!("unexpected notification during shutdown: {:?}", n))?, |
110 | m => bail!("unexpected message during shutdown: {:?}", m), | 101 | m => bail!("unexpected message during shutdown: {:?}", m), |
111 | } | 102 | } |
112 | info!("lsp server shutdown complete"); | 103 | log::info!("lsp server shutdown complete"); |
113 | Ok(()) | 104 | Ok(()) |
114 | } | 105 | } |
115 | 106 | ||
diff --git a/crates/gen_lsp_server/src/msg.rs b/crates/gen_lsp_server/src/msg.rs index e1b27c808..1e5384380 100644 --- a/crates/gen_lsp_server/src/msg.rs +++ b/crates/gen_lsp_server/src/msg.rs | |||
@@ -1,10 +1,11 @@ | |||
1 | use std::io::{BufRead, Write}; | 1 | use std::io::{BufRead, Write}; |
2 | 2 | ||
3 | use languageserver_types::{notification::Notification, request::Request}; | 3 | use languageserver_types::{notification::Notification, request::Request}; |
4 | use serde::{de::DeserializeOwned, Serialize}; | 4 | use serde_derive::{Deserialize, Serialize}; |
5 | use serde_json::{from_str, from_value, to_string, to_value, Value}; | 5 | use serde_json::{from_str, from_value, to_string, to_value, Value}; |
6 | use failure::{bail, format_err}; | ||
6 | 7 | ||
7 | use Result; | 8 | use crate::Result; |
8 | 9 | ||
9 | #[derive(Debug, Serialize, Deserialize, Clone)] | 10 | #[derive(Debug, Serialize, Deserialize, Clone)] |
10 | #[serde(untagged)] | 11 | #[serde(untagged)] |
@@ -91,7 +92,7 @@ impl RawRequest { | |||
91 | pub fn new<R>(id: u64, params: &R::Params) -> RawRequest | 92 | pub fn new<R>(id: u64, params: &R::Params) -> RawRequest |
92 | where | 93 | where |
93 | R: Request, | 94 | R: Request, |
94 | R::Params: Serialize, | 95 | R::Params: serde::Serialize, |
95 | { | 96 | { |
96 | RawRequest { | 97 | RawRequest { |
97 | id, | 98 | id, |
@@ -102,7 +103,7 @@ impl RawRequest { | |||
102 | pub fn cast<R>(self) -> ::std::result::Result<(u64, R::Params), RawRequest> | 103 | pub fn cast<R>(self) -> ::std::result::Result<(u64, R::Params), RawRequest> |
103 | where | 104 | where |
104 | R: Request, | 105 | R: Request, |
105 | R::Params: DeserializeOwned, | 106 | R::Params: serde::de::DeserializeOwned, |
106 | { | 107 | { |
107 | if self.method != R::METHOD { | 108 | if self.method != R::METHOD { |
108 | return Err(self); | 109 | return Err(self); |
@@ -117,7 +118,7 @@ impl RawResponse { | |||
117 | pub fn ok<R>(id: u64, result: &R::Result) -> RawResponse | 118 | pub fn ok<R>(id: u64, result: &R::Result) -> RawResponse |
118 | where | 119 | where |
119 | R: Request, | 120 | R: Request, |
120 | R::Result: Serialize, | 121 | R::Result: serde::Serialize, |
121 | { | 122 | { |
122 | RawResponse { | 123 | RawResponse { |
123 | id, | 124 | id, |
@@ -143,7 +144,7 @@ impl RawNotification { | |||
143 | pub fn new<N>(params: &N::Params) -> RawNotification | 144 | pub fn new<N>(params: &N::Params) -> RawNotification |
144 | where | 145 | where |
145 | N: Notification, | 146 | N: Notification, |
146 | N::Params: Serialize, | 147 | N::Params: serde::Serialize, |
147 | { | 148 | { |
148 | RawNotification { | 149 | RawNotification { |
149 | method: N::METHOD.to_string(), | 150 | method: N::METHOD.to_string(), |
@@ -153,7 +154,7 @@ impl RawNotification { | |||
153 | pub fn cast<N>(self) -> ::std::result::Result<N::Params, RawNotification> | 154 | pub fn cast<N>(self) -> ::std::result::Result<N::Params, RawNotification> |
154 | where | 155 | where |
155 | N: Notification, | 156 | N: Notification, |
156 | N::Params: DeserializeOwned, | 157 | N::Params: serde::de::DeserializeOwned, |
157 | { | 158 | { |
158 | if self.method != N::METHOD { | 159 | if self.method != N::METHOD { |
159 | return Err(self); | 160 | return Err(self); |
@@ -191,12 +192,12 @@ fn read_msg_text(inp: &mut impl BufRead) -> Result<Option<String>> { | |||
191 | buf.resize(size, 0); | 192 | buf.resize(size, 0); |
192 | inp.read_exact(&mut buf)?; | 193 | inp.read_exact(&mut buf)?; |
193 | let buf = String::from_utf8(buf)?; | 194 | let buf = String::from_utf8(buf)?; |
194 | debug!("< {}", buf); | 195 | log::debug!("< {}", buf); |
195 | Ok(Some(buf)) | 196 | Ok(Some(buf)) |
196 | } | 197 | } |
197 | 198 | ||
198 | fn write_msg_text(out: &mut impl Write, msg: &str) -> Result<()> { | 199 | fn write_msg_text(out: &mut impl Write, msg: &str) -> Result<()> { |
199 | debug!("> {}", msg); | 200 | log::debug!("> {}", msg); |
200 | write!(out, "Content-Length: {}\r\n\r\n", msg.len())?; | 201 | write!(out, "Content-Length: {}\r\n\r\n", msg.len())?; |
201 | out.write_all(msg.as_bytes())?; | 202 | out.write_all(msg.as_bytes())?; |
202 | out.flush()?; | 203 | out.flush()?; |
diff --git a/crates/gen_lsp_server/src/stdio.rs b/crates/gen_lsp_server/src/stdio.rs index 3d8a1712a..35d8e46d0 100644 --- a/crates/gen_lsp_server/src/stdio.rs +++ b/crates/gen_lsp_server/src/stdio.rs | |||
@@ -4,8 +4,9 @@ use std::{ | |||
4 | }; | 4 | }; |
5 | 5 | ||
6 | use crossbeam_channel::{bounded, Receiver, Sender}; | 6 | use crossbeam_channel::{bounded, Receiver, Sender}; |
7 | use failure::bail; | ||
7 | 8 | ||
8 | use {RawMessage, Result}; | 9 | use crate::{RawMessage, Result}; |
9 | 10 | ||
10 | pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) { | 11 | pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) { |
11 | let (writer_sender, mut writer_receiver) = bounded::<RawMessage>(16); | 12 | let (writer_sender, mut writer_receiver) = bounded::<RawMessage>(16); |
diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 90528edfd..4b8b10816 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs | |||
@@ -1,14 +1,6 @@ | |||
1 | //! ra_analyzer crate is the brain of Rust analyzer. It relies on the `salsa` | 1 | //! ra_analyzer crate is the brain of Rust analyzer. It relies on the `salsa` |
2 | //! crate, which provides and incremental on-demand database of facts. | 2 | //! crate, which provides and incremental on-demand database of facts. |
3 | 3 | ||
4 | extern crate fst; | ||
5 | extern crate ra_editor; | ||
6 | extern crate ra_syntax; | ||
7 | extern crate rayon; | ||
8 | extern crate relative_path; | ||
9 | extern crate rustc_hash; | ||
10 | extern crate salsa; | ||
11 | |||
12 | macro_rules! ctry { | 4 | macro_rules! ctry { |
13 | ($expr:expr) => { | 5 | ($expr:expr) => { |
14 | match $expr { | 6 | match $expr { |
diff --git a/crates/ra_analysis/tests/tests.rs b/crates/ra_analysis/tests/tests.rs index 71d20dbe9..4ce2c5c85 100644 --- a/crates/ra_analysis/tests/tests.rs +++ b/crates/ra_analysis/tests/tests.rs | |||
@@ -1,10 +1,3 @@ | |||
1 | extern crate ra_analysis; | ||
2 | extern crate ra_editor; | ||
3 | extern crate ra_syntax; | ||
4 | extern crate relative_path; | ||
5 | extern crate rustc_hash; | ||
6 | extern crate test_utils; | ||
7 | |||
8 | use ra_syntax::TextRange; | 1 | use ra_syntax::TextRange; |
9 | use test_utils::assert_eq_dbg; | 2 | use test_utils::assert_eq_dbg; |
10 | 3 | ||
diff --git a/crates/ra_cli/src/main.rs b/crates/ra_cli/src/main.rs index 5ca86df4d..939f7fe77 100644 --- a/crates/ra_cli/src/main.rs +++ b/crates/ra_cli/src/main.rs | |||
@@ -1,11 +1,3 @@ | |||
1 | extern crate clap; | ||
2 | #[macro_use] | ||
3 | extern crate failure; | ||
4 | extern crate join_to_string; | ||
5 | extern crate ra_editor; | ||
6 | extern crate ra_syntax; | ||
7 | extern crate tools; | ||
8 | |||
9 | use std::{fs, io::Read, path::Path, time::Instant}; | 1 | use std::{fs, io::Read, path::Path, time::Instant}; |
10 | 2 | ||
11 | use clap::{App, Arg, SubCommand}; | 3 | use clap::{App, Arg, SubCommand}; |
@@ -97,7 +89,7 @@ fn render_test(file: &Path, line: usize) -> Result<(String, String)> { | |||
97 | *start_line <= line && line <= *start_line + t.text.lines().count() | 89 | *start_line <= line && line <= *start_line + t.text.lines().count() |
98 | }); | 90 | }); |
99 | let test = match test { | 91 | let test = match test { |
100 | None => bail!("No test found at line {} at {}", line, file.display()), | 92 | None => failure::bail!("No test found at line {} at {}", line, file.display()), |
101 | Some((_start_line, test)) => test, | 93 | Some((_start_line, test)) => test, |
102 | }; | 94 | }; |
103 | let file = SourceFileNode::parse(&test.text); | 95 | let file = SourceFileNode::parse(&test.text); |
diff --git a/crates/ra_editor/src/lib.rs b/crates/ra_editor/src/lib.rs index c6b116159..ce080ee97 100644 --- a/crates/ra_editor/src/lib.rs +++ b/crates/ra_editor/src/lib.rs | |||
@@ -1,12 +1,3 @@ | |||
1 | extern crate itertools; | ||
2 | extern crate join_to_string; | ||
3 | extern crate ra_syntax; | ||
4 | extern crate rustc_hash; | ||
5 | extern crate superslice; | ||
6 | #[cfg(test)] | ||
7 | #[macro_use] | ||
8 | extern crate test_utils as _test_utils; | ||
9 | |||
10 | mod code_actions; | 1 | mod code_actions; |
11 | mod edit; | 2 | mod edit; |
12 | mod extend_selection; | 3 | mod extend_selection; |
@@ -154,7 +145,7 @@ pub fn find_node_at_offset<'a, N: AstNode<'a>>( | |||
154 | #[cfg(test)] | 145 | #[cfg(test)] |
155 | mod tests { | 146 | mod tests { |
156 | use super::*; | 147 | use super::*; |
157 | use crate::test_utils::{add_cursor, assert_eq_dbg, extract_offset}; | 148 | use crate::test_utils::{add_cursor, assert_eq_dbg, extract_offset, assert_eq_text}; |
158 | 149 | ||
159 | #[test] | 150 | #[test] |
160 | fn test_highlighting() { | 151 | fn test_highlighting() { |
diff --git a/crates/ra_editor/src/test_utils.rs b/crates/ra_editor/src/test_utils.rs index cbeb6433b..f0a4f250a 100644 --- a/crates/ra_editor/src/test_utils.rs +++ b/crates/ra_editor/src/test_utils.rs | |||
@@ -1,7 +1,8 @@ | |||
1 | use crate::LocalEdit; | ||
2 | pub use crate::_test_utils::*; | ||
3 | use ra_syntax::{SourceFileNode, TextRange, TextUnit}; | 1 | use ra_syntax::{SourceFileNode, TextRange, TextUnit}; |
4 | 2 | ||
3 | use crate::LocalEdit; | ||
4 | pub use test_utils::*; | ||
5 | |||
5 | pub fn check_action<F: Fn(&SourceFileNode, TextUnit) -> Option<LocalEdit>>( | 6 | pub fn check_action<F: Fn(&SourceFileNode, TextUnit) -> Option<LocalEdit>>( |
6 | before: &str, | 7 | before: &str, |
7 | after: &str, | 8 | after: &str, |
diff --git a/crates/ra_editor/src/typing.rs b/crates/ra_editor/src/typing.rs index f894d8392..9703e0371 100644 --- a/crates/ra_editor/src/typing.rs +++ b/crates/ra_editor/src/typing.rs | |||
@@ -238,7 +238,7 @@ fn compute_ws(left: SyntaxNodeRef, right: SyntaxNodeRef) -> &'static str { | |||
238 | #[cfg(test)] | 238 | #[cfg(test)] |
239 | mod tests { | 239 | mod tests { |
240 | use super::*; | 240 | use super::*; |
241 | use crate::test_utils::{add_cursor, check_action, extract_offset, extract_range}; | 241 | use crate::test_utils::{add_cursor, check_action, extract_offset, extract_range, assert_eq_text}; |
242 | 242 | ||
243 | fn check_join_lines(before: &str, after: &str) { | 243 | fn check_join_lines(before: &str, after: &str) { |
244 | check_action(before, after, |file, offset| { | 244 | check_action(before, after, |file, offset| { |
diff --git a/crates/ra_lsp_server/src/lib.rs b/crates/ra_lsp_server/src/lib.rs index f9481e04d..75c6fa1b8 100644 --- a/crates/ra_lsp_server/src/lib.rs +++ b/crates/ra_lsp_server/src/lib.rs | |||
@@ -1,30 +1,3 @@ | |||
1 | #[macro_use] | ||
2 | extern crate failure; | ||
3 | #[macro_use] | ||
4 | extern crate serde_derive; | ||
5 | extern crate languageserver_types; | ||
6 | extern crate serde; | ||
7 | extern crate serde_json; | ||
8 | #[macro_use] | ||
9 | extern crate crossbeam_channel; | ||
10 | extern crate rayon; | ||
11 | #[macro_use] | ||
12 | extern crate log; | ||
13 | extern crate cargo_metadata; | ||
14 | extern crate drop_bomb; | ||
15 | #[macro_use] | ||
16 | extern crate failure_derive; | ||
17 | extern crate im; | ||
18 | extern crate relative_path; | ||
19 | extern crate rustc_hash; | ||
20 | extern crate url_serde; | ||
21 | extern crate walkdir; | ||
22 | |||
23 | extern crate gen_lsp_server; | ||
24 | extern crate ra_analysis; | ||
25 | extern crate ra_editor; | ||
26 | extern crate ra_syntax; | ||
27 | |||
28 | mod caps; | 1 | mod caps; |
29 | mod conv; | 2 | mod conv; |
30 | mod main_loop; | 3 | mod main_loop; |
diff --git a/crates/ra_lsp_server/src/main.rs b/crates/ra_lsp_server/src/main.rs index 8301a1044..9ba972562 100644 --- a/crates/ra_lsp_server/src/main.rs +++ b/crates/ra_lsp_server/src/main.rs | |||
@@ -1,15 +1,5 @@ | |||
1 | #[macro_use] | 1 | use serde_derive::Deserialize; |
2 | extern crate log; | 2 | use serde::Deserialize as _D; |
3 | #[macro_use] | ||
4 | extern crate failure; | ||
5 | #[macro_use] | ||
6 | extern crate serde_derive; | ||
7 | extern crate serde; | ||
8 | extern crate flexi_logger; | ||
9 | extern crate gen_lsp_server; | ||
10 | extern crate ra_lsp_server; | ||
11 | |||
12 | use serde::Deserialize; | ||
13 | use flexi_logger::{Duplicate, Logger}; | 3 | use flexi_logger::{Duplicate, Logger}; |
14 | use gen_lsp_server::{run_server, stdio_transport}; | 4 | use gen_lsp_server::{run_server, stdio_transport}; |
15 | use ra_lsp_server::Result; | 5 | use ra_lsp_server::Result; |
@@ -21,15 +11,15 @@ fn main() -> Result<()> { | |||
21 | .log_to_file() | 11 | .log_to_file() |
22 | .directory("log") | 12 | .directory("log") |
23 | .start()?; | 13 | .start()?; |
24 | info!("lifecycle: server started"); | 14 | log::info!("lifecycle: server started"); |
25 | match ::std::panic::catch_unwind(main_inner) { | 15 | match ::std::panic::catch_unwind(main_inner) { |
26 | Ok(res) => { | 16 | Ok(res) => { |
27 | info!("lifecycle: terminating process with {:?}", res); | 17 | log::info!("lifecycle: terminating process with {:?}", res); |
28 | res | 18 | res |
29 | } | 19 | } |
30 | Err(_) => { | 20 | Err(_) => { |
31 | error!("server panicked"); | 21 | log::error!("server panicked"); |
32 | bail!("server panicked") | 22 | failure::bail!("server panicked") |
33 | } | 23 | } |
34 | } | 24 | } |
35 | } | 25 | } |
@@ -60,8 +50,8 @@ fn main_inner() -> Result<()> { | |||
60 | ra_lsp_server::main_loop(false, root, publish_decorations, r, s) | 50 | ra_lsp_server::main_loop(false, root, publish_decorations, r, s) |
61 | }, | 51 | }, |
62 | )?; | 52 | )?; |
63 | info!("shutting down IO..."); | 53 | log::info!("shutting down IO..."); |
64 | threads.join()?; | 54 | threads.join()?; |
65 | info!("... IO is down"); | 55 | log::info!("... IO is down"); |
66 | Ok(()) | 56 | Ok(()) |
67 | } | 57 | } |
diff --git a/crates/ra_lsp_server/src/main_loop/mod.rs b/crates/ra_lsp_server/src/main_loop/mod.rs index 36f08be2f..0e1878906 100644 --- a/crates/ra_lsp_server/src/main_loop/mod.rs +++ b/crates/ra_lsp_server/src/main_loop/mod.rs | |||
@@ -3,7 +3,7 @@ mod subscriptions; | |||
3 | 3 | ||
4 | use std::path::PathBuf; | 4 | use std::path::PathBuf; |
5 | 5 | ||
6 | use crossbeam_channel::{unbounded, Receiver, Sender}; | 6 | use crossbeam_channel::{unbounded, select, Receiver, Sender}; |
7 | use gen_lsp_server::{ | 7 | use gen_lsp_server::{ |
8 | handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, | 8 | handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, |
9 | }; | 9 | }; |
@@ -12,6 +12,8 @@ use ra_analysis::{Canceled, FileId, LibraryData}; | |||
12 | use rayon::{self, ThreadPool}; | 12 | use rayon::{self, ThreadPool}; |
13 | use rustc_hash::FxHashSet; | 13 | use rustc_hash::FxHashSet; |
14 | use serde::{de::DeserializeOwned, Serialize}; | 14 | use serde::{de::DeserializeOwned, Serialize}; |
15 | use failure::{format_err, bail}; | ||
16 | use failure_derive::Fail; | ||
15 | 17 | ||
16 | use crate::{ | 18 | use crate::{ |
17 | main_loop::subscriptions::Subscriptions, | 19 | main_loop::subscriptions::Subscriptions, |
@@ -54,14 +56,14 @@ pub fn main_loop( | |||
54 | ) -> Result<()> { | 56 | ) -> Result<()> { |
55 | let pool = rayon::ThreadPoolBuilder::new() | 57 | let pool = rayon::ThreadPoolBuilder::new() |
56 | .num_threads(4) | 58 | .num_threads(4) |
57 | .panic_handler(|_| error!("thread panicked :(")) | 59 | .panic_handler(|_| log::error!("thread panicked :(")) |
58 | .build() | 60 | .build() |
59 | .unwrap(); | 61 | .unwrap(); |
60 | let (task_sender, task_receiver) = unbounded::<Task>(); | 62 | let (task_sender, task_receiver) = unbounded::<Task>(); |
61 | let (fs_worker, fs_watcher) = vfs::roots_loader(); | 63 | let (fs_worker, fs_watcher) = vfs::roots_loader(); |
62 | let (ws_worker, ws_watcher) = workspace_loader(); | 64 | let (ws_worker, ws_watcher) = workspace_loader(); |
63 | 65 | ||
64 | info!("server initialized, serving requests"); | 66 | log::info!("server initialized, serving requests"); |
65 | let mut state = ServerWorldState::default(); | 67 | let mut state = ServerWorldState::default(); |
66 | 68 | ||
67 | let mut pending_requests = FxHashSet::default(); | 69 | let mut pending_requests = FxHashSet::default(); |
@@ -82,12 +84,12 @@ pub fn main_loop( | |||
82 | &mut subs, | 84 | &mut subs, |
83 | ); | 85 | ); |
84 | 86 | ||
85 | info!("waiting for tasks to finish..."); | 87 | log::info!("waiting for tasks to finish..."); |
86 | task_receiver.for_each(|task| on_task(task, msg_sender, &mut pending_requests)); | 88 | task_receiver.for_each(|task| on_task(task, msg_sender, &mut pending_requests)); |
87 | info!("...tasks have finished"); | 89 | log::info!("...tasks have finished"); |
88 | info!("joining threadpool..."); | 90 | log::info!("joining threadpool..."); |
89 | drop(pool); | 91 | drop(pool); |
90 | info!("...threadpool has finished"); | 92 | log::info!("...threadpool has finished"); |
91 | 93 | ||
92 | let fs_res = fs_watcher.stop(); | 94 | let fs_res = fs_watcher.stop(); |
93 | let ws_res = ws_watcher.stop(); | 95 | let ws_res = ws_watcher.stop(); |
@@ -126,7 +128,7 @@ fn main_loop_inner( | |||
126 | Ws(Result<CargoWorkspace>), | 128 | Ws(Result<CargoWorkspace>), |
127 | Lib(LibraryData), | 129 | Lib(LibraryData), |
128 | } | 130 | } |
129 | trace!("selecting"); | 131 | log::trace!("selecting"); |
130 | let event = select! { | 132 | let event = select! { |
131 | recv(msg_receiver, msg) => match msg { | 133 | recv(msg_receiver, msg) => match msg { |
132 | Some(msg) => Event::Msg(msg), | 134 | Some(msg) => Event::Msg(msg), |
@@ -147,7 +149,7 @@ fn main_loop_inner( | |||
147 | match event { | 149 | match event { |
148 | Event::Task(task) => on_task(task, msg_sender, pending_requests), | 150 | Event::Task(task) => on_task(task, msg_sender, pending_requests), |
149 | Event::Fs(root, events) => { | 151 | Event::Fs(root, events) => { |
150 | info!("fs change, {}, {} events", root.display(), events.len()); | 152 | log::info!("fs change, {}, {} events", root.display(), events.len()); |
151 | if root == ws_root { | 153 | if root == ws_root { |
152 | state.apply_fs_changes(events); | 154 | state.apply_fs_changes(events); |
153 | } else { | 155 | } else { |
@@ -155,9 +157,9 @@ fn main_loop_inner( | |||
155 | let sender = libdata_sender.clone(); | 157 | let sender = libdata_sender.clone(); |
156 | pool.spawn(move || { | 158 | pool.spawn(move || { |
157 | let start = ::std::time::Instant::now(); | 159 | let start = ::std::time::Instant::now(); |
158 | info!("indexing {} ... ", root.display()); | 160 | log::info!("indexing {} ... ", root.display()); |
159 | let data = LibraryData::prepare(files, resolver); | 161 | let data = LibraryData::prepare(files, resolver); |
160 | info!("indexed {:?} {}", start.elapsed(), root.display()); | 162 | log::info!("indexed {:?} {}", start.elapsed(), root.display()); |
161 | sender.send(data); | 163 | sender.send(data); |
162 | }); | 164 | }); |
163 | } | 165 | } |
@@ -195,14 +197,14 @@ fn main_loop_inner( | |||
195 | .map(|(_idx, root)| root); | 197 | .map(|(_idx, root)| root); |
196 | 198 | ||
197 | for root in unique { | 199 | for root in unique { |
198 | debug!("sending root, {}", root.display()); | 200 | log::debug!("sending root, {}", root.display()); |
199 | fs_worker.send(root.to_owned()); | 201 | fs_worker.send(root.to_owned()); |
200 | } | 202 | } |
201 | } | 203 | } |
202 | state.set_workspaces(workspaces); | 204 | state.set_workspaces(workspaces); |
203 | state_changed = true; | 205 | state_changed = true; |
204 | } | 206 | } |
205 | Err(e) => warn!("loading workspace failed: {}", e), | 207 | Err(e) => log::warn!("loading workspace failed: {}", e), |
206 | }, | 208 | }, |
207 | Event::Lib(lib) => { | 209 | Event::Lib(lib) => { |
208 | feedback(internal_mode, "library loaded", msg_sender); | 210 | feedback(internal_mode, "library loaded", msg_sender); |
@@ -217,7 +219,7 @@ fn main_loop_inner( | |||
217 | match on_request(state, pending_requests, pool, &task_sender, req)? { | 219 | match on_request(state, pending_requests, pool, &task_sender, req)? { |
218 | None => (), | 220 | None => (), |
219 | Some(req) => { | 221 | Some(req) => { |
220 | error!("unknown request: {:?}", req); | 222 | log::error!("unknown request: {:?}", req); |
221 | let resp = RawResponse::err( | 223 | let resp = RawResponse::err( |
222 | req.id, | 224 | req.id, |
223 | ErrorCode::MethodNotFound as i32, | 225 | ErrorCode::MethodNotFound as i32, |
@@ -231,7 +233,7 @@ fn main_loop_inner( | |||
231 | on_notification(msg_sender, state, pending_requests, subs, not)?; | 233 | on_notification(msg_sender, state, pending_requests, subs, not)?; |
232 | state_changed = true; | 234 | state_changed = true; |
233 | } | 235 | } |
234 | RawMessage::Response(resp) => error!("unexpected response: {:?}", resp), | 236 | RawMessage::Response(resp) => log::error!("unexpected response: {:?}", resp), |
235 | }, | 237 | }, |
236 | }; | 238 | }; |
237 | 239 | ||
@@ -370,7 +372,7 @@ fn on_notification( | |||
370 | } | 372 | } |
371 | Err(not) => not, | 373 | Err(not) => not, |
372 | }; | 374 | }; |
373 | error!("unhandled notification: {:?}", not); | 375 | log::error!("unhandled notification: {:?}", not); |
374 | Ok(()) | 376 | Ok(()) |
375 | } | 377 | } |
376 | 378 | ||
@@ -455,7 +457,7 @@ fn update_file_notifications_on_threadpool( | |||
455 | match handlers::publish_diagnostics(&world, file_id) { | 457 | match handlers::publish_diagnostics(&world, file_id) { |
456 | Err(e) => { | 458 | Err(e) => { |
457 | if !is_canceled(&e) { | 459 | if !is_canceled(&e) { |
458 | error!("failed to compute diagnostics: {:?}", e); | 460 | log::error!("failed to compute diagnostics: {:?}", e); |
459 | } | 461 | } |
460 | } | 462 | } |
461 | Ok(params) => { | 463 | Ok(params) => { |
@@ -467,7 +469,7 @@ fn update_file_notifications_on_threadpool( | |||
467 | match handlers::publish_decorations(&world, file_id) { | 469 | match handlers::publish_decorations(&world, file_id) { |
468 | Err(e) => { | 470 | Err(e) => { |
469 | if !is_canceled(&e) { | 471 | if !is_canceled(&e) { |
470 | error!("failed to compute decorations: {:?}", e); | 472 | log::error!("failed to compute decorations: {:?}", e); |
471 | } | 473 | } |
472 | } | 474 | } |
473 | Ok(params) => { | 475 | Ok(params) => { |
diff --git a/crates/ra_lsp_server/src/project_model.rs b/crates/ra_lsp_server/src/project_model.rs index cabb336a3..3305d468a 100644 --- a/crates/ra_lsp_server/src/project_model.rs +++ b/crates/ra_lsp_server/src/project_model.rs | |||
@@ -1,12 +1,14 @@ | |||
1 | use std::path::{Path, PathBuf}; | 1 | use std::path::{Path, PathBuf}; |
2 | 2 | ||
3 | use serde_derive::Serialize; | ||
3 | use cargo_metadata::{metadata_run, CargoOpt}; | 4 | use cargo_metadata::{metadata_run, CargoOpt}; |
4 | use ra_syntax::SmolStr; | 5 | use ra_syntax::SmolStr; |
5 | use rustc_hash::{FxHashMap, FxHashSet}; | 6 | use rustc_hash::{FxHashMap, FxHashSet}; |
7 | use failure::{format_err, bail}; | ||
6 | 8 | ||
7 | use crate::{ | 9 | use crate::{ |
8 | thread_watcher::{ThreadWatcher, Worker}, | ||
9 | Result, | 10 | Result, |
11 | thread_watcher::{ThreadWatcher, Worker}, | ||
10 | }; | 12 | }; |
11 | 13 | ||
12 | #[derive(Debug, Clone)] | 14 | #[derive(Debug, Clone)] |
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index fcb7e94e1..999792ecb 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs | |||
@@ -1,3 +1,4 @@ | |||
1 | use serde_derive::{Serialize, Deserialize}; | ||
1 | use languageserver_types::{Location, Position, Range, TextDocumentIdentifier, Url}; | 2 | use languageserver_types::{Location, Position, Range, TextDocumentIdentifier, Url}; |
2 | use rustc_hash::FxHashMap; | 3 | use rustc_hash::FxHashMap; |
3 | use url_serde; | 4 | use url_serde; |
diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index 12faeb93a..c3f89ad5f 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs | |||
@@ -9,6 +9,7 @@ use ra_analysis::{ | |||
9 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, FileResolver, LibraryData, | 9 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, FileResolver, LibraryData, |
10 | }; | 10 | }; |
11 | use rustc_hash::FxHashMap; | 11 | use rustc_hash::FxHashMap; |
12 | use failure::{bail, format_err}; | ||
12 | 13 | ||
13 | use crate::{ | 14 | use crate::{ |
14 | path_map::{PathMap, Root}, | 15 | path_map::{PathMap, Root}, |
diff --git a/crates/ra_lsp_server/src/thread_watcher.rs b/crates/ra_lsp_server/src/thread_watcher.rs index 5143c77ae..99825d440 100644 --- a/crates/ra_lsp_server/src/thread_watcher.rs +++ b/crates/ra_lsp_server/src/thread_watcher.rs | |||
@@ -2,6 +2,7 @@ use std::thread; | |||
2 | 2 | ||
3 | use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; | 3 | use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; |
4 | use drop_bomb::DropBomb; | 4 | use drop_bomb::DropBomb; |
5 | use failure::format_err; | ||
5 | 6 | ||
6 | use crate::Result; | 7 | use crate::Result; |
7 | 8 | ||
@@ -48,7 +49,7 @@ impl ThreadWatcher { | |||
48 | } | 49 | } |
49 | 50 | ||
50 | pub fn stop(mut self) -> Result<()> { | 51 | pub fn stop(mut self) -> Result<()> { |
51 | info!("waiting for {} to finish ...", self.name); | 52 | log::info!("waiting for {} to finish ...", self.name); |
52 | let name = self.name; | 53 | let name = self.name; |
53 | self.bomb.defuse(); | 54 | self.bomb.defuse(); |
54 | let res = self | 55 | let res = self |
@@ -56,8 +57,8 @@ impl ThreadWatcher { | |||
56 | .join() | 57 | .join() |
57 | .map_err(|_| format_err!("ThreadWatcher {} died", name)); | 58 | .map_err(|_| format_err!("ThreadWatcher {} died", name)); |
58 | match &res { | 59 | match &res { |
59 | Ok(()) => info!("... {} terminated with ok", name), | 60 | Ok(()) => log::info!("... {} terminated with ok", name), |
60 | Err(_) => error!("... {} terminated with err", name), | 61 | Err(_) => log::error!("... {} terminated with err", name), |
61 | } | 62 | } |
62 | res | 63 | res |
63 | } | 64 | } |
diff --git a/crates/ra_lsp_server/src/vfs.rs b/crates/ra_lsp_server/src/vfs.rs index 6e317d854..00ab3e6c3 100644 --- a/crates/ra_lsp_server/src/vfs.rs +++ b/crates/ra_lsp_server/src/vfs.rs | |||
@@ -25,9 +25,9 @@ pub fn roots_loader() -> (Worker<PathBuf, (PathBuf, Vec<FileEvent>)>, ThreadWatc | |||
25 | |input_receiver, output_sender| { | 25 | |input_receiver, output_sender| { |
26 | input_receiver | 26 | input_receiver |
27 | .map(|path| { | 27 | .map(|path| { |
28 | debug!("loading {} ...", path.as_path().display()); | 28 | log::debug!("loading {} ...", path.as_path().display()); |
29 | let events = load_root(path.as_path()); | 29 | let events = load_root(path.as_path()); |
30 | debug!("... loaded {}", path.as_path().display()); | 30 | log::debug!("... loaded {}", path.as_path().display()); |
31 | (path, events) | 31 | (path, events) |
32 | }) | 32 | }) |
33 | .for_each(|it| output_sender.send(it)) | 33 | .for_each(|it| output_sender.send(it)) |
@@ -41,7 +41,7 @@ fn load_root(path: &Path) -> Vec<FileEvent> { | |||
41 | let entry = match entry { | 41 | let entry = match entry { |
42 | Ok(entry) => entry, | 42 | Ok(entry) => entry, |
43 | Err(e) => { | 43 | Err(e) => { |
44 | warn!("watcher error: {}", e); | 44 | log::warn!("watcher error: {}", e); |
45 | continue; | 45 | continue; |
46 | } | 46 | } |
47 | }; | 47 | }; |
@@ -55,7 +55,7 @@ fn load_root(path: &Path) -> Vec<FileEvent> { | |||
55 | let text = match fs::read_to_string(path) { | 55 | let text = match fs::read_to_string(path) { |
56 | Ok(text) => text, | 56 | Ok(text) => text, |
57 | Err(e) => { | 57 | Err(e) => { |
58 | warn!("watcher error: {}", e); | 58 | log::warn!("watcher error: {}", e); |
59 | continue; | 59 | continue; |
60 | } | 60 | } |
61 | }; | 61 | }; |
diff --git a/crates/ra_lsp_server/tests/heavy_tests/main.rs b/crates/ra_lsp_server/tests/heavy_tests/main.rs index 0f6084555..cbc0c8844 100644 --- a/crates/ra_lsp_server/tests/heavy_tests/main.rs +++ b/crates/ra_lsp_server/tests/heavy_tests/main.rs | |||
@@ -1,13 +1,3 @@ | |||
1 | #[macro_use] | ||
2 | extern crate crossbeam_channel; | ||
3 | extern crate flexi_logger; | ||
4 | extern crate gen_lsp_server; | ||
5 | extern crate languageserver_types; | ||
6 | extern crate ra_lsp_server; | ||
7 | extern crate serde; | ||
8 | extern crate serde_json; | ||
9 | extern crate tempdir; | ||
10 | |||
11 | mod support; | 1 | mod support; |
12 | 2 | ||
13 | use ra_lsp_server::req::{Runnables, RunnablesParams}; | 3 | use ra_lsp_server::req::{Runnables, RunnablesParams}; |
diff --git a/crates/ra_lsp_server/tests/heavy_tests/support.rs b/crates/ra_lsp_server/tests/heavy_tests/support.rs index 88d379bfa..019048a3a 100644 --- a/crates/ra_lsp_server/tests/heavy_tests/support.rs +++ b/crates/ra_lsp_server/tests/heavy_tests/support.rs | |||
@@ -6,7 +6,7 @@ use std::{ | |||
6 | time::Duration, | 6 | time::Duration, |
7 | }; | 7 | }; |
8 | 8 | ||
9 | use crossbeam_channel::{after, Receiver}; | 9 | use crossbeam_channel::{after, select, Receiver}; |
10 | use flexi_logger::Logger; | 10 | use flexi_logger::Logger; |
11 | use gen_lsp_server::{RawMessage, RawNotification, RawRequest}; | 11 | use gen_lsp_server::{RawMessage, RawNotification, RawRequest}; |
12 | use languageserver_types::{ | 12 | use languageserver_types::{ |
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index 54ee72386..8ad8ed196 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml | |||
@@ -1,5 +1,5 @@ | |||
1 | [package] | 1 | [package] |
2 | edition = "2015" | 2 | edition = "2018" |
3 | name = "ra_syntax" | 3 | name = "ra_syntax" |
4 | version = "0.1.0" | 4 | version = "0.1.0" |
5 | authors = ["Aleksey Kladov <[email protected]>"] | 5 | authors = ["Aleksey Kladov <[email protected]>"] |
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs index 330f68053..0e5c9baad 100644 --- a/crates/ra_syntax/src/lib.rs +++ b/crates/ra_syntax/src/lib.rs | |||
@@ -20,17 +20,6 @@ | |||
20 | #![allow(missing_docs)] | 20 | #![allow(missing_docs)] |
21 | //#![warn(unreachable_pub)] // rust-lang/rust#47816 | 21 | //#![warn(unreachable_pub)] // rust-lang/rust#47816 |
22 | 22 | ||
23 | extern crate arrayvec; | ||
24 | extern crate drop_bomb; | ||
25 | extern crate itertools; | ||
26 | extern crate parking_lot; | ||
27 | extern crate rowan; | ||
28 | extern crate unicode_xid; | ||
29 | |||
30 | #[cfg(test)] | ||
31 | #[macro_use] | ||
32 | extern crate test_utils; | ||
33 | |||
34 | pub mod algo; | 23 | pub mod algo; |
35 | pub mod ast; | 24 | pub mod ast; |
36 | mod lexer; | 25 | mod lexer; |
@@ -48,11 +37,11 @@ pub mod utils; | |||
48 | mod validation; | 37 | mod validation; |
49 | mod yellow; | 38 | mod yellow; |
50 | 39 | ||
40 | pub use rowan::{SmolStr, TextRange, TextUnit}; | ||
51 | pub use crate::{ | 41 | pub use crate::{ |
52 | ast::AstNode, | 42 | ast::AstNode, |
53 | lexer::{tokenize, Token}, | 43 | lexer::{tokenize, Token}, |
54 | reparsing::AtomEdit, | 44 | reparsing::AtomEdit, |
55 | rowan::{SmolStr, TextRange, TextUnit}, | ||
56 | syntax_kinds::SyntaxKind, | 45 | syntax_kinds::SyntaxKind, |
57 | yellow::{ | 46 | yellow::{ |
58 | Direction, OwnedRoot, RefRoot, SyntaxError, SyntaxNode, SyntaxNodeRef, TreeRoot, WalkEvent, Location, | 47 | Direction, OwnedRoot, RefRoot, SyntaxError, SyntaxNode, SyntaxNodeRef, TreeRoot, WalkEvent, Location, |
diff --git a/crates/ra_syntax/src/parser_api.rs b/crates/ra_syntax/src/parser_api.rs index 42046d36f..c37c30e34 100644 --- a/crates/ra_syntax/src/parser_api.rs +++ b/crates/ra_syntax/src/parser_api.rs | |||
@@ -1,5 +1,6 @@ | |||
1 | use drop_bomb::DropBomb; | ||
2 | |||
1 | use crate::{ | 3 | use crate::{ |
2 | drop_bomb::DropBomb, | ||
3 | parser_impl::ParserImpl, | 4 | parser_impl::ParserImpl, |
4 | token_set::TokenSet, | 5 | token_set::TokenSet, |
5 | SyntaxKind::{self, ERROR}, | 6 | SyntaxKind::{self, ERROR}, |
diff --git a/crates/ra_syntax/src/reparsing.rs b/crates/ra_syntax/src/reparsing.rs index ddcb8f6f6..732fb0e4a 100644 --- a/crates/ra_syntax/src/reparsing.rs +++ b/crates/ra_syntax/src/reparsing.rs | |||
@@ -179,10 +179,10 @@ fn merge_errors( | |||
179 | 179 | ||
180 | #[cfg(test)] | 180 | #[cfg(test)] |
181 | mod tests { | 181 | mod tests { |
182 | use super::{ | 182 | use test_utils::{extract_range, assert_eq_text}; |
183 | super::{test_utils::extract_range, text_utils::replace_range, utils::dump_tree, SourceFileNode}, | 183 | |
184 | reparse_block, reparse_leaf, AtomEdit, GreenNode, SyntaxError, SyntaxNodeRef, | 184 | use crate::{SourceFileNode, text_utils::replace_range, utils::dump_tree }; |
185 | }; | 185 | use super::*; |
186 | 186 | ||
187 | fn do_check<F>(before: &str, replace_with: &str, reparser: F) | 187 | fn do_check<F>(before: &str, replace_with: &str, reparser: F) |
188 | where | 188 | where |
diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs index d9fbb9b5b..e72ec9c47 100644 --- a/crates/test_utils/src/lib.rs +++ b/crates/test_utils/src/lib.rs | |||
@@ -1,12 +1,9 @@ | |||
1 | extern crate difference; | 1 | use std::fmt; |
2 | extern crate itertools; | ||
3 | extern crate text_unit; | ||
4 | 2 | ||
5 | use itertools::Itertools; | 3 | use itertools::Itertools; |
6 | use std::fmt; | ||
7 | use text_unit::{TextRange, TextUnit}; | 4 | use text_unit::{TextRange, TextUnit}; |
8 | 5 | ||
9 | pub use self::difference::Changeset as __Changeset; | 6 | pub use difference::Changeset as __Changeset; |
10 | 7 | ||
11 | pub const CURSOR_MARKER: &str = "<|>"; | 8 | pub const CURSOR_MARKER: &str = "<|>"; |
12 | 9 | ||
diff --git a/crates/tools/src/lib.rs b/crates/tools/src/lib.rs index 4ff783c50..c2123db99 100644 --- a/crates/tools/src/lib.rs +++ b/crates/tools/src/lib.rs | |||
@@ -1,7 +1,3 @@ | |||
1 | extern crate failure; | ||
2 | extern crate itertools; | ||
3 | extern crate teraron; | ||
4 | |||
5 | use std::{ | 1 | use std::{ |
6 | path::{Path, PathBuf}, | 2 | path::{Path, PathBuf}, |
7 | process::{Command, Stdio}, | 3 | process::{Command, Stdio}, |
@@ -12,7 +8,7 @@ use itertools::Itertools; | |||
12 | 8 | ||
13 | pub use teraron::{Mode, Overwrite, Verify}; | 9 | pub use teraron::{Mode, Overwrite, Verify}; |
14 | 10 | ||
15 | pub type Result<T> = ::std::result::Result<T, failure::Error>; | 11 | pub type Result<T> = std::result::Result<T, failure::Error>; |
16 | 12 | ||
17 | pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron"; | 13 | pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron"; |
18 | pub const SYNTAX_KINDS: &str = "crates/ra_syntax/src/syntax_kinds/generated.rs.tera"; | 14 | pub const SYNTAX_KINDS: &str = "crates/ra_syntax/src/syntax_kinds/generated.rs.tera"; |
diff --git a/crates/tools/src/main.rs b/crates/tools/src/main.rs index dc623a464..7bd4a2d09 100644 --- a/crates/tools/src/main.rs +++ b/crates/tools/src/main.rs | |||
@@ -1,16 +1,12 @@ | |||
1 | extern crate clap; | ||
2 | extern crate failure; | ||
3 | extern crate teraron; | ||
4 | extern crate tools; | ||
5 | extern crate walkdir; | ||
6 | |||
7 | use clap::{App, Arg, SubCommand}; | ||
8 | use failure::bail; | ||
9 | use std::{ | 1 | use std::{ |
10 | collections::HashMap, | 2 | collections::HashMap, |
11 | fs, | 3 | fs, |
12 | path::{Path, PathBuf}, | 4 | path::{Path, PathBuf}, |
13 | }; | 5 | }; |
6 | |||
7 | use clap::{App, Arg, SubCommand}; | ||
8 | use failure::bail; | ||
9 | |||
14 | use tools::{collect_tests, generate, run, run_rustfmt, Mode, Overwrite, Result, Test, Verify}; | 10 | use tools::{collect_tests, generate, run, run_rustfmt, Mode, Overwrite, Result, Test, Verify}; |
15 | 11 | ||
16 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; | 12 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; |