# Refresh the placed diagnostics in buffer 'bnr'
# This inline signs, inline props, and virtual text diagnostics
-def DiagsRefresh(lspserver: dict<any>, bnr: number)
+def DiagsRefresh(bnr: number)
bnr->bufload()
# Remove all the existing diagnostic signs
sign_unplace('LSPDiag', {buffer: bnr})
# New LSP diagnostic messages received from the server for a file.
# Update the signs placed in the buffer for this file
-export def ProcessNewDiags(lspserver: dict<any>, bnr: number)
+export def ProcessNewDiags(bnr: number)
if opt.lspOptions.autoPopulateDiags
- DiagsUpdateLocList(lspserver, bnr)
+ DiagsUpdateLocList(bnr)
endif
if !opt.lspOptions.autoHighlightDiags
return
endif
- DiagsRefresh(lspserver, bnr)
+ DiagsRefresh(bnr)
enddef
# process a diagnostic notification message from the LSP server
serverDiagnostics: serverDiags
}
- ProcessNewDiags(lspserver, bnr)
+ ProcessNewDiags(bnr)
# Notify user scripts that diags has been updated
if exists('#User#LspDiagsUpdated')
enddef
# get the count of error in the current buffer
-export def DiagsGetErrorCount(lspserver: dict<any>): dict<number>
+export def DiagsGetErrorCount(): dict<number>
var errCount = 0
var warnCount = 0
var infoCount = 0
# Update the location list window for the current window with the diagnostic
# messages.
# Returns true if diagnostics is not empty and false if it is empty.
-def DiagsUpdateLocList(lspserver: dict<any>, bnr: number): bool
+def DiagsUpdateLocList(bnr: number): bool
var fname: string = bnr->bufname()->fnamemodify(':p')
if fname == ''
return false
# Display the diagnostic messages from the LSP server for the current buffer
# in a location list
-export def ShowAllDiags(lspserver: dict<any>): void
- if !DiagsUpdateLocList(lspserver, bufnr())
+export def ShowAllDiags(): void
+ if !DiagsUpdateLocList(bufnr())
util.WarnMsg($'No diagnostic messages found for {@%}')
return
endif
enddef
# Show the diagnostic message for the current line
-export def ShowCurrentDiag(lspserver: dict<any>, atPos: bool)
+export def ShowCurrentDiag(atPos: bool)
var bnr: number = bufnr()
var lnum: number = line('.')
var col: number = charcol('.')
- var diag: dict<any> = lspserver.getDiagByPos(bnr, lnum, col, atPos)
+ var diag: dict<any> = GetDiagByPos(bnr, lnum, col, atPos)
if diag->empty()
util.WarnMsg($'No diagnostic messages found for current {atPos ? "position" : "line"}')
else
enddef
# Show the diagnostic message for the current line without linebreak
-export def ShowCurrentDiagInStatusLine(lspserver: dict<any>)
+export def ShowCurrentDiagInStatusLine()
var bnr: number = bufnr()
var lnum: number = line('.')
var col: number = charcol('.')
- var diag: dict<any> = lspserver.getDiagByPos(bnr, lnum, col)
+ var diag: dict<any> = GetDiagByPos(bnr, lnum, col)
if !diag->empty()
# 15 is a enough length not to cause line break
var max_width = &columns - 15
# Get the diagnostic from the LSP server for a particular line and character
# offset in a file
-export def GetDiagByPos(lspserver: dict<any>, bnr: number,
- lnum: number, col: number,
+export def GetDiagByPos(bnr: number, lnum: number, col: number,
atPos: bool = false): dict<any>
- var diags_in_line = GetDiagsByLine(lspserver, bnr, lnum)
+ var diags_in_line = GetDiagsByLine(bnr, lnum)
for diag in diags_in_line
if atPos
enddef
# Get all diagnostics from the LSP server for a particular line in a file
-export def GetDiagsByLine(lspserver: dict<any>, bnr: number, lnum: number): list<dict<any>>
+export def GetDiagsByLine(bnr: number, lnum: number): list<dict<any>>
if !diagsMap->has_key(bnr)
return []
endif
enddef
# jump to the next/previous/first diagnostic message in the current buffer
-export def LspDiagsJump(lspserver: dict<any>, which: string, a_count: number = 0): void
+export def LspDiagsJump(which: string, a_count: number = 0): void
var fname: string = expand('%:p')
if fname == ''
return
export def DiagsHighlightEnable()
opt.lspOptions.autoHighlightDiags = true
for binfo in getbufinfo({bufloaded: true})
- var lspserver: dict<any> = buf.BufLspServerGet(binfo.bufnr)
- if !lspserver->empty() && lspserver.running
- DiagsRefresh(lspserver, binfo.bufnr)
+ DiagsRefresh(binfo.bufnr)
endif
endfor
enddef
var lspDiagPopupID: number = 0
var lspDiagPopupInfo: dict<any> = {}
def g:LspDiagExpr(): any
- var lspserver: dict<any> = buf.BufLspServerGet(v:beval_bufnr)
- if lspserver->empty() || !lspserver.running
- return ''
- endif
-
# Display the diagnostic message only if the mouse is over the gutter for
# the signs.
if opt.lspOptions.noDiagHoverOnLine && v:beval_col >= 2
return ''
endif
- var diagsInfo: list<dict<any>> = lspserver.getDiagsByLine(
+ var diagsInfo: list<dict<any>> = diag.GetDiagsByLine(
v:beval_bufnr,
v:beval_lnum
)
:unlet b:LspDiagsUpdatePending
var bnr: number = bufnr()
- var lspserver: dict<any> = buf.CurbufGetServer()
- if lspserver->empty() || !lspserver.running
- return
- endif
- diag.ProcessNewDiags(lspserver, bnr)
+ diag.ProcessNewDiags(bnr)
enddef
# Add buffer-local autocmds when attaching a LSP server to a buffer
if lspserver.running
lspserver.textdocDidClose(bnr)
endif
- diag.DiagRemoveFile(lspserver, bnr)
+ diag.DiagRemoveFile(bnr)
buf.BufLspServerRemove(bnr, lspserver)
endfor
enddef
# Display the diagnostic messages from the LSP server for the current buffer
# in a quickfix list
export def ShowDiagnostics(): void
- var lspserver: dict<any> = buf.CurbufGetServerChecked()
- if lspserver->empty()
- return
- endif
-
- diag.ShowAllDiags(lspserver)
+ diag.ShowAllDiags()
enddef
# Show the diagnostic message for the current line
export def LspShowCurrentDiag(atPos: bool)
- var lspserver: dict<any> = buf.CurbufGetServerChecked()
- if lspserver->empty()
- return
- endif
-
- diag.ShowCurrentDiag(lspserver, atPos)
+ diag.ShowCurrentDiag(atPos)
enddef
# Display the diagnostics for the current line in the status line.
return
endif
- var lspserver: dict<any> = buf.CurbufGetServer()
- if lspserver->empty() || !lspserver.running
- return
- endif
-
- diag.ShowCurrentDiagInStatusLine(lspserver)
+ diag.ShowCurrentDiagInStatusLine()
enddef
# get the count of diagnostics in the current buffer
return res
endif
- var lspserver: dict<any> = buf.CurbufGetServer()
- if lspserver->empty() || !lspserver.running
- return res
- endif
-
- return diag.DiagsGetErrorCount(lspserver)
+ return diag.DiagsGetErrorCount()
enddef
# jump to the next/previous/first diagnostic message in the current buffer
export def JumpToDiag(which: string, count: number = 0): void
- var lspserver: dict<any> = buf.CurbufGetServerChecked()
- if lspserver->empty()
- return
- endif
-
- diag.LspDiagsJump(lspserver, which, count)
+ diag.LspDiagsJump(which, count)
enddef
# Display the hover message from the LSP server for the current cursor
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(lspserver, bnr, lnum)
+ var diagsInfo: list<dict<any>> = diag.GetDiagsByLine(bnr, lnum)
d->extend(diagsInfo)
endfor
params->extend({context: {diagnostics: d, triggerKind: 1}})
processNotif: function(handlers.ProcessNotif, [lspserver]),
processRequest: function(handlers.ProcessRequest, [lspserver]),
processMessages: function(handlers.ProcessMessages, [lspserver]),
- getDiagByPos: function(diag.GetDiagByPos, [lspserver]),
- getDiagsByLine: function(diag.GetDiagsByLine, [lspserver]),
textdocDidOpen: function(TextdocDidOpen, [lspserver]),
textdocDidClose: function(TextdocDidClose, [lspserver]),
textdocDidChange: function(TextdocDidChange, [lspserver]),