diff options
author | sigmaSd <bedisnbiba@gmail.com> | 2023-09-05 16:36:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-05 16:36:35 +0100 |
commit | be1fc754a14683bf640b7bf0ecf6e286d02ee118 (patch) | |
tree | e7861eba1de4c0d2bb3afe1cc8c407f8e3b4f668 /cli/lsp/language_server.rs | |
parent | 4a561f12dbae5a49203eb2c08fed71d9d0dfeb99 (diff) |
feat(lsp): provide the deno.cache command server-side (#20111)
Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
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, |