Skip to content

Commit bbf6e64

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

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/language_server_protocol.rs

+24-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,27 @@ 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+
.filter_map(|item| {
2035+
let section = format!("/{}", item.section?.replace(".", "/"));
2036+
settings.pointer(&section).cloned()
2037+
})
2038+
.collect::<Value>();
2039+
2040+
Ok(serde_json::to_value(&configuration_items)?)
2041+
}
2042+
20212043
pub fn handle_code_lens_action(&self, params: &Value) -> Result<Value> {
20222044
let filename = self.vim()?.get_filename(params)?;
20232045
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)