From 9cff5462634e04fee13edbdb661a02ca0c71d53d Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Wed, 17 Jan 2024 21:26:08 -0800 Subject: [PATCH] Update instructions for using vim-plug to install the plugin --- README.md | 7 ++++--- autoload/lsp/symbol.vim | 32 +++++++++++++++++++++++--------- test/run_tests.sh | 9 +++++++-- test/tsserver_tests.vim | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b2c8df1..ffedb69 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ The following language server protocol (LSP) features are supported: * Folding code * Inlay hints * Visually select symbol block/region +* Semantic Highlight ## Configuration @@ -157,6 +158,9 @@ call LspOptionsSet(#{ If you used [vim-plug](https://github.com/junegunn/vim-plug) to install the LSP plugin, then you need to use the VimEnter autocmd to initialize the LSP server and to set the LSP server options. For example: ```viml +let lspOpts = #{autoHighlightDiags: v:true} +autocmd VimEnter * call LspOptionsSet(lspOpts) + let lspServers = [#{ \ name: 'clang', \ filetype: ['c', 'cpp'], @@ -164,9 +168,6 @@ let lspServers = [#{ \ args: ['--background-index'] \ }] autocmd VimEnter * call LspAddServer(lspServers) - -let lspOpts = #{autoHighlightDiags: v:true} -autocmd VimEnter * call LspOptionsSet(lspOpts) ``` ## Supported Commands diff --git a/autoload/lsp/symbol.vim b/autoload/lsp/symbol.vim index 7d26df8..76bcfa9 100644 --- a/autoload/lsp/symbol.vim +++ b/autoload/lsp/symbol.vim @@ -454,15 +454,30 @@ export def ShowLocations(lspserver: dict, locations: list>, enddef # Key filter callback function used for the symbol popup window. -# Vim doesn't close the popup window when the escape key is pressed. -# This is function supports that. -def SymbolFilterCB(lspserver: dict, id: number, key: string): bool - if key == "\" - lspserver.peekSymbolPopup->popup_close() - return true +def SymbolFilterCB(symPopupWin: number, key: string): bool + var keyHandled = false + + if key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + || key == "\" + # scroll the popup window + win_execute(symPopupWin, $'normal! {key}') + keyHandled = true + endif + + if !keyHandled + # For any other key, close the window + symPopupWin->popup_close() endif - return false + return keyHandled enddef # Display the file specified by LSP "LocationLink" in a popup window and @@ -481,7 +496,6 @@ def PeekSymbolLocation(lspserver: dict, location: dict) # If the symbol popup window is already present, close it. lspserver.peekSymbolPopup->popup_close() endif - var CbFunc = function(SymbolFilterCB, [lspserver]) var popupAttrs = { title: $"{fnamemodify(fname, ':t')} ({fnamemodify(fname, ':h')})", wrap: false, @@ -493,7 +507,7 @@ def PeekSymbolLocation(lspserver: dict, location: dict) cursorline: true, border: [], mapping: false, - filter: CbFunc + filter: SymbolFilterCB } lspserver.peekSymbolPopup = popup_atcursor(bnum, popupAttrs) diff --git a/test/run_tests.sh b/test/run_tests.sh index e995905..9147302 100755 --- a/test/run_tests.sh +++ b/test/run_tests.sh @@ -2,7 +2,11 @@ # Script to run the unit-tests for the LSP Vim plugin -VIMPRG=${VIMPRG:=$(which vim)} +#VIMPRG=${VIMPRG:=$(which vim)} +#VIMPRG=/home/yega/bin/vim90/bin/vim +#VIMRUNTIME=/home/yega/bin/vim90/share/vim/vim90 +export VIMPRG=/home/yega/Documents/vim/vim9/vim/src/vim +export VIMRUNTIME=/home/yega/Documents/vim/vim9/vim/runtime if [ -z "$VIMPRG" ]; then echo "ERROR: vim (\$VIMPRG) is not found in PATH" exit 1 @@ -10,7 +14,8 @@ fi VIM_CMD="$VIMPRG -u NONE -U NONE -i NONE --noplugin -N --not-a-term" -TESTS="clangd_tests.vim tsserver_tests.vim gopls_tests.vim not_lspserver_related_tests.vim markdown_tests.vim" +#TESTS="clangd_tests.vim tsserver_tests.vim gopls_tests.vim not_lspserver_related_tests.vim markdown_tests.vim" +TESTS="clangd_tests.vim" RunTestsInFile() { testfile=$1 diff --git a/test/tsserver_tests.vim b/test/tsserver_tests.vim index 99e2836..e553e98 100644 --- a/test/tsserver_tests.vim +++ b/test/tsserver_tests.vim @@ -5,6 +5,9 @@ source common.vim source term_util.vim source screendump.vim +var lspOpts = {autoComplete: false} +g:LspOptionsSet(lspOpts) + var lspServers = [{ filetype: ['typescript', 'javascript'], path: exepath('typescript-language-server'), @@ -34,6 +37,39 @@ echomsg systemlist($'{lspServers[0].path} --version') # delete('Xcompletion1.js') # enddef +# Test for auto-import using omni completion +def g:Test_autoimport() + :silent! edit autoImportMod1.ts + sleep 200m + var lines =<< trim END + export function getNumber() { + return 1; + } + END + setline(1, lines) + :redraw! + g:WaitForServerFileLoad(0) + + var save_completopt = &completeopt + set completeopt= + + :split autoImportMod2.ts + :sleep 200m + setline(1, 'console.log(getNum') + g:WaitForServerFileLoad(2) + feedkeys("A\\());", 'xt') + var expected =<< trim END + import { getNumber } from "./autoImportMod1"; + + ());console.log(getNumber + END + assert_equal(expected, getline(1, '$')) + + &completeopt = save_completopt + + :%bw! +enddef + # Start the typescript language server. Returns true on success and false on # failure. def g:StartLangServer(): bool -- 2.48.1