aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/gen_lsp_server/Cargo.toml1
-rw-r--r--crates/gen_lsp_server/src/lib.rs21
-rw-r--r--crates/gen_lsp_server/src/msg.rs19
-rw-r--r--crates/gen_lsp_server/src/stdio.rs3
-rw-r--r--crates/ra_analysis/src/lib.rs8
-rw-r--r--crates/ra_analysis/tests/tests.rs7
-rw-r--r--crates/ra_cli/src/main.rs10
-rw-r--r--crates/ra_editor/src/lib.rs11
-rw-r--r--crates/ra_editor/src/test_utils.rs5
-rw-r--r--crates/ra_editor/src/typing.rs2
-rw-r--r--crates/ra_lsp_server/src/lib.rs27
-rw-r--r--crates/ra_lsp_server/src/main.rs26
-rw-r--r--crates/ra_lsp_server/src/main_loop/mod.rs38
-rw-r--r--crates/ra_lsp_server/src/project_model.rs4
-rw-r--r--crates/ra_lsp_server/src/req.rs1
-rw-r--r--crates/ra_lsp_server/src/server_world.rs1
-rw-r--r--crates/ra_lsp_server/src/thread_watcher.rs7
-rw-r--r--crates/ra_lsp_server/src/vfs.rs8
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/main.rs10
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/support.rs2
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_syntax/src/lib.rs13
-rw-r--r--crates/ra_syntax/src/parser_api.rs3
-rw-r--r--crates/ra_syntax/src/reparsing.rs8
-rw-r--r--crates/test_utils/src/lib.rs7
-rw-r--r--crates/tools/src/lib.rs6
-rw-r--r--crates/tools/src/main.rs12
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]
2edition = "2018"
2name = "gen_lsp_server" 3name = "gen_lsp_server"
3version = "0.1.0" 4version = "0.1.0"
4authors = ["Aleksey Kladov <[email protected]>"] 5authors = ["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] 62use failure::{bail, format_err};
63extern crate failure;
64#[macro_use]
65extern crate log;
66extern crate serde;
67extern crate serde_json;
68#[macro_use]
69extern crate serde_derive;
70extern crate crossbeam_channel;
71extern crate languageserver_types;
72 63
73mod msg; 64mod msg;
74mod stdio; 65mod stdio;
@@ -81,7 +72,7 @@ use languageserver_types::{
81}; 72};
82 73
83pub type Result<T> = ::std::result::Result<T, failure::Error>; 74pub type Result<T> = ::std::result::Result<T, failure::Error>;
84pub use { 75pub 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 @@
1use std::io::{BufRead, Write}; 1use std::io::{BufRead, Write};
2 2
3use languageserver_types::{notification::Notification, request::Request}; 3use languageserver_types::{notification::Notification, request::Request};
4use serde::{de::DeserializeOwned, Serialize}; 4use serde_derive::{Deserialize, Serialize};
5use serde_json::{from_str, from_value, to_string, to_value, Value}; 5use serde_json::{from_str, from_value, to_string, to_value, Value};
6use failure::{bail, format_err};
6 7
7use Result; 8use 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
198fn write_msg_text(out: &mut impl Write, msg: &str) -> Result<()> { 199fn 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
6use crossbeam_channel::{bounded, Receiver, Sender}; 6use crossbeam_channel::{bounded, Receiver, Sender};
7use failure::bail;
7 8
8use {RawMessage, Result}; 9use crate::{RawMessage, Result};
9 10
10pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) { 11pub 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
4extern crate fst;
5extern crate ra_editor;
6extern crate ra_syntax;
7extern crate rayon;
8extern crate relative_path;
9extern crate rustc_hash;
10extern crate salsa;
11
12macro_rules! ctry { 4macro_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 @@
1extern crate ra_analysis;
2extern crate ra_editor;
3extern crate ra_syntax;
4extern crate relative_path;
5extern crate rustc_hash;
6extern crate test_utils;
7
8use ra_syntax::TextRange; 1use ra_syntax::TextRange;
9use test_utils::assert_eq_dbg; 2use 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 @@
1extern crate clap;
2#[macro_use]
3extern crate failure;
4extern crate join_to_string;
5extern crate ra_editor;
6extern crate ra_syntax;
7extern crate tools;
8
9use std::{fs, io::Read, path::Path, time::Instant}; 1use std::{fs, io::Read, path::Path, time::Instant};
10 2
11use clap::{App, Arg, SubCommand}; 3use 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 @@
1extern crate itertools;
2extern crate join_to_string;
3extern crate ra_syntax;
4extern crate rustc_hash;
5extern crate superslice;
6#[cfg(test)]
7#[macro_use]
8extern crate test_utils as _test_utils;
9
10mod code_actions; 1mod code_actions;
11mod edit; 2mod edit;
12mod extend_selection; 3mod extend_selection;
@@ -154,7 +145,7 @@ pub fn find_node_at_offset<'a, N: AstNode<'a>>(
154#[cfg(test)] 145#[cfg(test)]
155mod tests { 146mod 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 @@
1use crate::LocalEdit;
2pub use crate::_test_utils::*;
3use ra_syntax::{SourceFileNode, TextRange, TextUnit}; 1use ra_syntax::{SourceFileNode, TextRange, TextUnit};
4 2
3use crate::LocalEdit;
4pub use test_utils::*;
5
5pub fn check_action<F: Fn(&SourceFileNode, TextUnit) -> Option<LocalEdit>>( 6pub 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)]
239mod tests { 239mod 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]
2extern crate failure;
3#[macro_use]
4extern crate serde_derive;
5extern crate languageserver_types;
6extern crate serde;
7extern crate serde_json;
8#[macro_use]
9extern crate crossbeam_channel;
10extern crate rayon;
11#[macro_use]
12extern crate log;
13extern crate cargo_metadata;
14extern crate drop_bomb;
15#[macro_use]
16extern crate failure_derive;
17extern crate im;
18extern crate relative_path;
19extern crate rustc_hash;
20extern crate url_serde;
21extern crate walkdir;
22
23extern crate gen_lsp_server;
24extern crate ra_analysis;
25extern crate ra_editor;
26extern crate ra_syntax;
27
28mod caps; 1mod caps;
29mod conv; 2mod conv;
30mod main_loop; 3mod 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] 1use serde_derive::Deserialize;
2extern crate log; 2use serde::Deserialize as _D;
3#[macro_use]
4extern crate failure;
5#[macro_use]
6extern crate serde_derive;
7extern crate serde;
8extern crate flexi_logger;
9extern crate gen_lsp_server;
10extern crate ra_lsp_server;
11
12use serde::Deserialize;
13use flexi_logger::{Duplicate, Logger}; 3use flexi_logger::{Duplicate, Logger};
14use gen_lsp_server::{run_server, stdio_transport}; 4use gen_lsp_server::{run_server, stdio_transport};
15use ra_lsp_server::Result; 5use 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
4use std::path::PathBuf; 4use std::path::PathBuf;
5 5
6use crossbeam_channel::{unbounded, Receiver, Sender}; 6use crossbeam_channel::{unbounded, select, Receiver, Sender};
7use gen_lsp_server::{ 7use 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};
12use rayon::{self, ThreadPool}; 12use rayon::{self, ThreadPool};
13use rustc_hash::FxHashSet; 13use rustc_hash::FxHashSet;
14use serde::{de::DeserializeOwned, Serialize}; 14use serde::{de::DeserializeOwned, Serialize};
15use failure::{format_err, bail};
16use failure_derive::Fail;
15 17
16use crate::{ 18use 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 @@
1use std::path::{Path, PathBuf}; 1use std::path::{Path, PathBuf};
2 2
3use serde_derive::Serialize;
3use cargo_metadata::{metadata_run, CargoOpt}; 4use cargo_metadata::{metadata_run, CargoOpt};
4use ra_syntax::SmolStr; 5use ra_syntax::SmolStr;
5use rustc_hash::{FxHashMap, FxHashSet}; 6use rustc_hash::{FxHashMap, FxHashSet};
7use failure::{format_err, bail};
6 8
7use crate::{ 9use 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 @@
1use serde_derive::{Serialize, Deserialize};
1use languageserver_types::{Location, Position, Range, TextDocumentIdentifier, Url}; 2use languageserver_types::{Location, Position, Range, TextDocumentIdentifier, Url};
2use rustc_hash::FxHashMap; 3use rustc_hash::FxHashMap;
3use url_serde; 4use 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};
11use rustc_hash::FxHashMap; 11use rustc_hash::FxHashMap;
12use failure::{bail, format_err};
12 13
13use crate::{ 14use 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
3use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; 3use crossbeam_channel::{bounded, unbounded, Receiver, Sender};
4use drop_bomb::DropBomb; 4use drop_bomb::DropBomb;
5use failure::format_err;
5 6
6use crate::Result; 7use 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]
2extern crate crossbeam_channel;
3extern crate flexi_logger;
4extern crate gen_lsp_server;
5extern crate languageserver_types;
6extern crate ra_lsp_server;
7extern crate serde;
8extern crate serde_json;
9extern crate tempdir;
10
11mod support; 1mod support;
12 2
13use ra_lsp_server::req::{Runnables, RunnablesParams}; 3use 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
9use crossbeam_channel::{after, Receiver}; 9use crossbeam_channel::{after, select, Receiver};
10use flexi_logger::Logger; 10use flexi_logger::Logger;
11use gen_lsp_server::{RawMessage, RawNotification, RawRequest}; 11use gen_lsp_server::{RawMessage, RawNotification, RawRequest};
12use languageserver_types::{ 12use 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]
2edition = "2015" 2edition = "2018"
3name = "ra_syntax" 3name = "ra_syntax"
4version = "0.1.0" 4version = "0.1.0"
5authors = ["Aleksey Kladov <[email protected]>"] 5authors = ["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
23extern crate arrayvec;
24extern crate drop_bomb;
25extern crate itertools;
26extern crate parking_lot;
27extern crate rowan;
28extern crate unicode_xid;
29
30#[cfg(test)]
31#[macro_use]
32extern crate test_utils;
33
34pub mod algo; 23pub mod algo;
35pub mod ast; 24pub mod ast;
36mod lexer; 25mod lexer;
@@ -48,11 +37,11 @@ pub mod utils;
48mod validation; 37mod validation;
49mod yellow; 38mod yellow;
50 39
40pub use rowan::{SmolStr, TextRange, TextUnit};
51pub use crate::{ 41pub 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 @@
1use drop_bomb::DropBomb;
2
1use crate::{ 3use 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)]
181mod tests { 181mod 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 @@
1extern crate difference; 1use std::fmt;
2extern crate itertools;
3extern crate text_unit;
4 2
5use itertools::Itertools; 3use itertools::Itertools;
6use std::fmt;
7use text_unit::{TextRange, TextUnit}; 4use text_unit::{TextRange, TextUnit};
8 5
9pub use self::difference::Changeset as __Changeset; 6pub use difference::Changeset as __Changeset;
10 7
11pub const CURSOR_MARKER: &str = "<|>"; 8pub 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 @@
1extern crate failure;
2extern crate itertools;
3extern crate teraron;
4
5use std::{ 1use 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
13pub use teraron::{Mode, Overwrite, Verify}; 9pub use teraron::{Mode, Overwrite, Verify};
14 10
15pub type Result<T> = ::std::result::Result<T, failure::Error>; 11pub type Result<T> = std::result::Result<T, failure::Error>;
16 12
17pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron"; 13pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron";
18pub const SYNTAX_KINDS: &str = "crates/ra_syntax/src/syntax_kinds/generated.rs.tera"; 14pub 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 @@
1extern crate clap;
2extern crate failure;
3extern crate teraron;
4extern crate tools;
5extern crate walkdir;
6
7use clap::{App, Arg, SubCommand};
8use failure::bail;
9use std::{ 1use std::{
10 collections::HashMap, 2 collections::HashMap,
11 fs, 3 fs,
12 path::{Path, PathBuf}, 4 path::{Path, PathBuf},
13}; 5};
6
7use clap::{App, Arg, SubCommand};
8use failure::bail;
9
14use tools::{collect_tests, generate, run, run_rustfmt, Mode, Overwrite, Result, Test, Verify}; 10use tools::{collect_tests, generate, run, run_rustfmt, Mode, Overwrite, Result, Test, Verify};
15 11
16const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; 12const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar";