aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-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 })?;