# Returns the LSP server for the current buffer. Returns an empty dict if the
# server is not found.
export def CurbufGetServer(): dict<any>
- return s:BufLspServerGet(bufnr())
+ return BufLspServerGet(bufnr())
enddef
export def BufHasLspServer(bnr: number): bool
return
endif
- s:CreateLoclistWithCalls(calls, true)
+ CreateLoclistWithCalls(calls, true)
enddef
export def OutgoingCalls(calls: list<dict<any>>)
return
endif
- s:CreateLoclistWithCalls(calls, false)
+ CreateLoclistWithCalls(calls, false)
enddef
# vim: shiftwidth=2 softtabstop=2
for [lnum, diag] in lspserver.diagsMap[bnr]->items()
signs->add({id: 0, buffer: bnr, group: 'LSPDiag',
lnum: str2nr(lnum),
- name: s:DiagSevToSignName(diag.severity)})
+ name: DiagSevToSignName(diag.severity)})
endfor
signs->sign_placelist()
'lnum': diag.range.start.line + 1,
'col': util.GetLineByteFromPos(bnr, diag.range.start) + 1,
'text': text,
- 'type': s:DiagSevToQfType(diag.severity)})
+ 'type': DiagSevToQfType(diag.severity)})
endfor
setloclist(0, [], ' ', {'title': 'Language Server Diagnostics',
'items': qflist})
endif
# sort the diagnostics by line number
- var sortedDiags: list<number> = s:GetSortedDiagLines(lspserver, bnr)
+ var sortedDiags: list<number> = GetSortedDiagLines(lspserver, bnr)
if which == 'first'
cursor(sortedDiags[0], 1)
endif
childSymbols = {}
if symbol->has_key('children')
- s:ProcessDocSymbolTable(symbol.children, childSymbols, symbolLineTable)
+ ProcessDocSymbolTable(symbol.children, childSymbols, symbolLineTable)
endif
symInfo = {name: name, range: r, detail: symbolDetail,
children: childSymbols}
if reply.result[0]->has_key('location')
# SymbolInformation[]
- s:ProcessSymbolInfoTable(reply.result, symbolTypeTable, symbolLineTable)
+ ProcessSymbolInfoTable(reply.result, symbolTypeTable, symbolLineTable)
else
# DocumentSymbol[]
- s:ProcessDocSymbolTable(reply.result, symbolTypeTable, symbolLineTable)
+ ProcessDocSymbolTable(reply.result, symbolTypeTable, symbolLineTable)
endif
# sort the symbols by line number
symName = symbol.containerName .. '::' .. symName
endif
symName ..= ' [' .. LspSymbolKindToName(symbol.kind) .. ']'
- symName ..= ' ' .. s:MakeMenuName(
+ symName ..= ' ' .. MakeMenuName(
lspserver.workspaceSymbolPopup->popup_getpos().core_width,
fileName)
# Go to a definition using "textDocument/definition" LSP request
export def GotoDefinition(peek: bool)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Go to a declaration using "textDocument/declaration" LSP request
export def GotoDeclaration(peek: bool)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Go to a type definition using "textDocument/typeDefinition" LSP request
export def GotoTypedef(peek: bool)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Go to a implementation using "textDocument/implementation" LSP request
export def GotoImplementation(peek: bool)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Show the signature using "textDocument/signatureHelp" LSP method
# Invoked from an insert-mode mapping, so return an empty string.
def g:LspShowSignature(): string
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return ''
endif
if ftype == ''
return
endif
- var lspserver: dict<any> = s:LspGetServer(ftype)
+ var lspserver: dict<any> = LspGetServer(ftype)
if lspserver->empty()
return
endif
if !lspserver.running
if !lspInitializedOnce
- s:LspInitOnce()
+ LspInitOnce()
endif
lspserver.startServer()
endif
inoremap <expr> <buffer> <CR> pumvisible() ? "\<C-Y>\<CR>" : "\<CR>"
endif
else
- if s:LspOmniComplEnabled(ftype)
+ if LspOmniComplEnabled(ftype)
setbufvar(bnr, '&omnifunc', 'LspOmniFunc')
endif
endif
# Set buffer local autocmds
augroup LSPBufferAutocmds
# file saved notification handler
- exe 'autocmd BufWritePost <buffer=' .. bnr .. '> call s:LspSavedFile()'
+ exe 'autocmd BufWritePost <buffer=' .. bnr .. '> call LspSavedFile()'
if opt.lspOptions.autoComplete
# Trigger 24x7 insert mode completion when text is changed
var lspserver: dict<any> = lserver.NewLspServer(server.path, args)
if server.filetype->type() == v:t_string
- s:LspAddServer(server.filetype, lspserver)
- s:LspOmniComplSet(server.filetype, server.omnicompl)
+ LspAddServer(server.filetype, lspserver)
+ LspOmniComplSet(server.filetype, server.omnicompl)
elseif server.filetype->type() == v:t_list
for ftype in server.filetype
- s:LspAddServer(ftype, lspserver)
- s:LspOmniComplSet(ftype, server.omnicompl)
+ LspAddServer(ftype, lspserver)
+ LspOmniComplSet(ftype, server.omnicompl)
endfor
else
util.ErrMsg('Error: Unsupported file type information "' ..
return
endif
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Display the diagnostic messages from the LSP server for the current buffer
# in a quickfix list
export def ShowDiagnostics(): void
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Show the diagnostic message for the current line
export def LspShowCurrentDiag()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# jump to the next/previous/first diagnostic message in the current buffer
export def JumpToDiag(which: string): void
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# omni complete handler
def g:LspOmniFunc(findstart: number, base: string): any
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return -2
endif
# show symbol references
export def ShowReferences(peek: bool)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# highlight all the places where a symbol is referenced
def g:LspDocHighlight()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
return
endif
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Display all the locations where the current symbol is called from.
# Uses LSP "callHierarchy/incomingCalls" request
export def IncomingCalls()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
enddef
def g:LspGetIncomingCalls(item: dict<any>)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
enddef
def g:LspGetOutgoingCalls(item: dict<any>)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Display all the symbols used by the current symbol.
# Uses LSP "callHierarchy/outgoingCalls" request
export def OutgoingCalls()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Rename a symbol
# Uses LSP "textDocument/rename" request
export def Rename()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Perform a code action
# Uses LSP "textDocument/codeAction" request
export def CodeAction()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Perform a workspace wide symbol lookup
# Uses LSP "workspace/symbol" request
export def SymbolSearch(queryArg: string)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Display the list of workspace folders
export def ListWorkspaceFolders()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Add a workspace folder. Default is to use the current folder.
export def AddWorkspaceFolder(dirArg: string)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Remove a workspace folder. Default is to use the current folder.
export def RemoveWorkspaceFolder(dirArg: string)
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# expand the previous selection or start a new selection
export def SelectionExpand()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# shrink the previous selection or start a new selection
export def SelectionShrink()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# fold the entire document
export def FoldDocument()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# Display the LSP server capabilities
export def ShowServerCapabilities()
- var lspserver: dict<any> = s:CurbufGetServerChecked()
+ var lspserver: dict<any> = CurbufGetServerChecked()
if lspserver->empty()
return
endif
# interface TextDocumentIdentifier
# interface Position
return {textDocument: {uri: util.LspFileToUri(@%)},
- position: s:GetLspPosition()}
+ position: GetLspPosition()}
enddef
# Get a list of completion items.
# interface CompletionParams
# interface TextDocumentPositionParams
- req.params = s:GetLspTextDocPosition()
+ req.params = GetLspTextDocPosition()
# interface CompletionContext
req.params.context = {triggerKind: triggerKind_arg}
var req = lspserver.createRequest('textDocument/rename')
# interface RenameParams
# interface TextDocumentPositionParams
- req.params = s:GetLspTextDocPosition()
+ req.params = GetLspTextDocPosition()
req.params.newName = newName
lspserver.sendMessage(req)
if exists('g:LSPTest') && g:LSPTest
# First two lines in the buffer display comment information
var lnumMap: list<dict<any>> = [{}, {}]
var text: list<string> = []
- s:AddSymbolText(fname->bufnr(), symbolTypeTable, '', text, lnumMap, false)
+ AddSymbolText(fname->bufnr(), symbolTypeTable, '', text, lnumMap, false)
append('$', text)
w:lspSymbols = {filename: fname, lnumTable: lnumMap,
symbolsByLine: symbolLineTable}
prevWinID->win_gotoid()
# Highlight the current symbol
- s:OutlineHighlightCurrentSymbol()
+ OutlineHighlightCurrentSymbol()
# re-enable refreshing the outline window
skipRefresh = false
au!
autocmd BufEnter * call g:LspRequestDocSymbols()
# when the outline window is closed, do the cleanup
- autocmd BufUnload LSP-Outline call s:OutlineCleanup()
- autocmd CursorHold * call s:OutlineHighlightCurrentSymbol()
+ autocmd BufUnload LSP-Outline call OutlineCleanup()
+ autocmd CursorHold * call OutlineHighlightCurrentSymbol()
augroup END
prevWinID->win_gotoid()
# save the reply for expanding or shrinking the selected text.
lspserver.selection = {bnr: bnr, selRange: sel[0], index: 0}
- s:SelectText(bnr, sel[0].range)
+ SelectText(bnr, sel[0].range)
enddef
# Locate the range in the LSP reply at a specified level
var idx: number = lspserver.selection.index
# Locate the range in the LSP reply for the current selection
- selRange = s:GetSelRangeAtLevel(selRange, lspserver.selection.index)
+ selRange = GetSelRangeAtLevel(selRange, lspserver.selection.index)
# If the current selection is present in the LSP reply, then modify the
# selection
- if s:SelectionFromLSP(selRange.range, startpos, endpos)
+ if SelectionFromLSP(selRange.range, startpos, endpos)
if expand
# expand the selection
if selRange->has_key('parent')
# shrink the selection
if idx > 0
idx -= 1
- selRange = s:GetSelRangeAtLevel(lspserver.selection.selRange, idx)
+ selRange = GetSelRangeAtLevel(lspserver.selection.selRange, idx)
lspserver.selection.index = idx
endif
endif
- s:SelectText(bnr, selRange.range)
+ SelectText(bnr, selRange.range)
return
endif
endif
return
endif
- s:CloseSignaturePopup(lspserver)
+ CloseSignaturePopup(lspserver)
enddef
# Initialize the signature triggers for the current buffer
.. "<C-R>=LspShowSignature()<CR>"
endfor
# close the signature popup when leaving insert mode
- autocmd InsertLeave <buffer> call s:CloseCurBufSignaturePopup()
+ autocmd InsertLeave <buffer> call CloseCurBufSignaturePopup()
enddef
# Display the symbol signature help
export def SignatureDisplay(lspserver: dict<any>, sighelp: dict<any>): void
if sighelp->empty()
- s:CloseSignaturePopup(lspserver)
+ CloseSignaturePopup(lspserver)
return
endif
if sighelp.signatures->len() <= 0
util.WarnMsg('No signature help available')
- s:CloseSignaturePopup(lspserver)
+ CloseSignaturePopup(lspserver)
return
endif
for e in updated_edits
var A: list<number> = [e.A[0] - start_line, e.A[1]]
var B: list<number> = [e.B[0] - start_line, e.B[1]]
- lines = s:Set_lines(lines, A, B, e.lines)
+ lines = Set_lines(lines, A, B, e.lines)
endfor
#echomsg 'lines(2) = ' .. string(lines)
return lspf.LspServerReady()
enddef
-var TshowServers = s:lspf.showServers
-var TshowServerCapabilities = s:lspf.showServerCapabilities
-var TsetTraceServer = s:lspf.setTraceServer
-var TaddFile = s:lspf.addFile
-var TremoveFile = s:lspf.removeFile
-var TshowCurrentDiagInStatusLine = s:lspf.showCurrentDiagInStatusLine
-var TgotoDefinition = s:lspf.gotoDefinition
-var TgotoDeclaration = s:lspf.gotoDeclaration
-var TgotoTypedef = s:lspf.gotoTypedef
-var TgotoImplementation = s:lspf.gotoImplementation
-var TshowDiagnostics = s:lspf.showDiagnostics
-var TshowCurrentDiag = s:lspf.showCurrentDiag
-var TjumpToDiag = s:lspf.jumpToDiag
-var TdiagHighlightEnable = s:lspf.diagHighlightEnable
-var TdiagHighlightDisable = s:lspf.diagHighlightDisable
-var TshowReferences = s:lspf.showReferences
-var Toutline = s:lspf.outline
-var TtextDocFormat = s:lspf.textDocFormat
-var TincomingCalls = s:lspf.incomingCalls
-var ToutgoingCalls = s:lspf.outgoingCalls
-var Trename = s:lspf.rename
-var TcodeAction = s:lspf.codeAction
-var TsymbolSearch = s:lspf.symbolSearch
-var Thover = s:lspf.hover
-var TselectionExpand = s:lspf.selectionExpand
-var TselectionShrink = s:lspf.selectionShrink
-var TfoldDocument = s:lspf.foldDocument
-var TlistWorkspaceFolders = s:lspf.listWorkspaceFolders
-var TaddWorkspaceFolder = s:lspf.addWorkspaceFolder
-var TremoveWorkspaceFolder = s:lspf.removeWorkspaceFolder
+var TshowServers = lspf.showServers
+var TshowServerCapabilities = lspf.showServerCapabilities
+var TsetTraceServer = lspf.setTraceServer
+var TaddFile = lspf.addFile
+var TremoveFile = lspf.removeFile
+var TshowCurrentDiagInStatusLine = lspf.showCurrentDiagInStatusLine
+var TgotoDefinition = lspf.gotoDefinition
+var TgotoDeclaration = lspf.gotoDeclaration
+var TgotoTypedef = lspf.gotoTypedef
+var TgotoImplementation = lspf.gotoImplementation
+var TshowDiagnostics = lspf.showDiagnostics
+var TshowCurrentDiag = lspf.showCurrentDiag
+var TjumpToDiag = lspf.jumpToDiag
+var TdiagHighlightEnable = lspf.diagHighlightEnable
+var TdiagHighlightDisable = lspf.diagHighlightDisable
+var TshowReferences = lspf.showReferences
+var Toutline = lspf.outline
+var TtextDocFormat = lspf.textDocFormat
+var TincomingCalls = lspf.incomingCalls
+var ToutgoingCalls = lspf.outgoingCalls
+var Trename = lspf.rename
+var TcodeAction = lspf.codeAction
+var TsymbolSearch = lspf.symbolSearch
+var Thover = lspf.hover
+var TselectionExpand = lspf.selectionExpand
+var TselectionShrink = lspf.selectionShrink
+var TfoldDocument = lspf.foldDocument
+var TlistWorkspaceFolders = lspf.listWorkspaceFolders
+var TaddWorkspaceFolder = lspf.addWorkspaceFolder
+var TremoveWorkspaceFolder = lspf.removeWorkspaceFolder
augroup LSPAutoCmds
au!
# Script to run the unit-tests for the LSP Vim plugin
-VIMPRG=${VIMPRG:=/usr/bin/vim}
+#VIMPRG=${VIMPRG:=/usr/bin/vim}
+export VIMRUNTIME=/home/yega/Documents/vim/cmdexpand/vim/runtime
+VIMPRG=/home/yega/Documents/vim/cmdexpand/vim/src/vim
VIM_CMD="$VIMPRG -u NONE -U NONE -i NONE --noplugin -N --not-a-term"
$VIM_CMD -S unit_tests.vim
# Return zero for success, one for failure (like the assert function).
func WaitForAssert(assert, ...)
let timeout = get(a:000, 0, 5000)
- if s:WaitForCommon(v:null, a:assert, timeout) < 0
+ if WaitForCommon(v:null, a:assert, timeout) < 0
return 1
endif
return 0
# Either "expr" or "assert" is not v:null
# Return the waiting time for success, -1 for failure.
-func s:WaitForCommon(expr, assert, timeout)
+func WaitForCommon(expr, assert, timeout)
" using reltime() is more accurate, but not always available
let slept = 0
if exists('*reltimefloat')