From 226a373c497cc3439e032332fefaffa75211afbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 13 May 2023 21:42:34 +0200 Subject: [PATCH] fix(lsp): increase default max heap size to 3Gb (#19115) --- cli/main.rs | 8 +++++++- cli/standalone/mod.rs | 2 +- cli/util/v8.rs | 15 ++++++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cli/main.rs b/cli/main.rs index 03e7cf41e7..75425cf105 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -281,7 +281,13 @@ pub fn main() { Err(err) => unwrap_or_exit(Err(AnyError::from(err))), }; - init_v8_flags(&flags.v8_flags, get_v8_flags_from_env()); + let default_v8_flags = match flags.subcommand { + // Using same default as VSCode: + // https://github.com/microsoft/vscode/blob/48d4ba271686e8072fc6674137415bc80d936bc7/extensions/typescript-language-features/src/configuration/configuration.ts#L213-L214 + DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()], + _ => vec![], + }; + init_v8_flags(&default_v8_flags, &flags.v8_flags, get_v8_flags_from_env()); util::logger::init(flags.log_level); diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs index db2743be86..eb5cf5d828 100644 --- a/cli/standalone/mod.rs +++ b/cli/standalone/mod.rs @@ -430,7 +430,7 @@ pub async fn run( }, ); - v8_set_flags(construct_v8_flags(&metadata.v8_flags, vec![])); + v8_set_flags(construct_v8_flags(&[], &metadata.v8_flags, vec![])); let mut worker = worker_factory .create_main_worker(main_module.clone(), permissions) diff --git a/cli/util/v8.rs b/cli/util/v8.rs index 6afaf285e3..93a2ef83f7 100644 --- a/cli/util/v8.rs +++ b/cli/util/v8.rs @@ -10,17 +10,26 @@ pub fn get_v8_flags_from_env() -> Vec { #[inline(always)] pub fn construct_v8_flags( + default_v8_flags: &[String], v8_flags: &[String], env_v8_flags: Vec, ) -> Vec { std::iter::once("UNUSED_BUT_NECESSARY_ARG0".to_owned()) + .chain(default_v8_flags.iter().cloned()) .chain(env_v8_flags.into_iter()) .chain(v8_flags.iter().cloned()) .collect::>() } -pub fn init_v8_flags(v8_flags: &[String], env_v8_flags: Vec) { - if v8_flags.is_empty() && env_v8_flags.is_empty() { +pub fn init_v8_flags( + default_v8_flags: &[String], + v8_flags: &[String], + env_v8_flags: Vec, +) { + if default_v8_flags.is_empty() + && v8_flags.is_empty() + && env_v8_flags.is_empty() + { return; } @@ -29,7 +38,7 @@ pub fn init_v8_flags(v8_flags: &[String], env_v8_flags: Vec) { .chain(v8_flags) .any(|flag| flag == "-help" || flag == "--help"); // Keep in sync with `standalone.rs`. - let v8_flags = construct_v8_flags(v8_flags, env_v8_flags); + let v8_flags = construct_v8_flags(default_v8_flags, v8_flags, env_v8_flags); let unrecognized_v8_flags = deno_core::v8_set_flags(v8_flags) .into_iter() .skip(1)