1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-03 04:48:52 -05:00

chore: use lsp to get parent process id (#11083)

Removes the previously added internal `--parent-pid` flag. This solution is better.
This commit is contained in:
David Sherret 2021-06-22 21:48:01 -04:00 committed by GitHub
parent 02f7a52235
commit 477273085f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 13 additions and 52 deletions

View file

@ -84,9 +84,7 @@ pub enum DenoSubcommand {
root: Option<PathBuf>, root: Option<PathBuf>,
force: bool, force: bool,
}, },
Lsp { Lsp,
parent_pid: Option<u32>,
},
Lint { Lint {
files: Vec<PathBuf>, files: Vec<PathBuf>,
ignore: Vec<PathBuf>, ignore: Vec<PathBuf>,
@ -878,16 +876,6 @@ go-to-definition support and automatic code formatting.
How to connect various editors and IDEs to 'deno lsp': How to connect various editors and IDEs to 'deno lsp':
https://deno.land/manual/getting_started/setup_your_environment#editors-and-ides") https://deno.land/manual/getting_started/setup_your_environment#editors-and-ides")
.arg(
Arg::with_name("parent-pid")
.long("parent-pid")
.help("The parent process id to periodically check for the existence of or exit")
.takes_value(true)
.validator(|val: String| match val.parse::<usize>() {
Ok(_) => Ok(()),
Err(_) => Err("parent-pid should be a number".to_string()),
}),
)
} }
fn lint_subcommand<'a, 'b>() -> App<'a, 'b> { fn lint_subcommand<'a, 'b>() -> App<'a, 'b> {
@ -1633,11 +1621,8 @@ fn install_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
}; };
} }
fn lsp_parse(flags: &mut Flags, matches: &clap::ArgMatches) { fn lsp_parse(flags: &mut Flags, _matches: &clap::ArgMatches) {
let parent_pid = matches flags.subcommand = DenoSubcommand::Lsp;
.value_of("parent-pid")
.map(|val| val.parse().unwrap());
flags.subcommand = DenoSubcommand::Lsp { parent_pid };
} }
fn lint_parse(flags: &mut Flags, matches: &clap::ArgMatches) { fn lint_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
@ -2317,32 +2302,6 @@ mod tests {
); );
} }
#[test]
fn lsp() {
let r = flags_from_vec(svec!["deno", "lsp"]);
assert_eq!(
r.unwrap(),
Flags {
subcommand: DenoSubcommand::Lsp { parent_pid: None },
..Flags::default()
}
);
let r = flags_from_vec(svec!["deno", "lsp", "--parent-pid", "5"]);
assert_eq!(
r.unwrap(),
Flags {
subcommand: DenoSubcommand::Lsp {
parent_pid: Some(5),
},
..Flags::default()
}
);
let r = flags_from_vec(svec!["deno", "lsp", "--parent-pid", "invalid-arg"]);
assert!(r.is_err());
}
#[test] #[test]
fn lint() { fn lint() {
let r = flags_from_vec(svec!["deno", "lint", "script_1.ts", "script_2.ts"]); let r = flags_from_vec(svec!["deno", "lint", "script_1.ts", "script_2.ts"]);

View file

@ -39,6 +39,7 @@ use super::diagnostics::DiagnosticSource;
use super::documents::DocumentCache; use super::documents::DocumentCache;
use super::documents::LanguageId; use super::documents::LanguageId;
use super::lsp_custom; use super::lsp_custom;
use super::parent_process_checker;
use super::performance::Performance; use super::performance::Performance;
use super::registries; use super::registries;
use super::sources; use super::sources;
@ -530,6 +531,11 @@ impl Inner {
info!("Starting Deno language server..."); info!("Starting Deno language server...");
let mark = self.performance.mark("initialize", Some(&params)); let mark = self.performance.mark("initialize", Some(&params));
// exit this process when the parent is lost
if let Some(parent_pid) = params.process_id {
parent_process_checker::start(parent_pid)
}
let capabilities = capabilities::server_capabilities(&params.capabilities); let capabilities = capabilities::server_capabilities(&params.capabilities);
let version = format!( let version = format!(

View file

@ -23,14 +23,10 @@ mod text;
mod tsc; mod tsc;
mod urls; mod urls;
pub async fn start(parent_pid: Option<u32>) -> Result<(), AnyError> { pub async fn start() -> Result<(), AnyError> {
let stdin = tokio::io::stdin(); let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout(); let stdout = tokio::io::stdout();
if let Some(parent_pid) = parent_pid {
parent_process_checker::start(parent_pid);
}
let (service, messages) = let (service, messages) =
LspService::new(language_server::LanguageServer::new); LspService::new(language_server::LanguageServer::new);
Server::new(stdin, stdout) Server::new(stdin, stdout)

View file

@ -467,8 +467,8 @@ async fn install_command(
tools::installer::install(flags, &module_url, args, name, root, force) tools::installer::install(flags, &module_url, args, name, root, force)
} }
async fn lsp_command(parent_pid: Option<u32>) -> Result<(), AnyError> { async fn lsp_command() -> Result<(), AnyError> {
lsp::start(parent_pid).await lsp::start().await
} }
async fn lint_command( async fn lint_command(
@ -1295,7 +1295,7 @@ fn get_subcommand(
} => { } => {
install_command(flags, module_url, args, name, root, force).boxed_local() install_command(flags, module_url, args, name, root, force).boxed_local()
} }
DenoSubcommand::Lsp { parent_pid } => lsp_command(parent_pid).boxed_local(), DenoSubcommand::Lsp => lsp_command().boxed_local(),
DenoSubcommand::Lint { DenoSubcommand::Lint {
files, files,
rules, rules,