* Folding code
* Inlay hints
* Visually select symbol block/region
-* Semantic Highlight
## Configuration
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'],
\ args: ['--background-index']
\ }]
autocmd VimEnter * call LspAddServer(lspServers)
+
+let lspOpts = #{autoHighlightDiags: v:true}
+autocmd VimEnter * call LspOptionsSet(lspOpts)
```
## Supported Commands
enddef
# Key filter callback function used for the symbol popup window.
-def SymbolFilterCB(symPopupWin: number, key: string): bool
- var keyHandled = false
-
- if key == "\<C-E>"
- || key == "\<C-D>"
- || key == "\<C-F>"
- || key == "\<PageDown>"
- || key == "\<C-Y>"
- || key == "\<C-U>"
- || key == "\<C-B>"
- || key == "\<PageUp>"
- || key == "\<C-Home>"
- || key == "\<C-End>"
- # scroll the popup window
- win_execute(symPopupWin, $'normal! {key}')
- keyHandled = true
- endif
-
- if !keyHandled
- # For any other key, close the window
- symPopupWin->popup_close()
+# Vim doesn't close the popup window when the escape key is pressed.
+# This is function supports that.
+def SymbolFilterCB(lspserver: dict<any>, id: number, key: string): bool
+ if key == "\<Esc>"
+ lspserver.peekSymbolPopup->popup_close()
+ return true
endif
- return keyHandled
+ return false
enddef
# Display the file specified by LSP "LocationLink" in a popup window and
# 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,
cursorline: true,
border: [],
mapping: false,
- filter: SymbolFilterCB
+ filter: CbFunc
}
lspserver.peekSymbolPopup = popup_atcursor(bnum, popupAttrs)
# Script to run the unit-tests for the LSP Vim plugin
-#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
+VIMPRG=${VIMPRG:=$(which vim)}
if [ -z "$VIMPRG" ]; then
echo "ERROR: vim (\$VIMPRG) is not found in PATH"
exit 1
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"
+TESTS="clangd_tests.vim tsserver_tests.vim gopls_tests.vim not_lspserver_related_tests.vim markdown_tests.vim"
RunTestsInFile() {
testfile=$1
source term_util.vim
source screendump.vim
-var lspOpts = {autoComplete: false}
-g:LspOptionsSet(lspOpts)
-
var lspServers = [{
filetype: ['typescript', 'javascript'],
path: exepath('typescript-language-server'),
# 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\<C-X>\<C-O>());", '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