ch->ch_sendraw(payload_js)
enddef
+# Wait for a response message from the LSP server for the request "req"
+# Waits for a maximum of 5 seconds
+def s:waitForReponse(lspserver: dict<any>, req: dict<any>)
+ var maxCount: number = 500
+ var key: string = req.id->string()
+
+ while lspserver.requests->has_key(key) && maxCount > 0
+ sleep 10m
+ maxCount -= 1
+ endwhile
+enddef
+
# Send a LSP "textDocument/didOpen" notification
# Params: DidOpenTextDocumentParams
def s:textdocDidOpen(lspserver: dict<any>, bnr: number, ftype: string): void
# Request: "textDocument/definition"
# Param: DefinitionParams
-def s:gotoDefinition(lspserver: dict<any>, peek: bool): void
+def s:gotoDefinition(lspserver: dict<any>, peek: bool)
# Check whether LSP server supports jumping to a definition
if !lspserver.caps->has_key('definitionProvider')
|| !lspserver.caps.definitionProvider
# interface TextDocumentPositionParams
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+
+ s:waitForReponse(lspserver, req)
enddef
# Request: "textDocument/declaration"
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+
+ s:waitForReponse(lspserver, req)
enddef
# Request: "textDocument/typeDefinition"
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+
+ s:waitForReponse(lspserver, req)
enddef
# Request: "textDocument/implementation"
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+
+ s:waitForReponse(lspserver, req)
enddef
# get symbol signature help.
:sleep 1
cursor(24, 6)
:LspGotoDeclaration
- :sleep 1
assert_equal([6, 19], [line('.'), col('.')])
exe "normal! \<C-t>"
assert_equal([24, 6], [line('.'), col('.')])
:LspGotoDefinition
- :sleep 1
assert_equal([9, 12], [line('.'), col('.')])
exe "normal! \<C-t>"
assert_equal([24, 6], [line('.'), col('.')])
:LspGotoImpl
- :sleep 1
assert_equal([15, 11], [line('.'), col('.')])
exe "normal! \<C-t>"
assert_equal([24, 6], [line('.'), col('.')])