diff options
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/diagnostics.rs | 2 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 9 | ||||
-rw-r--r-- | cli/lsp/tsc.rs | 29 |
3 files changed, 25 insertions, 15 deletions
diff --git a/cli/lsp/diagnostics.rs b/cli/lsp/diagnostics.rs index 13bb04ac3..71c34bdbe 100644 --- a/cli/lsp/diagnostics.rs +++ b/cli/lsp/diagnostics.rs @@ -1692,7 +1692,7 @@ let c: number = "a"; let cache = Arc::new(GlobalHttpCache::new(cache_location, RealDenoCacheEnv)); let ts_server = TsServer::new(Default::default(), cache); - ts_server.start(None); + ts_server.start(None).unwrap(); // test enabled { diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 2e1386fd0..342c32358 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -971,9 +971,14 @@ impl Inner { self.config.update_capabilities(¶ms.capabilities); } - self + if let Err(e) = self .ts_server - .start(self.config.internal_inspect().to_address()); + .start(self.config.internal_inspect().to_address()) + { + lsp_warn!("{}", e); + self.client.show_message(MessageType::ERROR, e); + return Err(tower_lsp::jsonrpc::Error::internal_error()); + }; self.update_debug_flag(); self.refresh_workspace_files(); diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs index 48ca7355a..2aac251d3 100644 --- a/cli/lsp/tsc.rs +++ b/cli/lsp/tsc.rs @@ -36,6 +36,7 @@ use crate::util::path::to_percent_decoded_str; use dashmap::DashMap; use deno_ast::MediaType; use deno_core::anyhow::anyhow; +use deno_core::anyhow::Context as _; use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::futures::FutureExt; @@ -268,17 +269,20 @@ impl TsServer { } } - pub fn start(&self, inspector_server_addr: Option<String>) { - let maybe_inspector_server = inspector_server_addr.and_then(|addr| { - let addr: SocketAddr = match addr.parse() { - Ok(addr) => addr, - Err(err) => { - lsp_warn!("Invalid inspector server address \"{}\": {}", &addr, err); - return None; - } - }; - Some(Arc::new(InspectorServer::new(addr, "deno-lsp-tsc"))) - }); + pub fn start( + &self, + inspector_server_addr: Option<String>, + ) -> Result<(), AnyError> { + let maybe_inspector_server = match inspector_server_addr { + Some(addr) => { + let addr: SocketAddr = addr.parse().with_context(|| { + format!("Invalid inspector server address \"{}\"", &addr) + })?; + let server = InspectorServer::new(addr, "deno-lsp-tsc")?; + Some(Arc::new(server)) + } + None => None, + }; *self.inspector_server.lock() = maybe_inspector_server.clone(); // TODO(bartlomieju): why is the join_handle ignored here? Should we store it // on the `TsServer` struct. @@ -295,6 +299,7 @@ impl TsServer { maybe_inspector_server, ) }); + Ok(()) } pub async fn project_changed( @@ -4750,7 +4755,7 @@ mod tests { Arc::new(mock_state_snapshot(sources, &location, config).await); let performance = Arc::new(Performance::default()); let ts_server = TsServer::new(performance, cache.clone()); - ts_server.start(None); + ts_server.start(None).unwrap(); (ts_server, snapshot, cache) } |