From be1fc754a14683bf640b7bf0ecf6e286d02ee118 Mon Sep 17 00:00:00 2001 From: sigmaSd Date: Tue, 5 Sep 2023 16:36:35 +0100 Subject: feat(lsp): provide the deno.cache command server-side (#20111) Co-authored-by: Nayeem Rahman --- cli/lsp/language_server.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'cli/lsp/language_server.rs') diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index d4e5b3da9..a893308ae 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1238,7 +1238,24 @@ impl Inner { parent_process_checker::start(parent_pid) } - let capabilities = capabilities::server_capabilities(¶ms.capabilities); + // TODO(nayeemrmn): This flag exists to avoid breaking the extension for the + // 1.37.0 release. Eventually make this always true. + // See https://github.com/denoland/deno/pull/20111#issuecomment-1705776794. + let mut enable_builtin_commands = false; + if let Some(value) = ¶ms.initialization_options { + if let Some(object) = value.as_object() { + if let Some(value) = object.get("enableBuiltinCommands") { + if value.as_bool() == Some(true) { + enable_builtin_commands = true; + } + } + } + } + + let capabilities = capabilities::server_capabilities( + ¶ms.capabilities, + enable_builtin_commands, + ); let version = format!( "{} ({}, {})", @@ -3031,6 +3048,34 @@ impl Inner { #[tower_lsp::async_trait] impl tower_lsp::LanguageServer for LanguageServer { + async fn execute_command( + &self, + params: ExecuteCommandParams, + ) -> LspResult> { + if params.command == "deno.cache" { + let mut arguments = params.arguments.into_iter(); + let uris = serde_json::to_value(arguments.next()).unwrap(); + let uris: Vec = serde_json::from_value(uris) + .map_err(|err| LspError::invalid_params(err.to_string()))?; + let referrer = serde_json::to_value(arguments.next()).unwrap(); + let referrer: Url = serde_json::from_value(referrer) + .map_err(|err| LspError::invalid_params(err.to_string()))?; + return self + .cache_request(Some( + serde_json::to_value(lsp_custom::CacheParams { + referrer: TextDocumentIdentifier { uri: referrer }, + uris: uris + .into_iter() + .map(|uri| TextDocumentIdentifier { uri }) + .collect(), + }) + .expect("well formed json"), + )) + .await; + } + Ok(None) + } + async fn initialize( &self, params: InitializeParams, -- cgit v1.2.3