]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Pass buffer number as the argument to the autocmd handlers
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 15 Jul 2023 15:16:09 +0000 (08:16 -0700)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 15 Jul 2023 15:16:09 +0000 (08:16 -0700)
autoload/lsp/completion.vim
autoload/lsp/diag.vim
autoload/lsp/lsp.vim
autoload/lsp/outline.vim
autoload/lsp/signature.vim
autoload/lsp/snippet.vim

index 13614d305845f0b828d17b9f6c9a54c13456424f..91971651eef229d686f95be0f6628c93097a5c0e 100644 (file)
@@ -567,8 +567,8 @@ def LspSetPopupFileType()
 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
@@ -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<any>, bnr: number, ftype: string)
   acmds->add({bufnr: bnr,
              event: 'CompleteDone',
              group: 'LSPBufferAutocmds',
-             cmd: 'LspCompleteDone()'})
+             cmd: $'LspCompleteDone({bnr})'})
 
   autocmd_add(acmds)
 enddef
index 116c90c35bf430aa00dc998c67709612e351fd19..33c7fe8b2c2ddf6fb992c3256f0320cb0ef605fa 100644 (file)
@@ -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<any>, uri: string, diags_arg: list<d
 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
@@ -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
index 3b7f6c47e3386fdb46a70e96860b2d5935225fbf..b2e6baf40176a6d96e38f7f1708bb6f95e2b6921 100644 (file)
@@ -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<any>, 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<number>
     return res
   endif
 
-  return diag.DiagsGetErrorCount()
+  return diag.DiagsGetErrorCount(bufnr())
 enddef
 
 # jump to the next/previous/first diagnostic message in the current buffer
index dd7a049f3f9d578e6e11566b426edae7c3db0b9d..b414884d551e92dfae5c8845512332391d02a4c4 100644 (file)
@@ -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
index 1bfac2d1f3f5dd5c940baa5220ffa2171daed5f6..55bb795fceab33049ac8c5355fbf301453662754 100644 (file)
@@ -94,10 +94,10 @@ export def SignatureHelp(lspserver: dict<any>, 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
index 05c685fe734f874d81b9d334bb2abdadfb11919a..c03b49dd348d3f07e9b37cd8b86fe530507b6688 100644 (file)
@@ -41,7 +41,7 @@ export def CompletionVsnip(items: list<dict<any>>)
     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()