util.ClearTraceLogs = util_import.ClearTraceLogs
util.GetLineByteFromPos = util_import.GetLineByteFromPos
util.PushCursorToTagStack = util_import.PushCursorToTagStack
+ util.LspUriRemote = util_import.LspUriRemote
diag.UpdateDiags = diag_import.UpdateDiags
diag.DiagsGetErrorCount = diag_import.DiagsGetErrorCount
diag.ShowAllDiags = diag_import.ShowAllDiags
ServerTrace,
ClearTraceLogs,
GetLineByteFromPos,
- PushCursorToTagStack} from './util.vim'
+ PushCursorToTagStack,
+ LspUriRemote} from './util.vim'
import {DiagRemoveFile,
UpdateDiags,
DiagsGetErrorCount,
util.ClearTraceLogs = ClearTraceLogs
util.GetLineByteFromPos = GetLineByteFromPos
util.PushCursorToTagStack = PushCursorToTagStack
+ util.LspUriRemote = LspUriRemote
diag.DiagRemoveFile = DiagRemoveFile
diag.UpdateDiags = UpdateDiags
diag.DiagsGetErrorCount = DiagsGetErrorCount
# Go to a definition using "textDocument/definition" LSP request
def lsp#gotoDefinition(peek: bool)
var ftype: string = &filetype
- if ftype == '' || @% == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Go to a declaration using "textDocument/declaration" LSP request
def lsp#gotoDeclaration(peek: bool)
var ftype: string = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Go to a type definition using "textDocument/typeDefinition" LSP request
def lsp#gotoTypedef(peek: bool)
var ftype: string = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Go to a implementation using "textDocument/implementation" LSP request
def lsp#gotoImplementation(peek: bool)
var ftype: string = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Invoked from an insert-mode mapping, so return an empty string.
def lsp#showSignature(): string
var ftype: string = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return ''
endif
return ''
endif
- var fname: string = @%
- if fname == ''
- return ''
- endif
-
# first send all the changes in the current buffer to the LSP server
listener_flush()
lspserver.showSignature()
# buffer change notification listener
def lsp#bufchange_listener(bnr: number, start: number, end: number, added: number, changes: list<dict<number>>)
+ if !bufnrToServer->has_key(bnr)
+ return
+ endif
+
var ftype = bnr->getbufvar('&filetype')
var lspserver: dict<any> = s:lspGetServer(ftype)
if lspserver->empty() || !lspserver.running
:unlet b:LspDiagsUpdatePending
var ftype: string = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
+ # Skip remote files
+ if util.LspUriRemote(bnr->bufname()->fnamemodify(":p"))
+ return
+ endif
+
var ftype: string = bnr->getbufvar('&filetype')
if ftype == ''
return
# in a quickfix list
def lsp#showDiagnostics(): void
var ftype = &filetype
- if ftype == '' || @% == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Show the diagnostic message for the current line
def lsp#showCurrentDiag()
var ftype = &filetype
- if ftype == '' || @% == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
def lsp#showCurrentDiagInStatusLine()
var ftype = &filetype
- if ftype == '' || @% == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
# Insert mode completion handler. Used when 24x7 completion is enabled
# (default).
def lsp#complete()
+ if !bufnrToServer->has_key(bufnr())
+ return
+ endif
+
var cur_col: number = col('.')
var line: string = getline('.')
# omni complete handler
def lsp#omniFunc(findstart: number, base: string): any
+ if !bufnrToServer->has_key(bufnr())
+ return
+ endif
+
var ftype: string = &filetype
var lspserver: dict<any> = s:lspGetServer(ftype)
# location
def lsp#hover()
var ftype = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.hover()
enddef
# show symbol references
def lsp#showReferences(peek: bool)
var ftype = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.showReferences(peek)
enddef
# highlight all the places where a symbol is referenced
def lsp#docHighlight()
var ftype = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.docHighlight()
enddef
endif
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.getDocSymbols(fname)
enddef
endif
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
if range_args > 0
lspserver.textDocFormat(fname, true, line1, line2)
else
# Uses LSP "callHierarchy/incomingCalls" request
def lsp#incomingCalls()
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.incomingCalls(fname)
enddef
# Uses LSP "textDocument/rename" request
def lsp#rename()
var ftype = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
var newName: string = input("Rename symbol: ", expand('<cword>'))
if newName == ''
return
# Uses LSP "textDocument/codeAction" request
def lsp#codeAction()
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
lspserver.codeAction(fname)
enddef
# Uses LSP "workspace/symbol" request
def lsp#symbolSearch(queryArg: string)
var ftype = &filetype
- if ftype == ''
+ if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
var query: string = queryArg
if query == ''
query = input("Lookup symbol: ", expand('<cword>'))
# visually select a range of positions around the current cursor.
def lsp#selectionRange()
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
# TODO: Also support passing a range
lspserver.selectionRange(fname)
enddef
# fold the entire document
def lsp#foldDocument()
var ftype = &filetype
- if ftype == ''
+ var fname = @%
+ if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
return
endif
return
endif
- var fname = @%
- if fname == ''
- return
- endif
-
if &foldmethod != 'manual'
util.ErrMsg("Error: Only works when 'foldmethod' is 'manual'")
return