diff --git a/biome.jsonc b/biome.jsonc index 36b60d9b..582bee9b 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", "vcs": { "enabled": false, "clientKind": "git", @@ -8,7 +8,7 @@ "files": { "ignoreUnknown": false, "ignore": [], - "include": ["packages/**/*"] + "include": ["/packages/**/*"] }, "formatter": { "enabled": true, diff --git a/crates/pgt_lsp/src/server.rs b/crates/pgt_lsp/src/server.rs index 9bf9b9c2..4c05c0e4 100644 --- a/crates/pgt_lsp/src/server.rs +++ b/crates/pgt_lsp/src/server.rs @@ -132,7 +132,7 @@ impl LanguageServer for LSPServer { ConfigName::pgt_jsonc() ); - futures::join!(self.session.load_workspace_settings()); + futures::join!(self.session.load_workspace_settings(None)); let msg = format!("Server initialized with PID: {}", std::process::id()); self.session @@ -152,8 +152,10 @@ impl LanguageServer for LSPServer { } #[tracing::instrument(level = "info", skip_all)] - async fn did_change_configuration(&self, _params: DidChangeConfigurationParams) { - self.session.load_workspace_settings().await; + async fn did_change_configuration(&self, params: DidChangeConfigurationParams) { + self.session + .load_workspace_settings(serde_json::from_value(params.settings).ok()) + .await; self.setup_capabilities().await; self.session.update_all_diagnostics().await; } @@ -174,7 +176,7 @@ impl LanguageServer for LSPServer { if ConfigName::file_names() .contains(&&*watched_file.display().to_string()) { - self.session.load_workspace_settings().await; + self.session.load_workspace_settings(None).await; self.setup_capabilities().await; // self.session.update_all_diagnostics().await; // for now we are only interested to the configuration file, diff --git a/crates/pgt_lsp/src/session.rs b/crates/pgt_lsp/src/session.rs index db17dfd1..7ccf2bab 100644 --- a/crates/pgt_lsp/src/session.rs +++ b/crates/pgt_lsp/src/session.rs @@ -3,10 +3,11 @@ use crate::diagnostics::LspError; use crate::documents::Document; use crate::utils; use anyhow::Result; +use biome_deserialize::Merge; use futures::StreamExt; use futures::stream::FuturesUnordered; use pgt_analyse::RuleCategoriesBuilder; -use pgt_configuration::ConfigurationPathHint; +use pgt_configuration::{ConfigurationPathHint, PartialConfiguration}; use pgt_diagnostics::{DiagnosticExt, Error}; use pgt_fs::{FileSystem, PgTPath}; use pgt_workspace::Workspace; @@ -386,11 +387,13 @@ impl Session { /// This function attempts to read the `postgrestools.jsonc` configuration file from /// the root URI and update the workspace settings accordingly #[tracing::instrument(level = "trace", skip(self))] - pub(crate) async fn load_workspace_settings(&self) { + pub(crate) async fn load_workspace_settings(&self, extra_config: Option) { // Providing a custom configuration path will not allow to support workspaces if let Some(config_path) = &self.config_path { let base_path = ConfigurationPathHint::FromUser(config_path.clone()); - let status = self.load_pgt_configuration_file(base_path).await; + let status = self + .load_pgt_configuration_file(base_path, extra_config) + .await; self.set_configuration_status(status); } else if let Some(folders) = self.get_workspace_folders() { info!("Detected workspace folder."); @@ -401,9 +404,10 @@ impl Session { match base_path { Ok(base_path) => { let status = self - .load_pgt_configuration_file(ConfigurationPathHint::FromWorkspace( - base_path, - )) + .load_pgt_configuration_file( + ConfigurationPathHint::FromWorkspace(base_path), + extra_config.clone(), + ) .await; self.set_configuration_status(status); } @@ -420,7 +424,9 @@ impl Session { None => ConfigurationPathHint::default(), Some(path) => ConfigurationPathHint::FromLsp(path), }; - let status = self.load_pgt_configuration_file(base_path).await; + let status = self + .load_pgt_configuration_file(base_path, extra_config) + .await; self.set_configuration_status(status); } } @@ -428,17 +434,22 @@ impl Session { async fn load_pgt_configuration_file( &self, base_path: ConfigurationPathHint, + extra_config: Option, ) -> ConfigurationStatus { match load_configuration(&self.fs, base_path.clone()) { Ok(loaded_configuration) => { let LoadedConfiguration { - configuration: fs_configuration, + configuration: mut fs_configuration, directory_path: configuration_path, .. } = loaded_configuration; info!("Configuration loaded successfully from disk."); info!("Update workspace settings."); + if let Some(ws_configuration) = extra_config { + fs_configuration.merge_with(ws_configuration); + } + let result = fs_configuration .retrieve_gitignore_matches(&self.fs, configuration_path.as_deref()); diff --git a/crates/pgt_workspace/src/workspace/server.rs b/crates/pgt_workspace/src/workspace/server.rs index 3c14f352..5a7bfc44 100644 --- a/crates/pgt_workspace/src/workspace/server.rs +++ b/crates/pgt_workspace/src/workspace/server.rs @@ -167,6 +167,7 @@ impl Workspace for WorkspaceServer { )?; tracing::info!("Updated settings in workspace"); + tracing::debug!("Updated settings are {:#?}", self.settings()); self.connection .write()