Skip to content

Commit bf38d2c

Browse files
committed
support the workspace/configuration request
1 parent d6d6d08 commit bf38d2c

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
@@ -24,8 +24,8 @@ use lsp_types::{
2424
CodeAction, CodeActionCapability, CodeActionContext, CodeActionKind,
2525
CodeActionKindLiteralSupport, CodeActionLiteralSupport, CodeActionOrCommand, CodeActionParams,
2626
CodeActionResponse, CodeLens, Command, CompletionCapability, CompletionItem,
27-
CompletionItemCapability, CompletionResponse, CompletionTextEdit, Diagnostic,
28-
DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams,
27+
CompletionItemCapability, CompletionResponse, CompletionTextEdit, ConfigurationParams,
28+
Diagnostic, DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams,
2929
DidChangeWatchedFilesParams, DidChangeWatchedFilesRegistrationOptions,
3030
DidCloseTextDocumentParams, DidOpenTextDocumentParams, DidSaveTextDocumentParams,
3131
DocumentChangeOperation, DocumentChanges, DocumentFormattingParams, DocumentHighlight,
@@ -1261,6 +1261,7 @@ impl LanguageClient {
12611261
}),
12621262
workspace: Some(WorkspaceClientCapabilities {
12631263
apply_edit: Some(true),
1264+
configuration: Some(true),
12641265
did_change_watched_files: Some(GenericCapability {
12651266
dynamic_registration: Some(true),
12661267
}),
@@ -2045,6 +2046,27 @@ impl LanguageClient {
20452046
Ok(())
20462047
}
20472048

2049+
pub fn workspace_configuration(&self, params: &Value) -> Result<Value> {
2050+
let config_params = ConfigurationParams::deserialize(params)?;
2051+
2052+
let filename = self.vim()?.get_filename(&Value::Null)?;
2053+
let language_id = self.vim()?.get_language_id(&filename, &Value::Null)?;
2054+
let root = self.get(|state| state.roots.get(&language_id).cloned().unwrap_or_default())?;
2055+
2056+
let settings = self.get_workspace_settings(&root)?;
2057+
2058+
let configuration_items = config_params
2059+
.items
2060+
.into_iter()
2061+
.filter_map(|item| {
2062+
let section = format!("/{}", item.section?.replace(".", "/"));
2063+
settings.pointer(&section).cloned()
2064+
})
2065+
.collect::<Value>();
2066+
2067+
Ok(serde_json::to_value(&configuration_items)?)
2068+
}
2069+
20482070
pub fn handle_code_lens_action(&self, params: &Value) -> Result<Value> {
20492071
let filename = self.vim()?.get_filename(params)?;
20502072
let line = self.vim()?.get_position(params)?.line;

src/rpchandler.rs

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

0 commit comments

Comments
 (0)