Skip to content

Commit 226f021

Browse files
committed
support the workspace/configuration request
1 parent a98835f commit 226f021

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/language_server_protocol.rs

+29-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ use lsp_types::{
2323
CodeAction, CodeActionCapability, CodeActionContext, CodeActionKind,
2424
CodeActionKindLiteralSupport, CodeActionLiteralSupport, CodeActionOrCommand, CodeActionParams,
2525
CodeActionResponse, CodeLens, Command, CompletionCapability, CompletionItem,
26-
CompletionItemCapability, CompletionResponse, CompletionTextEdit, Diagnostic,
27-
DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams,
26+
CompletionItemCapability, CompletionResponse, CompletionTextEdit, ConfigurationParams,
27+
Diagnostic, DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams,
2828
DidChangeWatchedFilesParams, DidChangeWatchedFilesRegistrationOptions,
2929
DidCloseTextDocumentParams, DidOpenTextDocumentParams, DidSaveTextDocumentParams,
3030
DocumentChangeOperation, DocumentChanges, DocumentFormattingParams, DocumentHighlight,
@@ -1235,6 +1235,7 @@ impl LanguageClient {
12351235
}),
12361236
workspace: Some(WorkspaceClientCapabilities {
12371237
apply_edit: Some(true),
1238+
configuration: Some(true),
12381239
did_change_watched_files: Some(GenericCapability {
12391240
dynamic_registration: Some(true),
12401241
}),
@@ -2018,6 +2019,32 @@ impl LanguageClient {
20182019
Ok(())
20192020
}
20202021

2022+
pub fn workspace_configuration(&self, params: &Value) -> Result<Value> {
2023+
let config_params = ConfigurationParams::deserialize(params)?;
2024+
2025+
let filename = self.vim()?.get_filename(&Value::Null)?;
2026+
let language_id = self.vim()?.get_language_id(&filename, &Value::Null)?;
2027+
let root = self.get(|state| state.roots.get(&language_id).cloned().unwrap_or_default())?;
2028+
2029+
let settings = self.get_workspace_settings(&root)?;
2030+
2031+
let configuration_items = config_params
2032+
.items
2033+
.into_iter()
2034+
.map(|item| {
2035+
let mut settings_val = &settings;
2036+
2037+
for item in item.section.unwrap().split('.') {
2038+
settings_val = &settings_val[item];
2039+
}
2040+
2041+
Ok(settings_val.clone())
2042+
})
2043+
.collect::<Result<Value>>()?;
2044+
2045+
Ok(serde_json::to_value(&configuration_items)?)
2046+
}
2047+
20212048
pub fn handle_code_lens_action(&self, params: &Value) -> Result<Value> {
20222049
let filename = self.vim()?.get_filename(params)?;
20232050
let line = self.vim()?.get_position(params)?.line;

src/rpchandler.rs

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ impl LanguageClient {
8585
request::Rename::METHOD => self.text_document_rename(&params),
8686
request::DocumentSymbolRequest::METHOD => self.text_document_document_symbol(&params),
8787
request::ShowMessageRequest::METHOD => self.window_show_message_request(&params),
88+
request::WorkspaceConfiguration::METHOD => self.workspace_configuration(&params),
8889
request::WorkspaceSymbol::METHOD => self.workspace_symbol(&params),
8990
request::CodeActionRequest::METHOD => self.text_document_code_action(&params),
9091
request::Completion::METHOD => self.text_document_completion(&params),

0 commit comments

Comments
 (0)