From: Yegappan Lakshmanan Date: Sat, 15 Jul 2023 15:16:09 +0000 (-0700) Subject: Pass buffer number as the argument to the autocmd handlers X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=ec8faf7a18cc7f3c933d1f61b732f35d72d24ecf;p=vim-lsp.git Pass buffer number as the argument to the autocmd handlers --- diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 13614d3..9197165 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -567,8 +567,8 @@ def LspSetPopupFileType() enddef # complete done handler (LSP server-initiated actions after completion) -def LspCompleteDone() - var lspserver: dict = buf.CurbufGetServerChecked('completion') +def LspCompleteDone(bnr: number) + var lspserver: dict = buf.BufLspServerGet(bnr, 'completion') if lspserver->empty() return endif @@ -584,7 +584,6 @@ def LspCompleteDone() return endif - var bnr: number = bufnr() textedit.ApplyTextEdits(bnr, completionData.additionalTextEdits) enddef @@ -643,7 +642,7 @@ export def BufferInit(lspserver: dict, bnr: number, ftype: string) acmds->add({bufnr: bnr, event: 'CompleteDone', group: 'LSPBufferAutocmds', - cmd: 'LspCompleteDone()'}) + cmd: $'LspCompleteDone({bnr})'}) autocmd_add(acmds) enddef diff --git a/autoload/lsp/diag.vim b/autoload/lsp/diag.vim index 116c90c..33c7fe8 100644 --- a/autoload/lsp/diag.vim +++ b/autoload/lsp/diag.vim @@ -354,7 +354,7 @@ export def ProcessNewDiags(bnr: number) 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 @@ -448,30 +448,22 @@ export def DiagNotification(lspserver: dict, uri: string, diags_arg: list - var errCount = 0 - var warnCount = 0 - var infoCount = 0 - var hintCount = 0 - - var bnr: number = bufnr() +export def DiagsGetErrorCount(bnr: number): dict + var diagSevCount: list = [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 @@ -550,14 +542,15 @@ enddef # 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 diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 3b7f6c4..b2e6baf 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -353,13 +353,13 @@ def LspSavedFile() 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 @@ -377,7 +377,7 @@ def AddBufLocalAutocmds(lspserver: dict, bnr: number): void 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 && @@ -559,7 +559,7 @@ def RestartServer() endif # Start the server again - lspserver.startServer(bufnr('')) + lspserver.startServer(bufnr()) endfor AddBuffersToLsp(ftype) @@ -768,7 +768,7 @@ export def ErrorCount(): dict return res endif - return diag.DiagsGetErrorCount() + return diag.DiagsGetErrorCount(bufnr()) enddef # jump to the next/previous/first diagnostic message in the current buffer diff --git a/autoload/lsp/outline.vim b/autoload/lsp/outline.vim index dd7a049..b414884 100644 --- a/autoload/lsp/outline.vim +++ b/autoload/lsp/outline.vim @@ -213,7 +213,7 @@ enddef # 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 diff --git a/autoload/lsp/signature.vim b/autoload/lsp/signature.vim index 1bfac2d..55bb795 100644 --- a/autoload/lsp/signature.vim +++ b/autoload/lsp/signature.vim @@ -94,10 +94,10 @@ export def SignatureHelp(lspserver: dict, sighelp: any): void 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 diff --git a/autoload/lsp/snippet.vim b/autoload/lsp/snippet.vim index 05c685f..c03b49d 100644 --- a/autoload/lsp/snippet.vim +++ b/autoload/lsp/snippet.vim @@ -41,7 +41,7 @@ export def CompletionVsnip(items: list>) 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()