]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Skip remote files
authorYegappan Lakshmanan <yegappan@yahoo.com>
Thu, 20 Jan 2022 02:43:56 +0000 (18:43 -0800)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Thu, 20 Jan 2022 02:43:56 +0000 (18:43 -0800)
autoload/lsp.vim
autoload/util.vim

index a8308b0e9dfa12ee64e70b57d6c9e04d87f10691..21eb567fe9282c593cb4cf578d74c011ff117256 100644 (file)
@@ -31,6 +31,7 @@ if has('patch-8.2.4019')
   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
@@ -49,7 +50,8 @@ else
         ServerTrace,
         ClearTraceLogs,
         GetLineByteFromPos,
-        PushCursorToTagStack} from './util.vim'
+        PushCursorToTagStack,
+       LspUriRemote} from './util.vim'
   import {DiagRemoveFile,
        UpdateDiags,
        DiagsGetErrorCount,
@@ -69,6 +71,7 @@ else
   util.ClearTraceLogs = ClearTraceLogs
   util.GetLineByteFromPos = GetLineByteFromPos
   util.PushCursorToTagStack = PushCursorToTagStack
+  util.LspUriRemote = LspUriRemote
   diag.DiagRemoveFile = DiagRemoveFile
   diag.UpdateDiags = UpdateDiags
   diag.DiagsGetErrorCount = DiagsGetErrorCount
@@ -162,7 +165,7 @@ enddef
 # 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
 
@@ -182,7 +185,7 @@ enddef
 # 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
 
@@ -202,7 +205,7 @@ enddef
 # 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
 
@@ -222,7 +225,7 @@ enddef
 # 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
 
@@ -243,7 +246,7 @@ enddef
 # 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
 
@@ -257,11 +260,6 @@ def lsp#showSignature(): string
     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()
@@ -270,6 +268,10 @@ enddef
 
 # 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
@@ -327,7 +329,7 @@ def lsp#leftInsertMode()
   :unlet b:LspDiagsUpdatePending
 
   var ftype: string = &filetype
-  if ftype == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -345,6 +347,11 @@ def lsp#addFile(bnr: number): void
     return
   endif
 
+  # Skip remote files
+  if util.LspUriRemote(bnr->bufname()->fnamemodify(":p"))
+    return
+  endif
+
   var ftype: string = bnr->getbufvar('&filetype')
   if ftype == ''
     return
@@ -533,7 +540,7 @@ enddef
 # in a quickfix list
 def lsp#showDiagnostics(): void
   var ftype = &filetype
-  if ftype == '' || @% == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -553,7 +560,7 @@ enddef
 # Show the diagnostic message for the current line
 def lsp#showCurrentDiag()
   var ftype = &filetype
-  if ftype == '' || @% == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -572,7 +579,7 @@ enddef
 
 def lsp#showCurrentDiagInStatusLine()
   var ftype = &filetype
-  if ftype == '' || @% == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -623,6 +630,10 @@ enddef
 # 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('.')
 
@@ -660,6 +671,10 @@ enddef
 
 # 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)
 
@@ -708,7 +723,7 @@ enddef
 # location
 def lsp#hover()
   var ftype = &filetype
-  if ftype == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -717,18 +732,13 @@ def lsp#hover()
     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
 
@@ -742,18 +752,13 @@ def lsp#showReferences(peek: bool)
     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
 
@@ -767,11 +772,6 @@ def lsp#docHighlight()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   lspserver.docHighlight()
 enddef
 
@@ -788,7 +788,8 @@ def lsp#requestDocSymbols()
   endif
 
   var ftype = &filetype
-  if ftype == ''
+  var fname = @%
+  if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -800,11 +801,6 @@ def lsp#requestDocSymbols()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   lspserver.getDocSymbols(fname)
 enddef
 
@@ -822,7 +818,8 @@ def lsp#textDocFormat(range_args: number, line1: number, line2: number)
   endif
 
   var ftype = &filetype
-  if ftype == ''
+  var fname = @%
+  if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -836,11 +833,6 @@ def lsp#textDocFormat(range_args: number, line1: number, line2: number)
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   if range_args > 0
     lspserver.textDocFormat(fname, true, line1, line2)
   else
@@ -855,7 +847,8 @@ enddef
 # Uses LSP "callHierarchy/incomingCalls" request
 def lsp#incomingCalls()
   var ftype = &filetype
-  if ftype == ''
+  var fname = @%
+  if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -869,11 +862,6 @@ def lsp#incomingCalls()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   lspserver.incomingCalls(fname)
 enddef
 
@@ -887,7 +875,7 @@ enddef
 # Uses LSP "textDocument/rename" request
 def lsp#rename()
   var ftype = &filetype
-  if ftype == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -901,11 +889,6 @@ def lsp#rename()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   var newName: string = input("Rename symbol: ", expand('<cword>'))
   if newName == ''
     return
@@ -918,7 +901,8 @@ enddef
 # Uses LSP "textDocument/codeAction" request
 def lsp#codeAction()
   var ftype = &filetype
-  if ftype == ''
+  var fname = @%
+  if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -932,11 +916,6 @@ def lsp#codeAction()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   lspserver.codeAction(fname)
 enddef
 
@@ -944,7 +923,7 @@ enddef
 # Uses LSP "workspace/symbol" request
 def lsp#symbolSearch(queryArg: string)
   var ftype = &filetype
-  if ftype == ''
+  if ftype == '' || @% == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -958,11 +937,6 @@ def lsp#symbolSearch(queryArg: string)
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   var query: string = queryArg
   if query == ''
     query = input("Lookup symbol: ", expand('<cword>'))
@@ -1068,7 +1042,8 @@ enddef
 # 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
 
@@ -1082,11 +1057,6 @@ def lsp#selectionRange()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   # TODO: Also support passing a range
   lspserver.selectionRange(fname)
 enddef
@@ -1094,7 +1064,8 @@ enddef
 # fold the entire document
 def lsp#foldDocument()
   var ftype = &filetype
-  if ftype == ''
+  var fname = @%
+  if ftype == '' || fname == '' || !bufnrToServer->has_key(bufnr())
     return
   endif
 
@@ -1108,11 +1079,6 @@ def lsp#foldDocument()
     return
   endif
 
-  var fname = @%
-  if fname == ''
-    return
-  endif
-
   if &foldmethod != 'manual'
     util.ErrMsg("Error: Only works when 'foldmethod' is 'manual'")
     return
index e815e22cd5e0f05bfab8a2f3c78d0d5af3eb3d9a..fe478ed294fe6ec20ef83e51c978b51fc62ec87f 100644 (file)
@@ -69,6 +69,12 @@ export def LspUriToFile(uri: string): string
   return uri_decoded
 enddef
 
+# Returns if the URI refers to a remote file (e.g. ssh://)
+# Credit: vim-lsp plugin
+export def LspUriRemote(uri: string): bool
+  return uri =~# '^\w\+::' || uri =~# '^[a-z][a-z0-9+.-]*://'
+enddef
+
 # Convert a Vim filename to an LSP URI (file://<absolute_path>)
 def ConvertFilenameToUri(fname: string): string
   var uri: string = fnamemodify(fname, ':p')