From 47bdd04ce92d6ed9172a993f799abc40b90dbae2 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 1 Apr 2023 14:39:49 -0700 Subject: [PATCH] Move the server/client capabilities functions to a separate file. Sort the options alphabetically --- autoload/lsp/capabilities.vim | 332 +++++++++++++++++++++++++++++++ autoload/lsp/lspserver.vim | 355 ++-------------------------------- autoload/lsp/options.vim | 90 ++++----- doc/lsp.txt | 72 ++++--- 4 files changed, 444 insertions(+), 405 deletions(-) create mode 100644 autoload/lsp/capabilities.vim diff --git a/autoload/lsp/capabilities.vim b/autoload/lsp/capabilities.vim new file mode 100644 index 0000000..ac9b080 --- /dev/null +++ b/autoload/lsp/capabilities.vim @@ -0,0 +1,332 @@ +vim9script + +# Functions for managing the LSP server and client capabilities + +import './options.vim' as opt + +# Process the server capabilities +export def ProcessServerCaps(lspserver: dict, caps: dict) + # 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 + # client capabilities (ClientCapabilities) + var clientCaps: dict = { + 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 diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index d38d208..d8907c3 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -11,6 +11,7 @@ vim9script import './options.vim' as opt import './handlers.vim' import './util.vim' +import './capabilities.vim' import './diag.vim' import './selection.vim' import './symbol.vim' @@ -89,254 +90,6 @@ def StartServer(lspserver: dict): number return 0 enddef -# Process the server capabilities -def ProcessServerCaps(lspserver: dict, caps: dict) - # 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, initResult: dict): void @@ -355,12 +108,13 @@ def ServerInitReply(lspserver: dict, initResult: dict): 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 @@ -386,78 +140,6 @@ enddef # Request: 'initialize' # Param: InitializeParams def InitServer(lspserver: dict) - # client capabilities (ClientCapabilities) - var clientCaps: dict = { - 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 = {} initparams.processId = getpid() @@ -473,7 +155,7 @@ def InitServer(lspserver: dict) uri: util.LspFileToUri(curdir) }] initparams.trace = 'off' - initparams.capabilities = clientCaps + initparams.capabilities = capabilities.GetClientCaps() if !lspserver.initializationOptions->empty() initparams.initializationOptions = lspserver.initializationOptions endif @@ -923,24 +605,27 @@ def GotoSymbolLoc(lspserver: dict, msg: string, peekSymbol: bool, 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 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 diff --git a/autoload/lsp/options.vim b/autoload/lsp/options.vim index b80b03d..411e3e1 100644 --- a/autoload/lsp/options.vim +++ b/autoload/lsp/options.vim @@ -8,70 +8,70 @@ export var lspOptions: dict = { 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 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 } diff --git a/doc/lsp.txt b/doc/lsp.txt index 394a72f..daa3cb4 100644 --- a/doc/lsp.txt +++ b/doc/lsp.txt @@ -300,6 +300,14 @@ completionMatcher |String| option. Enable fuzzy or case insensitive 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. @@ -307,18 +315,18 @@ diagSignErrorText |String| option. Change diag sign text for errors 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 @@ -326,8 +334,10 @@ 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. @@ -354,15 +364,15 @@ showDiagInPopup |Boolean| option. When using the |:LspDiagCurrent| 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. @@ -373,17 +383,6 @@ usePopupInCodeAction |Boolean| option. When using the |:LspCodeAction| 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: > @@ -984,10 +983,33 @@ The following highlight groups are used by the LSP plugin. You can define 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* -- 2.48.1