summaryrefslogtreecommitdiff
path: root/cli/lsp/handlers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/handlers.rs')
-rw-r--r--cli/lsp/handlers.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/cli/lsp/handlers.rs b/cli/lsp/handlers.rs
index 6dd7321c7..ccda69f7d 100644
--- a/cli/lsp/handlers.rs
+++ b/cli/lsp/handlers.rs
@@ -12,6 +12,8 @@ use deno_core::error::AnyError;
use deno_core::serde_json;
use deno_core::ModuleSpecifier;
use dprint_plugin_typescript as dprint;
+use lsp_types::CompletionParams;
+use lsp_types::CompletionResponse;
use lsp_types::DocumentFormattingParams;
use lsp_types::DocumentHighlight;
use lsp_types::DocumentHighlightParams;
@@ -187,6 +189,36 @@ pub fn handle_hover(
}
}
+pub fn handle_completion(
+ state: &mut ServerState,
+ params: CompletionParams,
+) -> Result<Option<CompletionResponse>, AnyError> {
+ let specifier =
+ utils::normalize_url(params.text_document_position.text_document.uri);
+ let line_index = get_line_index(state, &specifier)?;
+ let server_state = state.snapshot();
+ let maybe_completion_info: Option<tsc::CompletionInfo> =
+ serde_json::from_value(tsc::request(
+ &mut state.ts_runtime,
+ &server_state,
+ tsc::RequestMethod::GetCompletions((
+ specifier,
+ text::to_char_pos(&line_index, params.text_document_position.position),
+ tsc::UserPreferences {
+ // TODO(lucacasonato): enable this. see https://github.com/denoland/deno/pull/8651
+ include_completions_with_insert_text: Some(false),
+ ..Default::default()
+ },
+ )),
+ )?)?;
+
+ if let Some(completions) = maybe_completion_info {
+ Ok(Some(completions.into_completion_response(&line_index)))
+ } else {
+ Ok(None)
+ }
+}
+
pub fn handle_references(
state: &mut ServerState,
params: ReferenceParams,