Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--helix-lsp/src/client.rs43
1 files changed, 26 insertions, 17 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index c901ad33..afb3b3a5 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -176,6 +176,29 @@ impl Client {
self.did_change_workspace(vec![workspace_for_uri(root_uri)], Vec::new())
}
+ /// Merge FormattingOptions with 'config.format' and return it
+ fn get_merged_formatting_options(
+ &self,
+ options: lsp::FormattingOptions,
+ ) -> lsp::FormattingOptions {
+ let config_format = self
+ .config
+ .as_ref()
+ .and_then(|cfg| cfg.get("format"))
+ .and_then(|fmt| HashMap::<String, lsp::FormattingProperty>::deserialize(fmt).ok());
+
+ if let Some(mut properties) = config_format {
+ // passed in options take precedence over 'config.format'
+ properties.extend(options.properties);
+ lsp::FormattingOptions {
+ properties,
+ ..options
+ }
+ } else {
+ options
+ }
+ }
+
#[allow(clippy::type_complexity, clippy::too_many_arguments)]
pub fn start(
cmd: &str,
@@ -1168,23 +1191,7 @@ impl Client {
_ => return None,
};
- // merge FormattingOptions with 'config.format'
- let config_format = self
- .config
- .as_ref()
- .and_then(|cfg| cfg.get("format"))
- .and_then(|fmt| HashMap::<String, lsp::FormattingProperty>::deserialize(fmt).ok());
-
- let options = if let Some(mut properties) = config_format {
- // passed in options take precedence over 'config.format'
- properties.extend(options.properties);
- lsp::FormattingOptions {
- properties,
- ..options
- }
- } else {
- options
- };
+ let options = self.get_merged_formatting_options(options);
let params = lsp::DocumentFormattingParams {
text_document,
@@ -1210,6 +1217,8 @@ impl Client {
_ => return None,
};
+ let options = self.get_merged_formatting_options(options);
+
let params = lsp::DocumentRangeFormattingParams {
text_document,
range,