enddef
# complete done handler (LSP server-initiated actions after completion)
-def LspCompleteDone()
- var lspserver: dict<any> = buf.CurbufGetServerChecked('completion')
+def LspCompleteDone(bnr: number)
+ var lspserver: dict<any> = buf.BufLspServerGet(bnr, 'completion')
if lspserver->empty()
return
endif
return
endif
- var bnr: number = bufnr()
textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits)
enddef
acmds->add({bufnr: bnr,
event: 'CompleteDone',
group: 'LSPBufferAutocmds',
- cmd: 'LspCompleteDone()'})
+ cmd: $'LspCompleteDone({bnr})'})
autocmd_add(acmds)
enddef
if curmode == 'i' || curmode == 'R' || curmode == 'Rv'
# postpone placing signs in insert mode and replace mode. These will be
# placed after the user returns to Normal mode.
- b:LspDiagsUpdatePending = true
+ setbufvar(bnr, 'LspDiagsUpdatePending', true)
return
endif
enddef
# get the count of error in the current buffer
-export def DiagsGetErrorCount(): dict<number>
- var errCount = 0
- var warnCount = 0
- var infoCount = 0
- var hintCount = 0
-
- var bnr: number = bufnr()
+export def DiagsGetErrorCount(bnr: number): dict<number>
+ var diagSevCount: list<number> = [0, 0, 0, 0, 0]
if diagsMap->has_key(bnr)
var diags = diagsMap[bnr].sortedDiagnostics
for diag in diags
- var severity = diag->get('severity', -1)
- if severity == 1
- errCount += 1
- elseif severity == 2
- warnCount += 1
- elseif severity == 3
- infoCount += 1
- elseif severity == 4
- hintCount += 1
- endif
+ var severity = diag->get('severity', 0)
+ diagSevCount[severity] += 1
endfor
endif
- return {Error: errCount, Warn: warnCount, Info: infoCount, Hint: hintCount}
+ return {
+ Error: diagSevCount[1],
+ Warn: diagSevCount[2],
+ Info: diagSevCount[3],
+ Hint: diagSevCount[4]
+ }
enddef
# Map the LSP DiagnosticSeverity to a quickfix type character
# Display the diagnostic messages from the LSP server for the current buffer
# in a location list
export def ShowAllDiags(): void
- if !DiagsUpdateLocList(bufnr(), true)
+ var bnr: number = bufnr()
+ if !DiagsUpdateLocList(bnr, true)
util.WarnMsg($'No diagnostic messages found for {@%}')
return
endif
var save_winid = win_getid()
# make the diagnostics error list the active one and open it
- var LspQfId: number = getbufvar(bufnr(), 'LspQfId', 0)
+ var LspQfId: number = bnr->getbufvar('LspQfId', 0)
var LspQfNr: number = getloclist(0, {id: LspQfId, nr: 0}).nr
exe $':{LspQfNr} lhistory'
:lopen
enddef
# Called after leaving insert mode. Used to process diag messages (if any)
-def LspLeftInsertMode()
- if !exists('b:LspDiagsUpdatePending')
+def LspLeftInsertMode(bnr: number)
+ var updatePending: bool = bnr->getbufvar('LspDiagsUpdatePending', false)
+ if !updatePending
return
endif
- :unlet b:LspDiagsUpdatePending
+ setbufvar(bnr, 'LspDiagsUpdatePending', false)
- var bnr: number = bufnr()
diag.ProcessNewDiags(bnr)
enddef
acmds->add({bufnr: bnr,
event: 'InsertLeave',
group: 'LSPBufferAutocmds',
- cmd: 'LspLeftInsertMode()'})
+ cmd: $'LspLeftInsertMode({bnr})'})
# Auto highlight all the occurrences of the current keyword
if opt.lspOptions.autoHighlight &&
endif
# Start the server again
- lspserver.startServer(bufnr(''))
+ lspserver.startServer(bufnr())
endfor
AddBuffersToLsp(ftype)
return res
endif
- return diag.DiagsGetErrorCount()
+ return diag.DiagsGetErrorCount(bufnr())
enddef
# jump to the next/previous/first diagnostic message in the current buffer
# when the outline window is closed, do the cleanup
def OutlineCleanup()
# Remove the outline autocommands
- silent! autocmd_delete([{group: 'LSPOutline'}])
+ :silent! autocmd_delete([{group: 'LSPOutline'}])
:silent! syntax clear LSPTitle
enddef
lspserver.signaturePopup->popup_close()
var popupID = text->popup_atcursor({moved: [col('.') - 1, 9999999]})
- var bnum: number = popupID->winbufnr()
- prop_type_add('signature', {bufnr: bnum, highlight: 'LspSigActiveParameter'})
+ var bnr: number = popupID->winbufnr()
+ prop_type_add('signature', {bufnr: bnr, highlight: 'LspSigActiveParameter'})
if hllen > 0
- prop_add(1, startcol + 1, {bufnr: bnum, length: hllen, type: 'signature'})
+ prop_add(1, startcol + 1, {bufnr: bnr, length: hllen, type: 'signature'})
endif
lspserver.signaturePopup = popupID
endif
return
endif
var starttext = getline('.')->slice(0, charcol('.') - 1)
- for item in vsnip#get_complete_items(bufnr('%'))
+ for item in vsnip#get_complete_items(bufnr())
var match = starttext->matchstrpos(Pattern(item.abbr))
if match[0] != ''
var user_data = item.user_data->json_decode()