From: Andreas Louv Date: Tue, 11 Apr 2023 15:03:22 +0000 (+0200) Subject: Move Scratch Window rendering logic to "lsp#lsp#ShowServer" X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=34713b52aaf1bfd2bb4cfdbd146748919b797111;p=vim-lsp.git Move Scratch Window rendering logic to "lsp#lsp#ShowServer" --- diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 8d9c65c..4aa4234 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -154,6 +154,24 @@ export def ShowAllServers() :setlocal nomodifiable enddef +# Create a new window containing the buffer 'bname' or if the window is +# already present then jump to it. +def OpenScratchWindow(bname: string) + var wid = bufwinid(bname) + if wid != -1 + wid->win_gotoid() + :setlocal modifiable + :silent! :%d _ + else + exe $':new {bname}' + :setlocal buftype=nofile + :setlocal bufhidden=wipe + :setlocal noswapfile + :setlocal nonumber nornu + :setlocal fdc=0 signcolumn=no + endif +enddef + # Show the status of the LSP server for the current buffer export def ShowServer(arg: string) var lspserver: dict = buf.CurbufGetServerChecked() @@ -162,22 +180,38 @@ export def ShowServer(arg: string) return endif + var windowName: string = '' + var lines: list = [] if arg == '' || arg ==? 'status' + windowName = $'LangServer-Status' var msg = $"LSP server '{lspserver.name}' is " if lspserver.running msg ..= 'running' else msg ..= 'not running' endif - :echomsg msg + lines->add(msg) elseif arg ==? 'capabilities' - lspserver.showCapabilities() + windowName = $'LangServer-Capabilities' + lines->extend(lspserver.getCapabilities()) elseif arg ==? 'initializeRequest' - lspserver.showInitializeRequest() + windowName = $'LangServer-InitializeRequest' + lines->extend(lspserver.getInitializeRequest()) elseif arg ==? 'messages' - lspserver.showMessages() + windowName = $'LangServer-Messages' + lines->extend(lspserver.getMessages()) else util.ErrMsg($'Error: Unsupported argument "{arg}"') + return + endif + + if lines->len() > 1 + OpenScratchWindow(windowName) + setline(1, lines) + :setlocal nomodified + :setlocal nomodifiable + else + :echomsg lines[0] endif enddef diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index 576ba90..ba26d09 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -1384,28 +1384,9 @@ def ExecuteCommand(lspserver: dict, cmd: dict) lspserver.rpc_a('workspace/executeCommand', params, WorkspaceExecuteReply) enddef -# Create a new window containing the buffer 'bname' or if the window is -# already present then jump to it. -def OpenScratchWindow(bname: string) - var wid = bufwinid(bname) - if wid != -1 - wid->win_gotoid() - :setlocal modifiable - :silent! :%d _ - else - exe $':new {bname}' - :setlocal buftype=nofile - :setlocal bufhidden=wipe - :setlocal noswapfile - :setlocal nonumber nornu - :setlocal fdc=0 signcolumn=no - endif -enddef - # Display the LSP server capabilities (received during the initialization # stage). -def ShowCapabilities(lspserver: dict) - OpenScratchWindow($'LangServer-{lspserver.name}-Capabilities') +def GetCapabilities(lspserver: dict): list var l = [] var heading = $"'{lspserver.path}' Language Server Capabilities" var underlines = repeat('=', heading->len()) @@ -1413,14 +1394,11 @@ def ShowCapabilities(lspserver: dict) for k in lspserver.caps->keys()->sort() l->add($'{k}: {lspserver.caps[k]->string()}') endfor - setline(1, l) - :setlocal nomodified - :setlocal nomodifiable + return l enddef # Display the LSP server initialize request and result -def ShowInitializeRequest(lspserver: dict) - OpenScratchWindow($'LangServer-{lspserver.name}-Initialize-Request') +def GetInitializeRequest(lspserver: dict): list var l = [] var heading = $"'{lspserver.path}' Language Server Initialize Requst" var underlines = repeat('=', heading->len()) @@ -1430,21 +1408,20 @@ def ShowInitializeRequest(lspserver: dict) l->add($'{k}: {lspserver.rpcInitializeRequest[k]->string()}') endfor endif - setline(1, l) - :setlocal nomodified - :setlocal nomodifiable + return l enddef # Display the log messages received from the LSP server (window/logMessage) -def ShowMessages(lspserver: dict) +def GetMessages(lspserver: dict): list if lspserver.messages->empty() - util.WarnMsg($'No messages received from "{lspserver.name}" server') - return + return [$'No messages received from "{lspserver.name}" server'] endif - OpenScratchWindow($'LangServer-{lspserver.name}-Messages') - setline(1, lspserver.messages) - :setlocal nomodified - :setlocal nomodifiable + + var l = [] + var heading = $"'{lspserver.path}' Language Server Messages" + var underlines = repeat('=', heading->len()) + l->extend(lspserver.messages) + return l enddef # Send a 'textDocument/definition' request to the LSP server to get the @@ -1580,9 +1557,9 @@ export def NewLspServer(name_arg: string, path_arg: string, args: list, foldRange: function(FoldRange, [lspserver]), executeCommand: function(ExecuteCommand, [lspserver]), workspaceConfigGet: function(WorkspaceConfigGet, [lspserver]), - showCapabilities: function(ShowCapabilities, [lspserver]), - showInitializeRequest: function(ShowInitializeRequest, [lspserver]), - showMessages: function(ShowMessages, [lspserver]) + getCapabilities: function(GetCapabilities, [lspserver]), + getInitializeRequest: function(GetInitializeRequest, [lspserver]), + getMessages: function(GetMessages, [lspserver]) }) return lspserver