]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Add tests for :LspServer command error cases.
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sun, 16 Apr 2023 23:43:50 +0000 (16:43 -0700)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Sun, 16 Apr 2023 23:43:50 +0000 (16:43 -0700)
autoload/lsp/lsp.vim
test/clangd_tests.vim

index 66dc1c922e23e1d536e744add15f86f75eb05da8..66472400216f160b66d55cccc3421712d11c1b25 100644 (file)
@@ -87,11 +87,16 @@ enddef
 # Enable/disable the logging of the language server protocol messages
 def ServerDebug(arg: string)
   if ['errors', 'messages', 'off', 'on']->index(arg) == -1
-    util.ErrMsg($'Unsupported argument "{arg}" for LspServer debug')
+    util.ErrMsg($'Unsupported argument "{arg}"')
     return
   endif
 
   var lspservers: list<dict<any>> = buf.CurbufGetServers()
+  if lspservers->empty()
+    util.WarnMsg($'No Lsp servers found for "{@%}"')
+    return
+  endif
+
   for lspserver in lspservers
     if arg ==# 'on'
       util.ClearTraceLogs(lspserver.logfile)
@@ -176,10 +181,14 @@ enddef
 
 # Show the status of the LSP server for the current buffer
 def ShowServer(arg: string)
-  var lspservers: list<dict<any>> = buf.CurbufGetServers()
+  if ['status', 'capabilities', 'initializeRequest', 'messages']->index(arg) == -1
+    util.ErrMsg($'Unsupported argument "{arg}"')
+    return
+  endif
 
+  var lspservers: list<dict<any>> = buf.CurbufGetServers()
   if lspservers->empty()
-    util.InfoMsg($'No Lsp servers found for this buf')
+    util.WarnMsg($'No Lsp servers found for "{@%}"')
     return
   endif
 
@@ -531,6 +540,12 @@ enddef
 
 # Restart the LSP server for the current buffer
 def RestartServer()
+  var lspservers: list<dict<any>> = buf.CurbufGetServers()
+  if lspservers->empty()
+    util.WarnMsg($'No Lsp servers found for "{@%}"')
+    return
+  endif
+
   # Remove all the buffers with the same file type as the current buffer
   var ftype: string = &filetype
   for binfo in getbufinfo()
@@ -539,7 +554,6 @@ def RestartServer()
     endif
   endfor
 
-  var lspservers: list<dict<any>> = buf.CurbufGetServers()
   for lspserver in lspservers
     # Stop the server (if running)
     if lspserver.running
@@ -689,11 +703,16 @@ enddef
 # Params: SetTraceParams
 def ServerTraceSet(traceVal: string)
   if ['off', 'messages', 'verbose']->index(traceVal) == -1
-    util.ErrMsg($'Unsupported LSP server trace value {traceVal}')
+    util.ErrMsg($'Unsupported argument "{traceVal}"')
     return
   endif
 
   var lspservers: list<dict<any>> = buf.CurbufGetServers()
+  if lspservers->empty()
+    util.WarnMsg($'No Lsp servers found for "{@%}"')
+    return
+  endif
+
   for lspserver in lspservers
     lspserver.setTrace(traceVal)
   endfor
@@ -1119,17 +1138,29 @@ enddef
 
 # ":LspServer" command handler
 export def LspServerCmd(args: string)
-  if args->stridx('debug ') == 0
-    var subcmd = args[6 : ]->trim()
-    ServerDebug(subcmd)
+  if args->stridx('debug') == 0
+    if args[5] ==# ' '
+      var subcmd = args[6 : ]->trim()
+      ServerDebug(subcmd)
+    else
+      util.ErrMsg('Argument required')
+    endif
   elseif args ==# 'restart'
     RestartServer()
-  elseif args->stridx('show ') == 0
-    var subcmd = args[5 : ]->trim()
-    ShowServer(subcmd)
-  elseif args->stridx('trace ') == 0
-    var subcmd = args[6 : ]->trim()
-    ServerTraceSet(subcmd)
+  elseif args->stridx('show') == 0
+    if args[4] ==# ' '
+      var subcmd = args[5 : ]->trim()
+      ShowServer(subcmd)
+    else
+      util.ErrMsg('Argument required')
+    endif
+  elseif args->stridx('trace') == 0
+    if args[5] ==# ' '
+      var subcmd = args[6 : ]->trim()
+      ServerTraceSet(subcmd)
+    else
+      util.ErrMsg('Argument required')
+    endif
   else
     util.ErrMsg($'LspServer - Unsupported argument "{args}"')
   endif
index 7f4a975264c60e9823d5a3dce81b3e80000dc14e..fe7c9474dbb4dcf57efb4342abf850c840b9906a 100644 (file)
@@ -1392,6 +1392,40 @@ def g:Test_OmniComplete_Struct()
   :bw!
 enddef
 
+# Test for the :LspServer command.
+def g:Test_LspServer()
+  new a.raku
+  assert_equal(['Warn: No Lsp servers found for "a.raku"'],
+              execute('LspServer debug on')->split("\n"))
+  assert_equal(['Warn: No Lsp servers found for "a.raku"'],
+              execute('LspServer restart')->split("\n"))
+  assert_equal(['Warn: No Lsp servers found for "a.raku"'],
+              execute('LspServer show status')->split("\n"))
+  assert_equal(['Warn: No Lsp servers found for "a.raku"'],
+              execute('LspServer trace verbose')->split("\n"))
+  assert_equal(['Error: LspServer - Unsupported argument "xyz"'],
+              execute('LspServer xyz')->split("\n"))
+  assert_equal(['Error: Argument required'],
+              execute('LspServer debug')->split("\n"))
+  assert_equal(['Error: Unsupported argument "xyz"'],
+              execute('LspServer debug xyz')->split("\n"))
+  assert_equal(['Error: Unsupported argument "on xyz"'],
+              execute('LspServer debug on xyz')->split("\n"))
+  assert_equal(['Error: Argument required'],
+              execute('LspServer show')->split("\n"))
+  assert_equal(['Error: Unsupported argument "xyz"'],
+              execute('LspServer show xyz')->split("\n"))
+  assert_equal(['Error: Unsupported argument "status xyz"'],
+              execute('LspServer show status xyz')->split("\n"))
+  assert_equal(['Error: Argument required'],
+              execute('LspServer trace')->split("\n"))
+  assert_equal(['Error: Unsupported argument "xyz"'],
+              execute('LspServer trace xyz')->split("\n"))
+  assert_equal(['Error: Unsupported argument "verbose xyz"'],
+              execute('LspServer trace verbose xyz')->split("\n"))
+  :bw!
+enddef
+
 # TODO:
 # 1. Add a test for autocompletion with a single match while ignoring case.
 #    After the full matched name is typed, the completion popup should still