diff options
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 47 |
1 files changed, 46 insertions, 1 deletions
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<Option<Value>> { + if params.command == "deno.cache" { + let mut arguments = params.arguments.into_iter(); + let uris = serde_json::to_value(arguments.next()).unwrap(); + let uris: Vec<Url> = 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, |