From 528b78b93189e6c3d475a729622385c1548472c2 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 6 Jan 2025 11:44:33 +0100 Subject: [PATCH] feat(completions): add completions to lsp --- Cargo.lock | 4 ++ crates/pg_completions/Cargo.toml | 2 + crates/pg_completions/src/complete.rs | 5 +- crates/pg_completions/src/item.rs | 6 +- crates/pg_lsp_new/Cargo.toml | 1 + crates/pg_lsp_new/src/capabilities.rs | 22 ++++++- crates/pg_lsp_new/src/handlers.rs | 1 + crates/pg_lsp_new/src/handlers/completions.rs | 60 +++++++++++++++++++ .../pg_lsp_new/src/handlers/text_document.rs | 6 +- crates/pg_lsp_new/src/server.rs | 26 ++++++-- crates/pg_lsp_new/src/session.rs | 9 ++- crates/pg_workspace_new/Cargo.toml | 1 + crates/pg_workspace_new/src/diagnostics.rs | 6 ++ crates/pg_workspace_new/src/workspace.rs | 15 ++++- .../pg_workspace_new/src/workspace/client.rs | 7 +++ .../pg_workspace_new/src/workspace/server.rs | 48 +++++++++++++++ .../src/workspace/server/change.rs | 22 ------- .../src/workspace/server/document.rs | 7 +++ editors/code/package-lock.json | 42 +++++++------ editors/code/package.json | 2 +- pglsp.toml | 2 +- 21 files changed, 234 insertions(+), 60 deletions(-) create mode 100644 crates/pg_lsp_new/src/handlers/completions.rs diff --git a/Cargo.lock b/Cargo.lock index 222e79b5..84fac274 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2313,6 +2313,8 @@ dependencies = [ "async-std", "pg_schema_cache", "pg_test_utils", + "serde", + "serde_json", "sqlx", "text-size", "tokio", @@ -2532,6 +2534,7 @@ dependencies = [ "biome_deserialize", "futures", "pg_analyse", + "pg_completions", "pg_configuration", "pg_console", "pg_diagnostics", @@ -2717,6 +2720,7 @@ dependencies = [ "ignore", "pg_analyse", "pg_analyser", + "pg_completions", "pg_configuration", "pg_console", "pg_diagnostics", diff --git a/crates/pg_completions/Cargo.toml b/crates/pg_completions/Cargo.toml index 89a37059..c1cf8afe 100644 --- a/crates/pg_completions/Cargo.toml +++ b/crates/pg_completions/Cargo.toml @@ -16,6 +16,8 @@ async-std = "1.12.0" text-size.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } pg_schema_cache.workspace = true tree-sitter.workspace = true tree_sitter_sql.workspace = true diff --git a/crates/pg_completions/src/complete.rs b/crates/pg_completions/src/complete.rs index 6ea1a139..fd417f46 100644 --- a/crates/pg_completions/src/complete.rs +++ b/crates/pg_completions/src/complete.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use text_size::TextSize; use crate::{ @@ -17,9 +18,9 @@ pub struct CompletionParams<'a> { pub tree: Option<&'a tree_sitter::Tree>, } -#[derive(Debug, Default)] +#[derive(Debug, Default, Serialize, Deserialize)] pub struct CompletionResult { - pub items: Vec, + pub(crate) items: Vec, } impl IntoIterator for CompletionResult { diff --git a/crates/pg_completions/src/item.rs b/crates/pg_completions/src/item.rs index c8cce249..06771f92 100644 --- a/crates/pg_completions/src/item.rs +++ b/crates/pg_completions/src/item.rs @@ -1,10 +1,12 @@ -#[derive(Debug, PartialEq, Eq)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] pub enum CompletionItemKind { Table, Function, } -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] pub struct CompletionItem { pub label: String, pub(crate) score: i32, diff --git a/crates/pg_lsp_new/Cargo.toml b/crates/pg_lsp_new/Cargo.toml index 7b71c175..0454893e 100644 --- a/crates/pg_lsp_new/Cargo.toml +++ b/crates/pg_lsp_new/Cargo.toml @@ -19,6 +19,7 @@ pg_analyse = { workspace = true } pg_configuration = { workspace = true } pg_console = { workspace = true } pg_diagnostics = { workspace = true } +pg_completions = { workspace = true } pg_fs = { workspace = true } pg_lsp_converters = { workspace = true } pg_text_edit = { workspace = true } diff --git a/crates/pg_lsp_new/src/capabilities.rs b/crates/pg_lsp_new/src/capabilities.rs index 35bcefa4..a3b2ecb5 100644 --- a/crates/pg_lsp_new/src/capabilities.rs +++ b/crates/pg_lsp_new/src/capabilities.rs @@ -1,8 +1,8 @@ use pg_lsp_converters::{negotiated_encoding, PositionEncoding, WideEncoding}; use tower_lsp::lsp_types::{ - ClientCapabilities, PositionEncodingKind, SaveOptions, ServerCapabilities, + ClientCapabilities, CompletionOptions, PositionEncodingKind, SaveOptions, ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions, - TextDocumentSyncSaveOptions, + TextDocumentSyncSaveOptions, WorkDoneProgressOptions, }; /// The capabilities to send from server as part of [`InitializeResult`] @@ -28,6 +28,24 @@ pub(crate) fn server_capabilities(capabilities: &ClientCapabilities) -> ServerCa })), }, )), + completion_provider: Some(CompletionOptions { + // currently not supporting the completionItem/resolve request. + // The request is used to get more information about a simple CompletionItem. + resolve_provider: None, + + trigger_characters: Some(vec![".".to_owned(), ",".to_owned(), " ".to_owned()]), + + // No character will lead to automatically inserting the selected completion-item + all_commit_characters: None, + + // No special support for completionItem/resolve requests + completion_item: None, + + // We do not report the progress of the completion process + work_done_progress_options: WorkDoneProgressOptions { + work_done_progress: None, + }, + }), document_formatting_provider: None, document_range_formatting_provider: None, document_on_type_formatting_provider: None, diff --git a/crates/pg_lsp_new/src/handlers.rs b/crates/pg_lsp_new/src/handlers.rs index f55cad67..d6a8e28f 100644 --- a/crates/pg_lsp_new/src/handlers.rs +++ b/crates/pg_lsp_new/src/handlers.rs @@ -1 +1,2 @@ +pub(crate) mod completions; pub(crate) mod text_document; diff --git a/crates/pg_lsp_new/src/handlers/completions.rs b/crates/pg_lsp_new/src/handlers/completions.rs new file mode 100644 index 00000000..5f7a1309 --- /dev/null +++ b/crates/pg_lsp_new/src/handlers/completions.rs @@ -0,0 +1,60 @@ +use crate::session::Session; +use anyhow::Result; +use pg_workspace_new::workspace; +use tower_lsp::lsp_types::{self, CompletionItem, CompletionItemLabelDetails}; + +#[tracing::instrument(level = "trace", skip_all)] +pub fn get_completions( + session: &Session, + params: lsp_types::CompletionParams, +) -> Result { + let url = params.text_document_position.text_document.uri; + let path = session.file_path(&url)?; + + let client_capabilities = session + .client_capabilities() + .expect("Client capabilities not established for current session."); + + let line_index = session + .document(&url) + .map(|doc| doc.line_index) + .map_err(|_| anyhow::anyhow!("Document not found."))?; + + let offset = pg_lsp_converters::from_proto::offset( + &line_index, + params.text_document_position.position, + pg_lsp_converters::negotiated_encoding(client_capabilities), + )?; + + let completion_result = session + .workspace + .get_completions(workspace::CompletionParams { + path, + position: offset, + })?; + + let items: Vec = completion_result + .into_iter() + .map(|i| CompletionItem { + label: i.label, + label_details: Some(CompletionItemLabelDetails { + description: Some(i.description), + detail: None, + }), + preselect: Some(i.preselected), + kind: Some(to_lsp_types_completion_item_kind(i.kind)), + ..CompletionItem::default() + }) + .collect(); + + Ok(lsp_types::CompletionResponse::Array(items)) +} + +fn to_lsp_types_completion_item_kind( + pg_comp_kind: pg_completions::CompletionItemKind, +) -> lsp_types::CompletionItemKind { + match pg_comp_kind { + pg_completions::CompletionItemKind::Function + | pg_completions::CompletionItemKind::Table => lsp_types::CompletionItemKind::CLASS, + } +} diff --git a/crates/pg_lsp_new/src/handlers/text_document.rs b/crates/pg_lsp_new/src/handlers/text_document.rs index c3fb86ec..98ecfc8a 100644 --- a/crates/pg_lsp_new/src/handlers/text_document.rs +++ b/crates/pg_lsp_new/src/handlers/text_document.rs @@ -5,7 +5,7 @@ use pg_workspace_new::workspace::{ ChangeFileParams, ChangeParams, CloseFileParams, GetFileContentParams, OpenFileParams, }; use tower_lsp::lsp_types; -use tracing::{error, field}; +use tracing::{error, field, info}; /// Handler for `textDocument/didOpen` LSP notification #[tracing::instrument( @@ -24,11 +24,11 @@ pub(crate) async fn did_open( let version = params.text_document.version; let content = params.text_document.text; - let biome_path = session.file_path(&url)?; + let path = session.file_path(&url)?; let doc = Document::new(version, &content); session.workspace.open_file(OpenFileParams { - path: biome_path, + path, version, content, })?; diff --git a/crates/pg_lsp_new/src/server.rs b/crates/pg_lsp_new/src/server.rs index f934b478..327ca46a 100644 --- a/crates/pg_lsp_new/src/server.rs +++ b/crates/pg_lsp_new/src/server.rs @@ -106,7 +106,7 @@ impl LSPServer { impl LanguageServer for LSPServer { #[allow(deprecated)] #[tracing::instrument( - level = "trace", + level = "info", skip_all, fields( root_uri = params.root_uri.as_ref().map(display), @@ -143,7 +143,7 @@ impl LanguageServer for LSPServer { Ok(init) } - #[tracing::instrument(level = "trace", skip(self))] + #[tracing::instrument(level = "info", skip_all)] async fn initialized(&self, params: InitializedParams) { let _ = params; @@ -163,11 +163,12 @@ impl LanguageServer for LSPServer { self.session.update_all_diagnostics().await; } + #[tracing::instrument(level = "info", skip_all)] async fn shutdown(&self) -> LspResult<()> { Ok(()) } - #[tracing::instrument(level = "trace", skip(self))] + #[tracing::instrument(level = "info", skip_all)] async fn did_change_configuration(&self, params: DidChangeConfigurationParams) { let _ = params; self.session.load_workspace_settings().await; @@ -209,29 +210,41 @@ impl LanguageServer for LSPServer { } } + #[tracing::instrument(level = "trace", skip(self))] async fn did_open(&self, params: DidOpenTextDocumentParams) { handlers::text_document::did_open(&self.session, params) .await .ok(); } + #[tracing::instrument(level = "trace", skip(self, params))] async fn did_change(&self, params: DidChangeTextDocumentParams) { - handlers::text_document::did_change(&self.session, params) - .await - .ok(); + if let Err(e) = handlers::text_document::did_change(&self.session, params).await { + error!("{}", e); + }; } + #[tracing::instrument(level = "trace", skip(self))] async fn did_save(&self, params: DidSaveTextDocumentParams) { // handlers::text_document::did_save(&self.session, params) // .await // .ok(); } + #[tracing::instrument(level = "trace", skip(self))] async fn did_close(&self, params: DidCloseTextDocumentParams) { handlers::text_document::did_close(&self.session, params) .await .ok(); } + + #[tracing::instrument(level = "trace", skip(self))] + async fn completion(&self, params: CompletionParams) -> LspResult> { + match handlers::completions::get_completions(&self.session, params) { + Ok(result) => LspResult::Ok(Some(result)), + Err(e) => LspResult::Err(into_lsp_error(e)), + } + } } impl Drop for LSPServer { @@ -379,6 +392,7 @@ impl ServerFactory { workspace_method!(builder, change_file); workspace_method!(builder, close_file); workspace_method!(builder, pull_diagnostics); + workspace_method!(builder, get_completions); let (service, socket) = builder.finish(); ServerConnection { socket, service } diff --git a/crates/pg_lsp_new/src/session.rs b/crates/pg_lsp_new/src/session.rs index 72670e71..cda7fee0 100644 --- a/crates/pg_lsp_new/src/session.rs +++ b/crates/pg_lsp_new/src/session.rs @@ -23,8 +23,8 @@ use std::sync::Arc; use std::sync::RwLock; use tokio::sync::Notify; use tokio::sync::OnceCell; -use tower_lsp::lsp_types; use tower_lsp::lsp_types::Url; +use tower_lsp::lsp_types::{self, ClientCapabilities}; use tower_lsp::lsp_types::{MessageType, Registration}; use tower_lsp::lsp_types::{Unregistration, WorkspaceFolder}; use tracing::{error, info}; @@ -391,6 +391,13 @@ impl Session { self.initialize_params.get()?.client_information.as_ref() } + /// Returns a reference to the client capabilities for this session + pub(crate) fn client_capabilities(&self) -> Option<&ClientCapabilities> { + self.initialize_params + .get() + .map(|params| ¶ms.client_capabilities) + } + /// This function attempts to read the `pglsp.toml` configuration file from /// the root URI and update the workspace settings accordingly #[tracing::instrument(level = "trace", skip(self))] diff --git a/crates/pg_workspace_new/Cargo.toml b/crates/pg_workspace_new/Cargo.toml index bb2bd7c8..9da718cf 100644 --- a/crates/pg_workspace_new/Cargo.toml +++ b/crates/pg_workspace_new/Cargo.toml @@ -21,6 +21,7 @@ pg_analyser = { workspace = true } pg_configuration = { workspace = true } pg_console = { workspace = true } pg_diagnostics = { workspace = true } +pg_completions = { workspace = true } pg_fs = { workspace = true, features = ["serde"] } pg_query_ext = { workspace = true } pg_schema_cache = { workspace = true } diff --git a/crates/pg_workspace_new/src/diagnostics.rs b/crates/pg_workspace_new/src/diagnostics.rs index a1a11a1e..16efcea0 100644 --- a/crates/pg_workspace_new/src/diagnostics.rs +++ b/crates/pg_workspace_new/src/diagnostics.rs @@ -60,6 +60,12 @@ impl WorkspaceError { pub fn vcs_disabled() -> Self { Self::Vcs(VcsDiagnostic::DisabledVcs(DisabledVcs {})) } + + pub fn runtime(msg: &str) -> Self { + Self::RuntimeError(RuntimeError { + message: msg.into(), + }) + } } impl Error for WorkspaceError {} diff --git a/crates/pg_workspace_new/src/workspace.rs b/crates/pg_workspace_new/src/workspace.rs index 3688c064..8a5e2a5c 100644 --- a/crates/pg_workspace_new/src/workspace.rs +++ b/crates/pg_workspace_new/src/workspace.rs @@ -5,7 +5,7 @@ use pg_analyse::RuleCategories; use pg_configuration::{PartialConfiguration, RuleSelector}; use pg_fs::PgLspPath; use serde::{Deserialize, Serialize}; -use text_size::TextRange; +use text_size::{TextRange, TextSize}; use crate::WorkspaceError; @@ -40,6 +40,14 @@ pub struct PullDiagnosticsParams { pub skip: Vec, } +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct CompletionParams { + /// The File for which a completion is requested. + pub path: PgLspPath, + /// The Cursor position in the file for which a completion is requested. + pub position: TextSize, +} + #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct PullDiagnosticsResult { pub diagnostics: Vec, @@ -106,6 +114,11 @@ pub trait Workspace: Send + Sync + RefUnwindSafe { params: PullDiagnosticsParams, ) -> Result; + fn get_completions( + &self, + params: CompletionParams, + ) -> Result; + /// Refresh the schema cache for this workspace fn refresh_schema_cache(&self) -> Result<(), WorkspaceError>; diff --git a/crates/pg_workspace_new/src/workspace/client.rs b/crates/pg_workspace_new/src/workspace/client.rs index 986f5bda..c5059be9 100644 --- a/crates/pg_workspace_new/src/workspace/client.rs +++ b/crates/pg_workspace_new/src/workspace/client.rs @@ -127,4 +127,11 @@ where ) -> Result { self.request("pglsp/pull_diagnostics", params) } + + fn get_completions( + &self, + params: super::CompletionParams, + ) -> Result { + self.request("pglsp/get_completions", params) + } } diff --git a/crates/pg_workspace_new/src/workspace/server.rs b/crates/pg_workspace_new/src/workspace/server.rs index 1e569c86..37ec4897 100644 --- a/crates/pg_workspace_new/src/workspace/server.rs +++ b/crates/pg_workspace_new/src/workspace/server.rs @@ -396,6 +396,54 @@ impl Workspace for WorkspaceServer { skipped_diagnostics: 0, }) } + + #[tracing::instrument(level = "debug", skip(self))] + fn get_completions( + &self, + params: super::CompletionParams, + ) -> Result { + let doc = self + .documents + .get(¶ms.path) + .ok_or(WorkspaceError::not_found())?; + + tracing::debug!( + "Found the document. Looking for statement in file {:?} at position: {:?}", + ¶ms.path, + ¶ms.position + ); + + let statement = match doc.statement_at_offset(¶ms.position) { + Some(s) => s, + None => return Ok(pg_completions::CompletionResult::default()), + }; + + // `offset` is the position in the document, + // but we need the position within the *statement*. + let stmt_range = doc + .statement_range(&statement.ref_) + .expect("Range of statement should be defined."); + let position = params.position - stmt_range.start(); + + let tree = self.tree_sitter.load(&statement.ref_); + let text = statement.text; + + tracing::debug!("Found the statement. We're looking for position {:?}. Statement Range {:?} to {:?}. Statement: {}", position, stmt_range.start(), stmt_range.end(), text); + + let schema_cache = self + .schema_cache + .read() + .map_err(|_| WorkspaceError::runtime("Unable to load SchemaCache"))?; + + let result = pg_completions::complete(pg_completions::CompletionParams { + position, + schema: &schema_cache, + tree: tree.as_deref(), + text, + }); + + Ok(result) + } } /// Returns `true` if `path` is a directory or diff --git a/crates/pg_workspace_new/src/workspace/server/change.rs b/crates/pg_workspace_new/src/workspace/server/change.rs index f925b590..4e8c0405 100644 --- a/crates/pg_workspace_new/src/workspace/server/change.rs +++ b/crates/pg_workspace_new/src/workspace/server/change.rs @@ -105,8 +105,6 @@ impl Document { let new_content = change.apply_to_text(&self.content); - println!("new content: '{}'", new_content); - let mut affected = vec![]; for (idx, (id, r)) in self.statements.iter_mut().enumerate() { @@ -173,8 +171,6 @@ impl Document { end = new_content.text_len(); } - println!("affected: {:#?}", affected); - for (_, (_, r)) in &affected { // adjust the range to the new content let adjusted_start = if r.start() >= change.range.unwrap().end() { @@ -182,10 +178,6 @@ impl Document { } else { r.start() }; - println!("adjusted start: {:#?}", adjusted_start); - - println!("r.end(): {:#?}", r.end()); - println!("change.range(): {:#?}", change.range); let adjusted_end = if r.end() >= change.range.unwrap().end() { if change.is_addition() { r.end() + change.diff_size() @@ -195,7 +187,6 @@ impl Document { } else { r.end() }; - println!("adjusted end: {:#?}", adjusted_end); if adjusted_start < start { start = adjusted_start; @@ -205,15 +196,11 @@ impl Document { } } - println!("affected range: {:#?}", TextRange::new(start, end)); - let changed_content = new_content .as_str() .get(usize::from(start)..usize::from(end)) .unwrap(); - println!("changed content: '{}'", changed_content); - let ranges = pg_statement_splitter::split(changed_content).ranges; if affected.len() == 1 && ranges.len() == 1 { @@ -221,10 +208,6 @@ impl Document { let stmt = &affected[0]; let new_stmt = &ranges[0]; - println!("affected statement: {:#?}", stmt); - println!("new statement: {:#?}", new_stmt); - println!("diff: {:#?}", change.diff_size()); - let new_id = self.id_generator.next(); self.statements[stmt.0] = (new_id, new_stmt.add(start)); @@ -236,8 +219,6 @@ impl Document { text: change.text.clone(), }; - println!("{:#?}", changed_stmt.new_statement()); - changed.push(StatementChange::Modified(changed_stmt)); } else { // delete and add new ones @@ -272,8 +253,6 @@ impl Document { } } - println!("changed: {:#?}", changed); - self.content = new_content; self.debug_statements(); @@ -635,7 +614,6 @@ mod tests { assert_eq!(doc.content, "select ;\nselect 2;"); assert_eq!(doc.statements.len(), 2); - println!("{:#?}", doc.statements); assert_eq!( doc.statement(&doc.statements[0]).text, "select ;".to_string() diff --git a/crates/pg_workspace_new/src/workspace/server/document.rs b/crates/pg_workspace_new/src/workspace/server/document.rs index a35de6dd..4422daad 100644 --- a/crates/pg_workspace_new/src/workspace/server/document.rs +++ b/crates/pg_workspace_new/src/workspace/server/document.rs @@ -136,6 +136,13 @@ impl Document { } } + pub(super) fn statement_range(&self, sref: &StatementRef) -> Option { + self.statements + .iter() + .find(|s| s.0 == sref.id) + .map(|it| it.1) + } + pub(super) fn statement(&self, inner_ref: &StatementPosition) -> Statement { Statement { ref_: self.statement_ref(inner_ref), diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 56f344bf..6d0bb526 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -1,11 +1,11 @@ { - "name": "postgres_lsp", + "name": "postgres-lsp", "version": "0.0.0-dev", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "postgres_lsp", + "name": "postgres-lsp", "version": "0.0.0-dev", "license": "MIT OR Apache-2.0", "dependencies": { @@ -13,7 +13,7 @@ "anser": "^2.1.1", "d3": "^7.8.5", "d3-graphviz": "^5.0.2", - "vscode-languageclient": "^8.1.0" + "vscode-languageclient": "9.0.1" }, "devDependencies": { "@tsconfig/strictest": "^2.0.1", @@ -3829,24 +3829,26 @@ "dev": true }, "node_modules/vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", - "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "license": "MIT", "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.3" + "vscode-languageserver-protocol": "3.17.5" }, "engines": { - "vscode": "^1.67.0" + "vscode": "^1.82.0" } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { @@ -3869,18 +3871,20 @@ } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", "dependencies": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, "node_modules/vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", diff --git a/editors/code/package.json b/editors/code/package.json index 26e69b5f..ef72e2e7 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -47,7 +47,7 @@ "anser": "^2.1.1", "d3": "^7.8.5", "d3-graphviz": "^5.0.2", - "vscode-languageclient": "^8.1.0" + "vscode-languageclient": "9.0.1" }, "devDependencies": { "@tsconfig/strictest": "^2.0.1", diff --git a/pglsp.toml b/pglsp.toml index 7e6bcb8e..b2273c4c 100644 --- a/pglsp.toml +++ b/pglsp.toml @@ -8,7 +8,7 @@ ignore = [] [db] host = "127.0.0.1" -port = 54322 +port = 5432 username = "postgres" password = "postgres" database = "postgres"