aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-03-09 09:54:14 +0000
committerAleksey Kladov <[email protected]>2020-03-09 09:54:14 +0000
commit43bc03faf04fe195ea3debb0c464698d3b146ee0 (patch)
tree99661a200c0515f57e3806152e8f4f4b2732c923
parent58ab084034b760367359334807c7f7773faf7f92 (diff)
Silence "file out of workspace" errors
We really should fix this limitation of the VFS, but it's some way off at the moment, so let's just silence the user-visible error for now.
-rw-r--r--crates/rust-analyzer/src/main_loop.rs11
-rw-r--r--crates/rust-analyzer/src/world.rs4
2 files changed, 12 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 5480b9e4d..221f464b6 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -44,6 +44,8 @@ pub struct LspError {
44} 44}
45 45
46impl LspError { 46impl LspError {
47 pub const UNKNOWN_FILE: i32 = -32900;
48
47 pub fn new(code: i32, message: String) -> LspError { 49 pub fn new(code: i32, message: String) -> LspError {
48 LspError { code, message } 50 LspError { code, message }
49 } 51 }
@@ -805,7 +807,14 @@ where
805 let response = match result { 807 let response = match result {
806 Ok(resp) => Response::new_ok(id, &resp), 808 Ok(resp) => Response::new_ok(id, &resp),
807 Err(e) => match e.downcast::<LspError>() { 809 Err(e) => match e.downcast::<LspError>() {
808 Ok(lsp_error) => Response::new_err(id, lsp_error.code, lsp_error.message), 810 Ok(lsp_error) => {
811 if lsp_error.code == LspError::UNKNOWN_FILE {
812 // Work-around for https://github.com/rust-analyzer/rust-analyzer/issues/1521
813 Response::new_ok(id, ())
814 } else {
815 Response::new_err(id, lsp_error.code, lsp_error.message)
816 }
817 }
809 Err(e) => { 818 Err(e) => {
810 if is_canceled(&e) { 819 if is_canceled(&e) {
811 Response::new_err( 820 Response::new_err(
diff --git a/crates/rust-analyzer/src/world.rs b/crates/rust-analyzer/src/world.rs
index 96efab844..dce243ede 100644
--- a/crates/rust-analyzer/src/world.rs
+++ b/crates/rust-analyzer/src/world.rs
@@ -9,7 +9,6 @@ use std::{
9}; 9};
10 10
11use crossbeam_channel::{unbounded, Receiver}; 11use crossbeam_channel::{unbounded, Receiver};
12use lsp_server::ErrorCode;
13use lsp_types::Url; 12use lsp_types::Url;
14use parking_lot::RwLock; 13use parking_lot::RwLock;
15use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher}; 14use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher};
@@ -252,8 +251,9 @@ impl WorldSnapshot {
252 let path = uri.to_file_path().map_err(|()| format!("invalid uri: {}", uri))?; 251 let path = uri.to_file_path().map_err(|()| format!("invalid uri: {}", uri))?;
253 let file = self.vfs.read().path2file(&path).ok_or_else(|| { 252 let file = self.vfs.read().path2file(&path).ok_or_else(|| {
254 // Show warning as this file is outside current workspace 253 // Show warning as this file is outside current workspace
254 // FIXME: just handle such files, and remove `LspError::UNKNOWN_FILE`.
255 LspError { 255 LspError {
256 code: ErrorCode::InvalidRequest as i32, 256 code: LspError::UNKNOWN_FILE,
257 message: "Rust file outside current workspace is not supported yet.".to_string(), 257 message: "Rust file outside current workspace is not supported yet.".to_string(),
258 } 258 }
259 })?; 259 })?;