Girish Palya [Tue, 6 Feb 2024 12:12:28 +0000 (13:12 +0100)]
BUG: omnifuc throws E716
In LspOmniFunc() when cItems is empty (when findstart=1) it does not
set the key 'completeItemsIsIncomplete' in the lspserver dictionary.
When LspOmniFunc is called again with findstart=0, it fails.
line 46:
E716: Key not present in Dictionary: "completeItemsIsIncomplete"
This affects rust, nix, and other lsp servers:
https://github.com/girishji/vimcomplete/issues/14
Girish Palya [Thu, 1 Feb 2024 18:36:19 +0000 (19:36 +0100)]
Correctly handle keys inside symbol popup window
Symbol popup window handles following keys:
- <tab> and <s-tab> to advance selection
- selection wraps around at end
- <pageup> and <pagedn> scroll popup instead of main window
Girish Palya [Tue, 30 Jan 2024 19:57:51 +0000 (20:57 +0100)]
Improve signature popup window
Add 1 character padding to the sides of signature popup window.
Otherise, the leftmost character of popup looks like continuation of
line from underneath text in some colorschemes. A subtle improvemnt.
Song-Tianxiang [Tue, 16 Jan 2024 05:59:47 +0000 (13:59 +0800)]
fix hover popup-filter, remove redundant code
The original few lines of code are redundant.
Just return false and let vim handle the other keys.
The redundant code disabled mouse scrolling, and the popup will be closed automatically after some seconds (I don't know why it is closed automatically)
Girish Palya [Wed, 20 Dec 2023 13:08:01 +0000 (14:08 +0100)]
Remove E1013 error when lsp sends kind=null
This is what pyslp sent:
{'label': '''H''', 'data': {'doc_uri': 'file:///...py'},
'sortText': 'a''H''', 'kind': null, 'insertText': '''H'''}
'kind' property need to be checked for null before
attempting completion.
Girish Palya [Wed, 29 Nov 2023 12:17:55 +0000 (13:17 +0100)]
Propagate triggerCharacters to omni-completion
Fixed 2 bugs:
- add triggerCharacters to lsp list for omniComplete option
- process triggerCharacters based keywords in omnifunc()
M autoload/lsp/completion.vim
M autoload/lsp/lspserver.vim
Enno [Mon, 20 Nov 2023 08:24:31 +0000 (09:24 +0100)]
update default options
the documentation no longer reflected autoload/lsp/options.vim (lines 9-162):
export var lspOptions: dict<any> = {
# Enable ale diagnostics support.
# If true, diagnostics will be sent to ale, which will be responsible for
# showing them.
aleSupport: false,
# In insert mode, complete the current symbol automatically
# Otherwise, use omni-completion
autoComplete: true,
# In normal mode, highlight the current symbol automatically
autoHighlight: false,
# Automatically highlight diagnostics messages from LSP server
autoHighlightDiags: true,
# Automatically populate the location list with new diagnostics
autoPopulateDiags: false,
# icase | fuzzy | case match for language servers that replies with a full
# list of completion items
completionMatcher: 'case',
# Due to a bug in the earlier versions of Vim, cannot use the
# COMPLETIONMATCHER_CASE constant here for initialization.
completionMatcherValue: 1,
# Show the symbol documentation in the preview window instead of in a popup
hoverInPreview: false,
# Don't print message when a configured language server is missing.
ignoreMissingServer: false,
# Focus on the location list window after ":LspDiag show"
keepFocusInDiags: true,
# Focus on the location list window after LspShowReferences
keepFocusInReferences: true,
# If true, apply the LSP server supplied text edits after a completion.
# If a snippet plugin is going to apply the text edits, then set this to
# false to avoid applying the text edits twice.
completionTextEdit: true,
# Alignment of virtual diagnostic text, when showDiagWithVirtualText is true
# Allowed values: 'above' | 'below' | 'after' (default is 'above')
diagVirtualTextAlign: 'above',
# Suppress adding a new line on completion selection with <CR>
noNewlineInCompletion: false,
# Omni-completion support. To keep backward compatibility, this option is
# set to null by default instead of false.
omniComplete: null,
# Open outline window on right side
outlineOnRight: false,
# Outline window size
outlineWinSize: 20,
# Show diagnostic text in a balloon when the mouse is over the diagnostic
showDiagInBalloon: true,
# Make diagnostics show in a popup instead of echoing
showDiagInPopup: true,
# Suppress diagnostic hover from appearing when the mouse is over the line
# Show a diagnostic message on a status line
showDiagOnStatusLine: false,
# Show a diagnostic messages using signs
showDiagWithSign: true,
# Show a diagnostic messages with virtual text
showDiagWithVirtualText: false,
# enable inlay hints
showInlayHints: false,
# In insert mode, show the current symbol signature automatically
showSignature: true,
# enable snippet completion support
snippetSupport: false,
# enable SirVer/ultisnips completion support
ultisnipsSupport: false,
# add to autocomplition list current buffer words
useBufferCompletion: false,
# Use a floating menu to show the code action menu instead of asking for
# input
usePopupInCodeAction: false,
# ShowReferences in a quickfix list instead of a location list`
useQuickfixForLocations: false,
# enable hrsh7th/vim-vsnip completion support
vsnipSupport: false,
# Limit the time autocompletion searches for words in current buffer (in
# milliseconds)
bufferCompletionTimeout: 100,
# Enable support for custom completion kinds
customCompletionKinds: false,
# A dictionary with all completion kinds that you want to customize
completionKinds: {}
}
# set the LSP plugin options from the user provided option values
export def OptionsSet(opts: dict<any>)
lspOptions->extend(opts)
if !has('patch-9.0.0178')
lspOptions.showInlayHints = false
endif
if !has('patch-9.0.1157')
lspOptions.showDiagWithVirtualText = false
endif
# For faster comparison, convert the 'completionMatcher' option value from a
# string to a number.
if lspOptions.completionMatcher == 'icase'
lspOptions.completionMatcherValue = COMPLETIONMATCHER_ICASE
elseif lspOptions.completionMatcher == 'fuzzy'
lspOptions.completionMatcherValue = COMPLETIONMATCHER_FUZZY
else
lspOptions.completionMatcherValue = COMPLETIONMATCHER_CASE
endif
# Apply the changed options
if exists('#LspCmds#User#LspOptionsChanged')
:doautocmd <nomodeline> LspCmds User LspOptionsChanged
endif
enddef
Magnus Groß [Thu, 12 Oct 2023 23:08:06 +0000 (01:08 +0200)]
Avoid moving the cursor when applying textedits
In 33c9dc37bd354391579f669a142699801b13d571 we removed a workaround that
resets the cursor to the previous location after applying an
workspaceEdit, because it interfered with auto-imports.
Turns out the workaround was there for a reason: When we apply general
textedits (e.g. when we rename a variable), then we are always moving
the cursor by accident, because internally (to apply a textedit) we
delete the entire text range and then append the new range.
Obviously this loses the cursor position, hence the reason for the
original manual cursor reset workaround.
Instead of reintroducing that workaround, we now avoid moving the cursor
altogether: We accomplish this by no longer deleting the entire range
and inserting it again. Instead we just remove lines that actually need
to be deleted, add lines that actually need to be added and then handle
the rest with a normal setbufline() call.
This will cause the cursor to never lose the correct position, because
we never remove the entire region where the cursor is located in.
We have to be careful with off-by-one errors, therefore this also adds
an extra test for the scenario where we have to delete some lines. The
two other scenarios already had comprehensive tests (adding lines, and
keeping the amount of lines).