mirror of
https://github.com/denoland/deno.git
synced 2025-10-03 07:34:36 +00:00
fix(lsp): close server on exit notification (#28232)
This commit is contained in:
parent
a9f404e479
commit
876bac445a
7 changed files with 19 additions and 35 deletions
|
@ -137,7 +137,6 @@ pub struct LanguageServer {
|
|||
/// https://github.com/Microsoft/language-server-protocol/issues/567#issuecomment-2085131917
|
||||
init_flag: AsyncFlag,
|
||||
performance: Arc<Performance>,
|
||||
shutdown_flag: AsyncFlag,
|
||||
}
|
||||
|
||||
/// Snapshot of the state used by TSC.
|
||||
|
@ -227,7 +226,7 @@ pub struct Inner {
|
|||
}
|
||||
|
||||
impl LanguageServer {
|
||||
pub fn new(client: Client, shutdown_flag: AsyncFlag) -> Self {
|
||||
pub fn new(client: Client) -> Self {
|
||||
let performance = Arc::new(Performance::default());
|
||||
Self {
|
||||
client: client.clone(),
|
||||
|
@ -237,7 +236,6 @@ impl LanguageServer {
|
|||
))),
|
||||
init_flag: Default::default(),
|
||||
performance,
|
||||
shutdown_flag,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3566,7 +3564,6 @@ impl tower_lsp::LanguageServer for LanguageServer {
|
|||
}
|
||||
|
||||
async fn shutdown(&self) -> LspResult<()> {
|
||||
self.shutdown_flag.raise();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright 2018-2025 the Deno authors. MIT license.
|
||||
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::unsync::spawn;
|
||||
pub use repl::ReplCompletionItem;
|
||||
pub use repl::ReplLanguageServer;
|
||||
use tower_lsp::LspService;
|
||||
|
@ -9,7 +8,6 @@ use tower_lsp::Server;
|
|||
|
||||
use self::diagnostics::should_send_diagnostic_batch_index_notifications;
|
||||
use crate::lsp::language_server::LanguageServer;
|
||||
use crate::util::sync::AsyncFlag;
|
||||
|
||||
mod analysis;
|
||||
mod cache;
|
||||
|
@ -44,12 +42,8 @@ pub async fn start() -> Result<(), AnyError> {
|
|||
let stdin = tokio::io::stdin();
|
||||
let stdout = tokio::io::stdout();
|
||||
|
||||
let shutdown_flag = AsyncFlag::default();
|
||||
let builder = LspService::build(|client| {
|
||||
language_server::LanguageServer::new(
|
||||
client::Client::from_tower(client),
|
||||
shutdown_flag.clone(),
|
||||
)
|
||||
language_server::LanguageServer::new(client::Client::from_tower(client))
|
||||
})
|
||||
.custom_method(
|
||||
lsp_custom::PERFORMANCE_REQUEST,
|
||||
|
@ -76,19 +70,9 @@ pub async fn start() -> Result<(), AnyError> {
|
|||
};
|
||||
|
||||
let (service, socket, pending) = builder.finish();
|
||||
|
||||
// TODO(nayeemrmn): This shutdown flag is a workaround for
|
||||
// https://github.com/denoland/deno/issues/20700. Remove when
|
||||
// https://github.com/ebkalderon/tower-lsp/issues/399 is fixed.
|
||||
// Force end the server 8 seconds after receiving a shutdown request.
|
||||
tokio::select! {
|
||||
biased;
|
||||
_ = Server::new(stdin, stdout, socket, pending).concurrency_level(32).serve(service) => {}
|
||||
_ = spawn(async move {
|
||||
shutdown_flag.wait_raised().await;
|
||||
tokio::time::sleep(std::time::Duration::from_secs(8)).await;
|
||||
}) => {}
|
||||
}
|
||||
|
||||
Server::new(stdin, stdout, socket, pending)
|
||||
.concurrency_level(32)
|
||||
.serve(service)
|
||||
.await;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -65,10 +65,8 @@ impl ReplLanguageServer {
|
|||
super::logging::set_lsp_log_level(log::Level::Debug);
|
||||
super::logging::set_lsp_warn_level(log::Level::Debug);
|
||||
|
||||
let language_server = super::language_server::LanguageServer::new(
|
||||
Client::new_for_repl(),
|
||||
Default::default(),
|
||||
);
|
||||
let language_server =
|
||||
super::language_server::LanguageServer::new(Client::new_for_repl());
|
||||
|
||||
let cwd_uri = get_cwd_uri()?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue