req.params.context = {triggerKind: triggerKind_arg}
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/definition"
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
- s:waitForReponse(lspserver, req)
+ lspserver.waitForReponse(req)
enddef
# Request: "textDocument/declaration"
lspserver.sendMessage(req)
- s:waitForReponse(lspserver, req)
+ lspserver.waitForReponse(req)
enddef
# Request: "textDocument/typeDefinition"
lspserver.sendMessage(req)
- s:waitForReponse(lspserver, req)
+ lspserver.waitForReponse(req)
enddef
# Request: "textDocument/implementation"
lspserver.sendMessage(req)
- s:waitForReponse(lspserver, req)
+ lspserver.waitForReponse(req)
enddef
# get symbol signature help.
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
def s:didSaveFile(lspserver: dict<any>, bnr: number): void
# interface TextDocumentPositionParams
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/references"
lspserver.peekSymbol = peek
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/documentHighlight"
# interface TextDocumentPositionParams
req.params->extend(s:getLspTextDocPosition())
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/documentSymbol"
# interface TextDocumentIdentifier
req.params->extend({textDocument: {uri: util.LspFileToUri(fname)}})
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/formatting"
endif
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/prepareCallHierarchy"
# interface CallHierarchyItem
req.params->extend({item: hierItem})
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "callHierarchy/outgoingCalls"
# interface CallHierarchyItem
req.params->extend({item: hierItem})
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/rename"
req.params = s:getLspTextDocPosition()
req.params.newName = newName
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request: "textDocument/codeAction"
req.params->extend({context: {diagnostics: d}})
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# List project-wide symbols matching query string
req.params->extend({textDocument: {uri: util.LspFileToUri(fname)}, positions: [s:getLspPosition()]})
lspserver.sendMessage(req)
- s:waitForReponse(lspserver, req)
+ lspserver.waitForReponse(req)
enddef
# Expand the previous selection or start a new one
# interface TextDocumentIdentifier
req.params->extend({textDocument: {uri: util.LspFileToUri(fname)}})
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Request the LSP server to execute a command
var req = lspserver.createRequest('workspace/executeCommand')
req.params->extend(cmd)
lspserver.sendMessage(req)
+ if exists('g:LSPTest') && g:LSPTest
+ # When running LSP tests, make this a synchronous call
+ lspserver.waitForReponse(req)
+ endif
enddef
# Display the LSP server capabilities (received during the initialization
createNotification: function('s:createNotification', [lspserver]),
sendResponse: function('s:sendResponse', [lspserver]),
sendMessage: function('s:sendMessage', [lspserver]),
+ waitForReponse: function('s:waitForReponse', [lspserver]),
processReply: function(handlers.ProcessReply, [lspserver]),
processNotif: function(handlers.ProcessNotif, [lspserver]),
processRequest: function(handlers.ProcessRequest, [lspserver]),
# Test for formatting a file using LspFormat
def Test_LspFormat()
:silent! edit Xtest.c
+ sleep 200m
setline(1, [' int i;', ' int j;'])
:redraw!
:LspFormat
- :sleep 1
assert_equal(['int i;', 'int j;'], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, ['int f1(int i)', '{', 'int j = 10; return j;', '}'])
:redraw!
:LspFormat
- :sleep 500m
assert_equal(['int f1(int i) {', ' int j = 10;', ' return j;', '}'],
getline(1, '$'))
setline(1, ['', 'int i;'])
:redraw!
:LspFormat
- :sleep 500m
assert_equal(['', 'int i;'], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, [' int i;'])
:redraw!
:LspFormat
- :sleep 500m
assert_equal(['int i;'], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, [' int i; '])
:redraw!
:LspFormat
- :sleep 500m
assert_equal(['int i;'], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, ['int i;', '', '', ''])
:redraw!
:LspFormat
- :sleep 500m
assert_equal(['int i;'], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, ['int f1(){int x;int y;x=1;y=2;return x+y;}'])
:redraw!
:LspFormat
- :sleep 500m
var expected: list<string> =<< trim END
int f1() {
int x;
setline(1, ['', '', '', ''])
:redraw!
:LspFormat
- :sleep 500m
assert_equal([''], getline(1, '$'))
deletebufline('', 1, '$')
setline(1, lines)
:redraw!
:4LspFormat
- :sleep 500m
expected =<< trim END
int f1() {
int i, j;
# file using LSP
def Test_LspShowReferences()
:silent! edit Xtest.c
+ sleep 200m
var lines: list<string> =<< trim END
int count;
void redFunc()
cursor(5, 2)
var bnr: number = bufnr()
:LspShowReferences
- :sleep 1
- WaitForAssert(() => assert_equal('quickfix', getwinvar(winnr('$'), '&buftype')))
+ assert_equal('quickfix', getwinvar(winnr('$'), '&buftype'))
var qfl: list<dict<any>> = getloclist(0)
assert_equal(bnr, qfl[0].bufnr)
assert_equal(3, qfl->len())
:only
cursor(1, 5)
:LspShowReferences
- :sleep 500m
- WaitForAssert(() => assert_equal(1, getloclist(0)->len()))
+ assert_equal(1, getloclist(0)->len())
qfl = getloclist(0)
assert_equal([1, 5], [qfl[0].lnum, qfl[0].col])
bw!
# Test for LSP diagnostics
def Test_LspDiag()
:silent! edit Xtest.c
+ sleep 200m
var lines: list<string> =<< trim END
void blueFunc()
{
# Test for :LspCodeAction
def Test_LspCodeAction()
silent! edit Xtest.c
- sleep 500m
+ sleep 200m
var lines: list<string> =<< trim END
void testFunc()
{
}
END
setline(1, lines)
- sleep 500m
+ sleep 1
cursor(4, 1)
redraw!
g:LSPTest_CodeActionChoice = 1
:LspCodeAction
- sleep 500m
- WaitForAssert(() => assert_equal("\tcount = 20;", getline(4)))
+ assert_equal("\tcount = 20;", getline(4))
setline(4, "\tcount = 20:")
cursor(4, 1)
sleep 500m
g:LSPTest_CodeActionChoice = 0
:LspCodeAction
- sleep 500m
- WaitForAssert(() => assert_equal("\tcount = 20:", getline(4)))
+ assert_equal("\tcount = 20:", getline(4))
g:LSPTest_CodeActionChoice = 2
cursor(4, 1)
:LspCodeAction
- sleep 500m
- WaitForAssert(() => assert_equal("\tcount = 20:", getline(4)))
+ assert_equal("\tcount = 20:", getline(4))
g:LSPTest_CodeActionChoice = 1
cursor(4, 1)
:LspCodeAction
- sleep 500m
- WaitForAssert(() => assert_equal("\tcount = 20;", getline(4)))
+ assert_equal("\tcount = 20;", getline(4))
bw!
# empty file
# Test for :LspRename
def Test_LspRename()
silent! edit Xtest.c
- sleep 1
+ sleep 200m
var lines: list<string> =<< trim END
void F1(int count)
{
search('count')
redraw!
feedkeys(":LspRename\<CR>er\<CR>", "xt")
- sleep 1
redraw!
var expected: list<string> =<< trim END
void F1(int counter)
count = 5;
}
END
- WaitForAssert(() => assert_equal(expected, getline(1, '$')))
+ assert_equal(expected, getline(1, '$'))
bw!
# empty file
# Test for :LspSelectionExpand and :LspSelectionShrink
def Test_LspSelection()
silent! edit Xtest.c
- sleep 500m
+ sleep 200m
var lines: list<string> =<< trim END
void F1(int count)
{
# Test for :LspGotoDefinition, :LspGotoDeclaration and :LspGotoImpl
def Test_LspGotoDefinition()
silent! edit Xtest.cpp
+ sleep 200m
var lines: list<string> =<< trim END
#include <iostream>
using namespace std;
:messages clear
cursor(14, 5)
:LspGotoDeclaration
- sleep 1
var m = execute('messages')->split("\n")
assert_equal('Error: declaration is not found', m[1])
:messages clear
:LspGotoDefinition
- sleep 1
m = execute('messages')->split("\n")
assert_equal('Error: definition is not found', m[1])
:messages clear
:LspGotoImpl
- sleep 1
m = execute('messages')->split("\n")
assert_equal('Error: implementation is not found', m[1])
endif
# Test for :LspHighlight
def Test_LspHighlight()
silent! edit Xtest.c
+ sleep 200m
var lines: list<string> =<< trim END
void f1(int arg)
{
:sleep 1
cursor(1, 13)
:LspHighlight
- :sleep 1
var expected: dict<any>
expected = {id: 0, col: 13, end: 1, type: 'LspTextRef', length: 3, start: 1}
if has('patch-8.2.3233')
endif
assert_equal([expected], prop_list(4))
:LspHighlightClear
- :sleep 1
assert_equal([], prop_list(1))
assert_equal([], prop_list(3))
assert_equal([], prop_list(4))
# Test for :LspHover
def Test_LspHover()
silent! edit Xtest.c
+ sleep 200m
var lines: list<string> =<< trim END
int f1(int a)
{
:sleep 1
cursor(8, 4)
:LspHover
- :sleep 1
var p: list<number> = popup_list()
assert_equal(1, p->len())
assert_equal(['function f1', '', '→ int', 'Parameters:', '- int a', '', 'int f1(int a)'], getbufline(winbufnr(p[0]), 1, '$'))
popup_close(p[0])
cursor(7, 1)
:LspHover
- :sleep 1
assert_equal([], popup_list())
:%bw!
enddef
# Test for :LspShowSignature
def Test_LspShowSignature()
silent! edit Xtest.c
+ sleep 200m
var lines: list<string> =<< trim END
int MyFunc(int a, int b)
{
:sleep 1
cursor(8, 10)
:LspShowSignature
- :sleep 1
var p: list<number> = popup_list()
var bnr: number = winbufnr(p[0])
assert_equal(1, p->len())
setline(line('.'), ' MyFunc(10, ')
cursor(8, 13)
:LspShowSignature
- :sleep 1
p = popup_list()
bnr = winbufnr(p[0])
assert_equal(1, p->len())