]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Make it possible to get diagnostics/line for a single server
authorAndreas Louv <andreas@louv.dk>
Wed, 12 Apr 2023 05:58:10 +0000 (07:58 +0200)
committerAndreas Louv <andreas@louv.dk>
Thu, 13 Apr 2023 22:01:25 +0000 (00:01 +0200)
autoload/lsp/diag.vim
autoload/lsp/lspserver.vim

index 45d90b69dde8ad3f47d4efa1b4085a82512d556b..2e7c2166e3bf96ddfc92d8f8227a1782a043cd6b 100644 (file)
@@ -484,7 +484,7 @@ export def GetDiagByPos(bnr: number, lnum: number, col: number,
 enddef
 
 # Get all diagnostics from the LSP server for a particular line in a file
-export def GetDiagsByLine(bnr: number, lnum: number): list<dict<any>>
+export def GetDiagsByLine(bnr: number, lnum: number, lspserver: dict<any> = null_dict): list<dict<any>>
   if !diagsMap->has_key(bnr)
     return []
   endif
@@ -493,11 +493,20 @@ export def GetDiagsByLine(bnr: number, lnum: number): list<dict<any>>
 
   var serverDiagsByLnum = diagsMap[bnr].serverDiagnosticsByLnum
 
-  for diagsByLnum in serverDiagsByLnum->values()
-    if diagsByLnum->has_key(lnum)
-      diags->extend(diagsByLnum[lnum])
+  if lspserver == null_dict
+    for diagsByLnum in serverDiagsByLnum->values()
+      if diagsByLnum->has_key(lnum)
+        diags->extend(diagsByLnum[lnum])
+      endif
+    endfor
+  else
+    if !serverDiagsByLnum->has_key(lspserver.id)
+      return []
     endif
-  endfor
+    if serverDiagsByLnum[lspserver.id]->has_key(lnum)
+      diags = serverDiagsByLnum[lspserver.id][lnum]
+    endif
+  endif
 
   return diags->sort((a, b) => {
     return a.range.start.character - b.range.start.character
index 3e87840603b55de5bac8a2c6827d1903a03cf0ee..01c1d062927a48f741430b4c04cd6352ba9eb2f5 100644 (file)
@@ -1164,7 +1164,7 @@ def CodeAction(lspserver: dict<any>, fname_arg: string, line1: number,
   params->extend({textDocument: {uri: util.LspFileToUri(fname)}, range: r})
   var d: list<dict<any>> = []
   for lnum in range(line1, line2)
-    var diagsInfo: list<dict<any>> = diag.GetDiagsByLine(bnr, lnum)
+    var diagsInfo: list<dict<any>> = diag.GetDiagsByLine(bnr, lnum, lspserver)
     d->extend(diagsInfo)
   endfor
   params->extend({context: {diagnostics: d, triggerKind: 1}})