--- /dev/null
+vim9script
+
+# Functions for managing the LSP server and client capabilities
+
+import './options.vim' as opt
+
+# Process the server capabilities
+export def ProcessServerCaps(lspserver: dict<any>, caps: dict<any>)
+ # completionProvider
+ if lspserver.caps->has_key('completionProvider')
+ lspserver.isCompletionProvider = true
+ if lspserver.caps.completionProvider->has_key('resolveProvider')
+ lspserver.isCompletionResolveProvider =
+ lspserver.caps.completionProvider.resolveProvider
+ else
+ lspserver.isCompletionResolveProvider = false
+ endif
+ else
+ lspserver.isCompletionProvider = false
+ lspserver.isCompletionResolveProvider = false
+ endif
+
+ # definitionProvider
+ if lspserver.caps->has_key('definitionProvider')
+ if lspserver.caps.definitionProvider->type() == v:t_bool
+ lspserver.isDefinitionProvider = lspserver.caps.definitionProvider
+ else
+ lspserver.isDefinitionProvider = true
+ endif
+ else
+ lspserver.isDefinitionProvider = false
+ endif
+
+ # declarationProvider
+ if lspserver.caps->has_key('declarationProvider')
+ if lspserver.caps.declarationProvider->type() == v:t_bool
+ lspserver.isDeclarationProvider = lspserver.caps.declarationProvider
+ else
+ lspserver.isDeclarationProvider = true
+ endif
+ else
+ lspserver.isDeclarationProvider = false
+ endif
+
+ # typeDefinitionProvider
+ if lspserver.caps->has_key('typeDefinitionProvider')
+ if lspserver.caps.typeDefinitionProvider->type() == v:t_bool
+ lspserver.isTypeDefinitionProvider = lspserver.caps.typeDefinitionProvider
+ else
+ lspserver.isTypeDefinitionProvider = true
+ endif
+ else
+ lspserver.isTypeDefinitionProvider = false
+ endif
+
+ # implementationProvider
+ if lspserver.caps->has_key('implementationProvider')
+ if lspserver.caps.implementationProvider->type() == v:t_bool
+ lspserver.isImplementationProvider = lspserver.caps.implementationProvider
+ else
+ lspserver.isImplementationProvider = true
+ endif
+ else
+ lspserver.isImplementationProvider = false
+ endif
+
+ # signatureHelpProvider
+ if lspserver.caps->has_key('signatureHelpProvider')
+ lspserver.isSignatureHelpProvider = true
+ else
+ lspserver.isSignatureHelpProvider = false
+ endif
+
+ # hoverProvider
+ if lspserver.caps->has_key('hoverProvider')
+ if lspserver.caps.hoverProvider->type() == v:t_bool
+ lspserver.isHoverProvider = lspserver.caps.hoverProvider
+ else
+ lspserver.isHoverProvider = true
+ endif
+ else
+ lspserver.isHoverProvider = false
+ endif
+
+ # referencesProvider
+ if lspserver.caps->has_key('referencesProvider')
+ if lspserver.caps.referencesProvider->type() == v:t_bool
+ lspserver.isReferencesProvider = lspserver.caps.referencesProvider
+ else
+ lspserver.isReferencesProvider = true
+ endif
+ else
+ lspserver.isReferencesProvider = false
+ endif
+
+ # documentHighlightProvider
+ if lspserver.caps->has_key('documentHighlightProvider')
+ if lspserver.caps.documentHighlightProvider->type() == v:t_bool
+ lspserver.isDocumentHighlightProvider =
+ lspserver.caps.documentHighlightProvider
+ else
+ lspserver.isDocumentHighlightProvider = true
+ endif
+ else
+ lspserver.isDocumentHighlightProvider = false
+ endif
+
+ # documentSymbolProvider
+ if lspserver.caps->has_key('documentSymbolProvider')
+ if lspserver.caps.documentSymbolProvider->type() == v:t_bool
+ lspserver.isDocumentSymbolProvider =
+ lspserver.caps.documentSymbolProvider
+ else
+ lspserver.isDocumentSymbolProvider = true
+ endif
+ else
+ lspserver.isDocumentSymbolProvider = false
+ endif
+
+ # documentFormattingProvider
+ if lspserver.caps->has_key('documentFormattingProvider')
+ if lspserver.caps.documentFormattingProvider->type() == v:t_bool
+ lspserver.isDocumentFormattingProvider =
+ lspserver.caps.documentFormattingProvider
+ else
+ lspserver.isDocumentFormattingProvider = true
+ endif
+ else
+ lspserver.isDocumentFormattingProvider = false
+ endif
+
+ # callHierarchyProvider
+ if lspserver.caps->has_key('callHierarchyProvider')
+ if lspserver.caps.callHierarchyProvider->type() == v:t_bool
+ lspserver.isCallHierarchyProvider =
+ lspserver.caps.callHierarchyProvider
+ else
+ lspserver.isCallHierarchyProvider = true
+ endif
+ else
+ lspserver.isCallHierarchyProvider = false
+ endif
+
+ # typeHierarchyProvider
+ if lspserver.caps->has_key('typeHierarchyProvider')
+ lspserver.isTypeHierarchyProvider = true
+ else
+ lspserver.isTypeHierarchyProvider = false
+ endif
+
+ # renameProvider
+ if lspserver.caps->has_key('renameProvider')
+ if lspserver.caps.renameProvider->type() == v:t_bool
+ lspserver.isRenameProvider = lspserver.caps.renameProvider
+ else
+ lspserver.isRenameProvider = true
+ endif
+ else
+ lspserver.isRenameProvider = false
+ endif
+
+ # codeActionProvider
+ if lspserver.caps->has_key('codeActionProvider')
+ if lspserver.caps.codeActionProvider->type() == v:t_bool
+ lspserver.isCodeActionProvider = lspserver.caps.codeActionProvider
+ else
+ lspserver.isCodeActionProvider = true
+ endif
+ else
+ lspserver.isCodeActionProvider = false
+ endif
+
+ # workspaceSymbolProvider
+ if lspserver.caps->has_key('workspaceSymbolProvider')
+ if lspserver.caps.workspaceSymbolProvider->type() == v:t_bool
+ lspserver.isWorkspaceSymbolProvider =
+ lspserver.caps.workspaceSymbolProvider
+ else
+ lspserver.isWorkspaceSymbolProvider = true
+ endif
+ else
+ lspserver.isWorkspaceSymbolProvider = false
+ endif
+
+ # selectionRangeProvider
+ if lspserver.caps->has_key('selectionRangeProvider')
+ if lspserver.caps.selectionRangeProvider->type() == v:t_bool
+ lspserver.isSelectionRangeProvider =
+ lspserver.caps.selectionRangeProvider
+ else
+ lspserver.isSelectionRangeProvider = true
+ endif
+ else
+ lspserver.isSelectionRangeProvider = false
+ endif
+
+ # foldingRangeProvider
+ if lspserver.caps->has_key('foldingRangeProvider')
+ if lspserver.caps.foldingRangeProvider->type() == v:t_bool
+ lspserver.isFoldingRangeProvider = lspserver.caps.foldingRangeProvider
+ else
+ lspserver.isFoldingRangeProvider = true
+ endif
+ else
+ lspserver.isFoldingRangeProvider = false
+ endif
+
+ # inlayHintProvider
+ if lspserver.caps->has_key('inlayHintProvider')
+ if lspserver.caps.inlayHintProvider->type() == v:t_bool
+ lspserver.isInlayHintProvider = lspserver.caps.inlayHintProvider
+ else
+ lspserver.isInlayHintProvider = true
+ endif
+ else
+ lspserver.isInlayHintProvider = false
+ endif
+
+ # clangdInlayHintsProvider
+ if lspserver.caps->has_key('clangdInlayHintsProvider')
+ lspserver.isClangdInlayHintsProvider =
+ lspserver.caps.clangdInlayHintsProvider
+ else
+ lspserver.isClangdInlayHintsProvider = false
+ endif
+
+ # textDocument/didSave notification
+ if lspserver.caps->has_key('textDocumentSync')
+ if lspserver.caps.textDocumentSync->type() == v:t_bool
+ || lspserver.caps.textDocumentSync->type() == v:t_number
+ lspserver.supportsDidSave = lspserver.caps.textDocumentSync
+ else
+ if lspserver.caps.textDocumentSync->type() == v:t_dict
+ if lspserver.caps.textDocumentSync->has_key('save')
+ if lspserver.caps.textDocumentSync.save->type() == v:t_bool
+ || lspserver.caps.textDocumentSync.save->type() == v:t_number
+ lspserver.supportsDidSave = lspserver.caps.textDocumentSync.save
+ elseif lspserver.caps.textDocumentSync.save->type() == v:t_dict
+ lspserver.supportsDidSave = true
+ else
+ lspserver.supportsDidSave = false
+ endif
+ else
+ lspserver.supportsDidSave = false
+ endif
+ else
+ lspserver.supportsDidSave = false
+ endif
+ endif
+ else
+ lspserver.supportsDidSave = false
+ endif
+enddef
+
+# Return all the LSP client capabilities
+export def GetClientCaps(): dict<any>
+ # client capabilities (ClientCapabilities)
+ var clientCaps: dict<any> = {
+ workspace: {
+ workspaceFolders: true,
+ applyEdit: true,
+ configuration: false
+ },
+ textDocument: {
+ callHierarchy: {
+ dynamicRegistration: false
+ },
+ codeAction: {
+ dynamicRegistration: false,
+ codeActionLiteralSupport: {
+ codeActionKind: {
+ valueSet: ['', 'quickfix', 'refactor', 'refactor.extract',
+ 'refactor.inline', 'refactor.rewrite', 'source',
+ 'source.organizeImports']
+ }
+ },
+ isPreferredSupport: true,
+ disabledSupport: true
+ },
+ codeLens: {
+ dynamicRegistration: false
+ },
+ completion: {
+ dynamicRegistration: false,
+ completionItem: {
+ documentationFormat: ['plaintext', 'markdown'],
+ resolveSupport: {properties: ['detail', 'documentation']},
+ snippetSupport: opt.lspOptions.snippetSupport
+ },
+ completionItemKind: {valueSet: range(1, 25)}
+ },
+ documentSymbol: {
+ dynamicRegistration: false,
+ hierarchicalDocumentSymbolSupport: true,
+ symbolKind: {valueSet: range(1, 25)}
+ },
+ hover: {
+ contentFormat: ['plaintext', 'markdown']
+ },
+ foldingRange: {lineFoldingOnly: true},
+ inlayHint: {dynamicRegistration: false},
+ synchronization: {
+ didSave: true
+ },
+ declaration: {linkSupport: true},
+ definition: {linkSupport: true},
+ typeDefinition: {linkSupport: true},
+ implementation: {linkSupport: true},
+ signatureHelp: {
+ signatureInformation: {
+ documentationFormat: ['plaintext', 'markdown'],
+ activeParameterSupport: true
+ }
+ }
+ },
+ window: {},
+ general: {
+ # Currently we always send character count as position offset,
+ # which meanas only utf-32 is supported.
+ # Adding utf-16 simply for good mesure, as I'm scared some servers will
+ # give up if they don't support utf-32 only.
+ positionEncodings: ['utf-32', 'utf-16']
+ },
+ # This is the way clangd expects to be informated about supported encodings:
+ # https://clangd.llvm.org/extensions#utf-8-offsets
+ offsetEncoding: ['utf-32', 'utf-16']
+ }
+
+ return clientCaps
+enddef
+
+# vim: tabstop=8 shiftwidth=2 softtabstop=2
import './options.vim' as opt
import './handlers.vim'
import './util.vim'
+import './capabilities.vim'
import './diag.vim'
import './selection.vim'
import './symbol.vim'
return 0
enddef
-# Process the server capabilities
-def ProcessServerCaps(lspserver: dict<any>, caps: dict<any>)
- # completionProvider
- if lspserver.caps->has_key('completionProvider')
- lspserver.isCompletionProvider = true
- if lspserver.caps.completionProvider->has_key('resolveProvider')
- lspserver.isCompletionResolveProvider =
- lspserver.caps.completionProvider.resolveProvider
- else
- lspserver.isCompletionResolveProvider = false
- endif
- else
- lspserver.isCompletionProvider = false
- lspserver.isCompletionResolveProvider = false
- endif
-
- # definitionProvider
- if lspserver.caps->has_key('definitionProvider')
- if lspserver.caps.definitionProvider->type() == v:t_bool
- lspserver.isDefinitionProvider = lspserver.caps.definitionProvider
- else
- lspserver.isDefinitionProvider = true
- endif
- else
- lspserver.isDefinitionProvider = false
- endif
-
- # declarationProvider
- if lspserver.caps->has_key('declarationProvider')
- if lspserver.caps.declarationProvider->type() == v:t_bool
- lspserver.isDeclarationProvider = lspserver.caps.declarationProvider
- else
- lspserver.isDeclarationProvider = true
- endif
- else
- lspserver.isDeclarationProvider = false
- endif
-
- # typeDefinitionProvider
- if lspserver.caps->has_key('typeDefinitionProvider')
- if lspserver.caps.typeDefinitionProvider->type() == v:t_bool
- lspserver.isTypeDefinitionProvider = lspserver.caps.typeDefinitionProvider
- else
- lspserver.isTypeDefinitionProvider = true
- endif
- else
- lspserver.isTypeDefinitionProvider = false
- endif
-
- # implementationProvider
- if lspserver.caps->has_key('implementationProvider')
- if lspserver.caps.implementationProvider->type() == v:t_bool
- lspserver.isImplementationProvider = lspserver.caps.implementationProvider
- else
- lspserver.isImplementationProvider = true
- endif
- else
- lspserver.isImplementationProvider = false
- endif
-
- # signatureHelpProvider
- if lspserver.caps->has_key('signatureHelpProvider')
- lspserver.isSignatureHelpProvider = true
- else
- lspserver.isSignatureHelpProvider = false
- endif
-
- # hoverProvider
- if lspserver.caps->has_key('hoverProvider')
- if lspserver.caps.hoverProvider->type() == v:t_bool
- lspserver.isHoverProvider = lspserver.caps.hoverProvider
- else
- lspserver.isHoverProvider = true
- endif
- else
- lspserver.isHoverProvider = false
- endif
-
- # referencesProvider
- if lspserver.caps->has_key('referencesProvider')
- if lspserver.caps.referencesProvider->type() == v:t_bool
- lspserver.isReferencesProvider = lspserver.caps.referencesProvider
- else
- lspserver.isReferencesProvider = true
- endif
- else
- lspserver.isReferencesProvider = false
- endif
-
- # documentHighlightProvider
- if lspserver.caps->has_key('documentHighlightProvider')
- if lspserver.caps.documentHighlightProvider->type() == v:t_bool
- lspserver.isDocumentHighlightProvider =
- lspserver.caps.documentHighlightProvider
- else
- lspserver.isDocumentHighlightProvider = true
- endif
- else
- lspserver.isDocumentHighlightProvider = false
- endif
-
- # documentSymbolProvider
- if lspserver.caps->has_key('documentSymbolProvider')
- if lspserver.caps.documentSymbolProvider->type() == v:t_bool
- lspserver.isDocumentSymbolProvider =
- lspserver.caps.documentSymbolProvider
- else
- lspserver.isDocumentSymbolProvider = true
- endif
- else
- lspserver.isDocumentSymbolProvider = false
- endif
-
- # documentFormattingProvider
- if lspserver.caps->has_key('documentFormattingProvider')
- if lspserver.caps.documentFormattingProvider->type() == v:t_bool
- lspserver.isDocumentFormattingProvider =
- lspserver.caps.documentFormattingProvider
- else
- lspserver.isDocumentFormattingProvider = true
- endif
- else
- lspserver.isDocumentFormattingProvider = false
- endif
-
- # callHierarchyProvider
- if lspserver.caps->has_key('callHierarchyProvider')
- if lspserver.caps.callHierarchyProvider->type() == v:t_bool
- lspserver.isCallHierarchyProvider =
- lspserver.caps.callHierarchyProvider
- else
- lspserver.isCallHierarchyProvider = true
- endif
- else
- lspserver.isCallHierarchyProvider = false
- endif
-
- # typeHierarchyProvider
- if lspserver.caps->has_key('typeHierarchyProvider')
- lspserver.isTypeHierarchyProvider = true
- else
- lspserver.isTypeHierarchyProvider = false
- endif
-
- # renameProvider
- if lspserver.caps->has_key('renameProvider')
- if lspserver.caps.renameProvider->type() == v:t_bool
- lspserver.isRenameProvider = lspserver.caps.renameProvider
- else
- lspserver.isRenameProvider = true
- endif
- else
- lspserver.isRenameProvider = false
- endif
-
- # codeActionProvider
- if lspserver.caps->has_key('codeActionProvider')
- if lspserver.caps.codeActionProvider->type() == v:t_bool
- lspserver.isCodeActionProvider = lspserver.caps.codeActionProvider
- else
- lspserver.isCodeActionProvider = true
- endif
- else
- lspserver.isCodeActionProvider = false
- endif
-
- # workspaceSymbolProvider
- if lspserver.caps->has_key('workspaceSymbolProvider')
- if lspserver.caps.workspaceSymbolProvider->type() == v:t_bool
- lspserver.isWorkspaceSymbolProvider =
- lspserver.caps.workspaceSymbolProvider
- else
- lspserver.isWorkspaceSymbolProvider = true
- endif
- else
- lspserver.isWorkspaceSymbolProvider = false
- endif
-
- # selectionRangeProvider
- if lspserver.caps->has_key('selectionRangeProvider')
- if lspserver.caps.selectionRangeProvider->type() == v:t_bool
- lspserver.isSelectionRangeProvider =
- lspserver.caps.selectionRangeProvider
- else
- lspserver.isSelectionRangeProvider = true
- endif
- else
- lspserver.isSelectionRangeProvider = false
- endif
-
- # foldingRangeProvider
- if lspserver.caps->has_key('foldingRangeProvider')
- if lspserver.caps.foldingRangeProvider->type() == v:t_bool
- lspserver.isFoldingRangeProvider = lspserver.caps.foldingRangeProvider
- else
- lspserver.isFoldingRangeProvider = true
- endif
- else
- lspserver.isFoldingRangeProvider = false
- endif
-
- # inlayHintProvider
- if lspserver.caps->has_key('inlayHintProvider')
- if lspserver.caps.inlayHintProvider->type() == v:t_bool
- lspserver.isInlayHintProvider = lspserver.caps.inlayHintProvider
- else
- lspserver.isInlayHintProvider = true
- endif
- else
- lspserver.isInlayHintProvider = false
- endif
-
- # clangdInlayHintsProvider
- if lspserver.caps->has_key('clangdInlayHintsProvider')
- lspserver.isClangdInlayHintsProvider =
- lspserver.caps.clangdInlayHintsProvider
- else
- lspserver.isClangdInlayHintsProvider = false
- endif
-
- # textDocument/didSave notification
- if lspserver.caps->has_key('textDocumentSync')
- if lspserver.caps.textDocumentSync->type() == v:t_bool
- || lspserver.caps.textDocumentSync->type() == v:t_number
- lspserver.supportsDidSave = lspserver.caps.textDocumentSync
- else
- if lspserver.caps.textDocumentSync->type() == v:t_dict
- if lspserver.caps.textDocumentSync->has_key('save')
- if lspserver.caps.textDocumentSync.save->type() == v:t_bool
- || lspserver.caps.textDocumentSync.save->type() == v:t_number
- lspserver.supportsDidSave = lspserver.caps.textDocumentSync.save
- elseif lspserver.caps.textDocumentSync.save->type() == v:t_dict
- lspserver.supportsDidSave = true
- else
- lspserver.supportsDidSave = false
- endif
- else
- lspserver.supportsDidSave = false
- endif
- else
- lspserver.supportsDidSave = false
- endif
- endif
- else
- lspserver.supportsDidSave = false
- endif
-enddef
-
# process the 'initialize' method reply from the LSP server
# Result: InitializeResult
def ServerInitReply(lspserver: dict<any>, initResult: dict<any>): void
lspserver.caps[$'~additionalInitResult_{key}'] = val
endfor
- ProcessServerCaps(lspserver, caps)
+ capabilities.ProcessServerCaps(lspserver, caps)
if opt.lspOptions.autoComplete && caps->has_key('completionProvider')
- lspserver.completionTriggerChars = caps.completionProvider->get('triggerCharacters', [])
+ lspserver.completionTriggerChars =
+ caps.completionProvider->get('triggerCharacters', [])
lspserver.completionLazyDoc =
- lspserver.caps.completionProvider->get('resolveProvider', false)
+ caps.completionProvider->get('resolveProvider', false)
endif
# send a "initialized" notification to server
# Request: 'initialize'
# Param: InitializeParams
def InitServer(lspserver: dict<any>)
- # client capabilities (ClientCapabilities)
- var clientCaps: dict<any> = {
- workspace: {
- workspaceFolders: true,
- applyEdit: true,
- configuration: false
- },
- textDocument: {
- callHierarchy: {
- dynamicRegistration: false
- },
- codeAction: {
- dynamicRegistration: false,
- codeActionLiteralSupport: {
- codeActionKind: {
- valueSet: ['', 'quickfix', 'refactor', 'refactor.extract',
- 'refactor.inline', 'refactor.rewrite', 'source',
- 'source.organizeImports']
- }
- },
- isPreferredSupport: true,
- disabledSupport: true
- },
- codeLens: {
- dynamicRegistration: false
- },
- completion: {
- dynamicRegistration: false,
- completionItem: {
- documentationFormat: ['plaintext', 'markdown'],
- resolveSupport: {properties: ['detail', 'documentation']},
- snippetSupport: opt.lspOptions.snippetSupport
- },
- completionItemKind: {valueSet: range(1, 25)}
- },
- documentSymbol: {
- dynamicRegistration: false,
- hierarchicalDocumentSymbolSupport: true,
- symbolKind: {valueSet: range(1, 25)}
- },
- hover: {
- contentFormat: ['plaintext', 'markdown']
- },
- foldingRange: {lineFoldingOnly: true},
- inlayHint: {dynamicRegistration: false},
- synchronization: {
- didSave: true
- },
- declaration: {linkSupport: true},
- definition: {linkSupport: true},
- typeDefinition: {linkSupport: true},
- implementation: {linkSupport: true},
- signatureHelp: {
- signatureInformation: {
- documentationFormat: ['plaintext', 'markdown'],
- activeParameterSupport: true
- }
- }
- },
- window: {},
- general: {
- # Currently we always send character count as position offset,
- # which meanas only utf-32 is supported.
- # Adding utf-16 simply for good mesure, as I'm scared some servers will
- # give up if they don't support utf-32 only.
- positionEncodings: ['utf-32', 'utf-16']
- },
- # This is the way clangd expects to be informated about supported encodings:
- # https://clangd.llvm.org/extensions#utf-8-offsets
- offsetEncoding: ['utf-32', 'utf-16']
- }
-
# interface 'InitializeParams'
var initparams: dict<any> = {}
initparams.processId = getpid()
uri: util.LspFileToUri(curdir)
}]
initparams.trace = 'off'
- initparams.capabilities = clientCaps
+ initparams.capabilities = capabilities.GetClientCaps()
if !lspserver.initializationOptions->empty()
initparams.initializationOptions = lspserver.initializationOptions
endif
return
endif
- var title: string = ''
- if msg ==# 'textDocument/declaration'
- title = 'Declarations'
- elseif msg ==# 'textDocument/typeDefinition'
- title = 'Type Definitions'
- elseif msg ==# 'textDocument/implementation'
- title = 'Implementations'
- else
- title = 'Definitions'
- endif
-
var location: dict<any>
if reply.result->type() == v:t_list
+ # When there are multiple symbol locations, display the locations in a
+ # location list.
if reply.result->len() > 1
+ var title: string = ''
+ if msg ==# 'textDocument/declaration'
+ title = 'Declarations'
+ elseif msg ==# 'textDocument/typeDefinition'
+ title = 'Type Definitions'
+ elseif msg ==# 'textDocument/implementation'
+ title = 'Implementations'
+ else
+ title = 'Definitions'
+ endif
+
symbol.ShowLocations(lspserver, reply.result, peekSymbol, title)
return
endif
+ # Only one location
location = reply.result[0]
else
location = reply.result
autoComplete: true,
# In normal mode, highlight the current symbol automatically
autoHighlight: false,
- # In insert mode, show the current symbol signature automatically
- showSignature: true,
- # In insert mode, echo the current symbol signature in the status line
- # instead of showing it in a popup
- echoSignature: 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',
+ # The highlight group used inline Error diagnostics
+ diagInlineErrorHL: 'SpellBad',
+ # The highlight group used inline Hint diagnostics
+ diagInlineHintHL: 'SpellLocal',
+ # The highlight group used inline Info diagnostics
+ diagInlineInfoHL: 'SpellRare',
+ # The highlight group used inline Warning diagnostics
+ diagInlineWarningHL: 'SpellCap',
+ # Default diagnostic highlight on lines
+ diagLineHL: 'DiffAdd',
+ # diagnostics signs options
+ diagSignErrorText: 'E>',
+ diagSignErrorTexthl: 'ErrorMsg',
+ diagSignHintText: 'H>',
+ diagSignHintTexthl: 'Question',
+ diagSignInfoText: 'I>',
+ diagSignInfoTexthl: 'Pmenu',
+ diagSignWarningText: 'W>',
+ diagSignWarningTexthl: 'Search',
+ # The highlight group used for a diagnostics virtual text
+ diagVirtualTextHL: 'LineNr',
+ # In insert mode, echo the current symbol signature in the status line
+ # instead of showing it in a popup
+ echoSignature: false,
+ # hide disabled code actions
+ hideDisabledCodeActions: false,
+ # Highlight diagnostics inline
+ highlightDiagInline: false,
# 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 LspShowReferences
keepFocusInReferences: false,
+ # instead of the signature
+ noDiagHoverOnLine: true,
# Suppress adding a new line on completion selection with <CR>
noNewlineInCompletion: false,
- # Outline window size
- outlineWinSize: 20,
# Open outline window on right side
outlineOnRight: false,
+ # Outline window size
+ outlineWinSize: 20,
+ # Make diagnostics show in a popup instead of echoing
+ showDiagInPopup: true,
# Suppress diagnostic hover from appearing when the mouse is over the line
- # instead of the signature
- noDiagHoverOnLine: true,
# Show a diagnostic message on a status line
showDiagOnStatusLine: false,
- # Make diagnostics show in a popup instead of echoing
- showDiagInPopup: true,
- # Default diagnostic highlight on lines
- diagLineHL: 'DiffAdd',
# Show a diagnostic messages with virtual text
showDiagWithVirtualText: false,
- # The highlight group used for a diagnostics virtual text
- diagVirtualTextHL: 'LineNr',
- # Highlight diagnostics inline
- highlightDiagInline: false,
- # The highlight group used inline Error diagnostics
- diagInlineErrorHL: 'SpellBad',
- # The highlight group used inline Warning diagnostics
- diagInlineWarningHL: 'SpellCap',
- # The highlight group used inline Info diagnostics
- diagInlineInfoHL: 'SpellRare',
- # The highlight group used inline Hint diagnostics
- diagInlineHintHL: 'SpellLocal',
- # Don't print message when a configured language server is missing.
- ignoreMissingServer: false,
- # Use a floating menu to show the code action menu instead of asking for input
- usePopupInCodeAction: false,
- # enable snippet completion support
- snippetSupport: false,
# enable inlay hints
showInlayHints: false,
- # hide disabled code actions
- hideDisabledCodeActions: false,
- # icase | fuzzy | case match for language servers that replies with a full
- # list of completion items
- completionMatcher: 'case',
- # diagnostics signs options
- diagSignErrorText: 'E>',
- diagSignErrorTexthl: 'ErrorMsg',
- diagSignWarningText: 'W>',
- diagSignWarningTexthl: 'Search',
- diagSignInfoText: 'I>',
- diagSignInfoTexthl: 'Pmenu',
- diagSignHintText: 'H>',
- diagSignHintTexthl: 'Question',
+ # In insert mode, show the current symbol signature automatically
+ showSignature: true,
+ # enable snippet completion support
+ snippetSupport: 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
}
case - case sensitive matching (default).
fuzzy - fuzzy match completion items.
icase - ignore case when matching items.
+diagInlineErrorHL |String| option. The highlight group used for
+ inline error highlight. By default uses "SpellBad"
+diagInlineHintHL |String| option. The highlight group used for
+ inline hint highlight. By default uses "SpellLocal"
+diagInlineInfoHL |String| option. The highlight group used for
+ inline info highlight. By default uses "SpellRare"
+diagInlineWarningHL |String| option. The highlight group used for
+ inline warning highlight. By default uses "SpellCap"
diagLineHL |String| option. The highlight group used for a line
with one or more diagnostics. By default uses
"DiffAdd". Use "NONE" to disable.
By default 'E>'
diagSignErrorTexthl |String| option. Change diag sign highlight for errors
By default 'ErrorMsg',
-diagSignWarningText |String| option. Change diag sign text for warnings
- By default 'W>',
-diagSignWarningTexthl |String| option. Change diag sign highlight for warnings
- By default 'Search',
-diagSignInfoText |String| option. Change diag sign text for info
- By default 'I>',
-diagSignInfoTexthl |String| option. Change diag sign text highlight info
- By default 'Pmenu',
diagSignHintText |String| option. Change diag sign text for hints
By default 'H>',
diagSignHintTexthl |String| option. Change diag sign highlight for hints
By default 'Question',
+diagSignInfoText |String| option. Change diag sign text for info
+ By default 'I>',
+diagSignInfoTexthl |String| option. Change diag sign text highlight info
+ By default 'Pmenu',
+diagSignWarningText |String| option. Change diag sign text for warnings
+ By default 'W>',
+diagSignWarningTexthl |String| option. Change diag sign highlight for warnings
+ By default 'Search',
diagVirtualTextHL |String| option. The highlight group used for a
diagnostics virtual text. By default uses "LineNr".
echoSignature |Boolean| option. In insert mode, echo the current
By default this is set to false.
hideDisabledCodeActions |Boolean| option. Hide all the disabled code actions.
By default this is set to false.
+highlightDiagInline |Boolean| option. Highlight the diagnostics inline
+ By default this is set to false.
hoverInPreview |Boolean| option. Show |:LspHover| in a preview window
- instead of a popup
+ instead of a popup.
By default this is set to false.
ignoreMissingServer |Boolean| option. Do not print a missing language
server executable. By default this is set to false.
By default this is set to true.
showDiagOnStatusLine |Boolean| option. Show a diagnostic message on a
status line. By default this is set to false.
-showInlayHints |Boolean| option. Show inlay hints from the language
- server. By default this is set to false. The inlay
- hint text is displayed as a virtual text. Needs Vim
- version 9.0.0178 or later.
showDiagWithVirtualText |Boolean| option. Show diagnostic message text from
the language server with virtual text. By default
this is set to false. The "autoHighlightDiags" option
should be set to true.
Needs Vim version 9.0.1157 or later.
+showInlayHints |Boolean| option. Show inlay hints from the language
+ server. By default this is set to false. The inlay
+ hint text is displayed as a virtual text. Needs Vim
+ version 9.0.0178 or later.
showSignature |Boolean| option. In insert mode, automatically show
the current symbol signature in a popup.
By default this is set to true.
command to display the code action for the current
line, use a popup menu instead of echoing.
By default this is set to false.
-highlightDiagInline |Boolean| option. Highlight the diagnostics inline
- By default this is set to false.
-diagInlineErrorHL |String| option. The highlight group used for
- inline error highlight. By default uses "SpellBad"
-diagInlineWarningHL |String| option. The highlight group used for
- inline warning highlight. By default uses "SpellCap"
-diagInlineInfoHL |String| option. The highlight group used for
- inline info highlight. By default uses "SpellRare"
-diagInlineHintHL |String| option. The highlight group used for
- inline hint highlight. By default uses "SpellLocal"
-
For example, to disable the automatic placement of signs for the LSP
diagnostic messages, you can add the following line to your .vimrc file: >
these highlight groups in your .vimrc file before sourcing this plugin to
override them.
+LspDiagInlineError Used to highlight inline error diagnostics.
+ By default, linked to the "SpellBad" highlight
+ group.
+LspDiagInlineHint Used to highlight inline hint diagnostics.
+ By default, linked to the "SpellLocal"
+ highlight group.
+LspDiagInlineInfo Used to highlight inline info diagnostics.
+ By default, linked to the "SpellRare" highlight
+ group.
+LspDiagInlineWarning Used to highlight inline warning diagnostics.
+ By default, linked to the "SpellCap" highlight
+ group.
+LspDiagVirtualText Used to highlight diagnostic virtual text.
+ By default, linked to the "LineNr" highlight
+ group.
LspInlayHintsParam Used to highlight inlay hints of kind
- "parameter".
+ "parameter". By default, linked to the
+ "Label" highlight group.
LspInlayHintsType Used to highlight inlay hints of kind "type".
+ By default, linked to the "Conceal" highlight
+ group.
+For example, to override the highlight used for diagnostics virtual text, you
+can use the following:
+>
+ highlight LspDiagVirtualText ctermfg=Cyan guifg=Blue
+<
==============================================================================
13. Debugging *lsp-debug*