Skip to content

Commit f64b9fa

Browse files
fsouzaautozimu
authored andcommitted
Implement window/showMessageRequest (#755)
* Implement window/showMessageRequest * Use Vec.get instead of indexing * Remove now unused variable
1 parent 9d68707 commit f64b9fa

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

autoload/LanguageClient.vim

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,13 @@ function! s:getInput(prompt, default) abort
183183
return l:input
184184
endfunction
185185

186+
function! s:inputlist(...) abort
187+
call inputsave()
188+
let l:selection = inputlist(a:000)
189+
call inputrestore()
190+
return l:selection
191+
endfunction
192+
186193
function! s:FZF(source, sink) abort
187194
if !get(g:, 'loaded_fzf')
188195
call s:Echoerr('FZF not loaded!')

src/language_server_protocol.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,6 +1834,31 @@ impl LanguageClient {
18341834
Ok(())
18351835
}
18361836

1837+
pub fn window_showMessageRequest(&self, params: &Value) -> Fallible<Value> {
1838+
info!("Begin {}", lsp::request::ShowMessageRequest::METHOD);
1839+
let msg_params: ShowMessageRequestParams = params.clone().to_lsp()?;
1840+
let msg_actions = msg_params.actions.unwrap_or_default();
1841+
let actions: Vec<Value> = msg_actions
1842+
.into_iter()
1843+
.enumerate()
1844+
.map(|(i, item)| Value::String(format!("{}) {}", i + 1, item.title)))
1845+
.collect();
1846+
let mut options: Vec<Value> = Vec::with_capacity(actions.len() + 1);
1847+
options.push(Value::String(msg_params.message));
1848+
options.extend(actions);
1849+
1850+
let mut v = Value::Null;
1851+
let result: Option<i64> = self.vim()?.rpcclient.call("s:inputlist", options)?;
1852+
if let Some(answer) = result {
1853+
let raw_actions: Vec<Value> = try_get("actions", &params)?.unwrap_or_default();
1854+
if let Some(action) = raw_actions.get((answer - 1) as usize) {
1855+
v = action.clone();
1856+
}
1857+
}
1858+
info!("End {}", lsp::request::ShowMessageRequest::METHOD);
1859+
Ok(v)
1860+
}
1861+
18371862
pub fn client_registerCapability(&self, languageId: &str, params: &Value) -> Fallible<Value> {
18381863
info!("Begin {}", lsp::request::RegisterCapability::METHOD);
18391864
let params: RegistrationParams = params.clone().to_lsp()?;

src/rpchandler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ impl LanguageClient {
7070
lsp::request::DocumentSymbolRequest::METHOD => {
7171
self.textDocument_documentSymbol(&params)
7272
}
73+
lsp::request::ShowMessageRequest::METHOD => self.window_showMessageRequest(&params),
7374
lsp::request::WorkspaceSymbol::METHOD => self.workspace_symbol(&params),
7475
lsp::request::CodeActionRequest::METHOD => self.textDocument_codeAction(&params),
7576
lsp::request::Completion::METHOD => self.textDocument_completion(&params),

0 commit comments

Comments
 (0)