neovim/runtime/lua/vim/lsp/protocol.lua
2024-03-07 10:24:34 +01:00

1257 lines
49 KiB
Lua

--- @diagnostic disable: duplicate-doc-alias
---@param tbl table<string, string|number>
local function get_value_set(tbl)
local value_set = {}
for _, v in pairs(tbl) do
table.insert(value_set, v)
end
table.sort(value_set)
return value_set
end
-- Protocol for the Microsoft Language Server Protocol (mslsp)
local protocol = {}
local constants = {
--- @enum lsp.DiagnosticSeverity
DiagnosticSeverity = {
-- Reports an error.
Error = 1,
-- Reports a warning.
Warning = 2,
-- Reports an information.
Information = 3,
-- Reports a hint.
Hint = 4,
},
--- @enum lsp.DiagnosticTag
DiagnosticTag = {
-- Unused or unnecessary code
Unnecessary = 1,
-- Deprecated or obsolete code
Deprecated = 2,
},
---@enum lsp.MessageType
MessageType = {
-- An error message.
Error = 1,
-- A warning message.
Warning = 2,
-- An information message.
Info = 3,
-- A log message.
Log = 4,
},
-- The file event type.
---@enum lsp.FileChangeType
FileChangeType = {
-- The file got created.
Created = 1,
-- The file got changed.
Changed = 2,
-- The file got deleted.
Deleted = 3,
},
-- The kind of a completion entry.
CompletionItemKind = {
Text = 1,
Method = 2,
Function = 3,
Constructor = 4,
Field = 5,
Variable = 6,
Class = 7,
Interface = 8,
Module = 9,
Property = 10,
Unit = 11,
Value = 12,
Enum = 13,
Keyword = 14,
Snippet = 15,
Color = 16,
File = 17,
Reference = 18,
Folder = 19,
EnumMember = 20,
Constant = 21,
Struct = 22,
Event = 23,
Operator = 24,
TypeParameter = 25,
},
-- How a completion was triggered
CompletionTriggerKind = {
-- Completion was triggered by typing an identifier (24x7 code
-- complete), manual invocation (e.g Ctrl+Space) or via API.
Invoked = 1,
-- Completion was triggered by a trigger character specified by
-- the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
TriggerCharacter = 2,
-- Completion was re-triggered as the current completion list is incomplete.
TriggerForIncompleteCompletions = 3,
},
-- A document highlight kind.
DocumentHighlightKind = {
-- A textual occurrence.
Text = 1,
-- Read-access of a symbol, like reading a variable.
Read = 2,
-- Write-access of a symbol, like writing to a variable.
Write = 3,
},
-- A symbol kind.
SymbolKind = {
File = 1,
Module = 2,
Namespace = 3,
Package = 4,
Class = 5,
Method = 6,
Property = 7,
Field = 8,
Constructor = 9,
Enum = 10,
Interface = 11,
Function = 12,
Variable = 13,
Constant = 14,
String = 15,
Number = 16,
Boolean = 17,
Array = 18,
Object = 19,
Key = 20,
Null = 21,
EnumMember = 22,
Struct = 23,
Event = 24,
Operator = 25,
TypeParameter = 26,
},
-- Represents reasons why a text document is saved.
---@enum lsp.TextDocumentSaveReason
TextDocumentSaveReason = {
-- Manually triggered, e.g. by the user pressing save, by starting debugging,
-- or by an API call.
Manual = 1,
-- Automatic after a delay.
AfterDelay = 2,
-- When the editor lost focus.
FocusOut = 3,
},
ErrorCodes = {
-- Defined by JSON RPC
ParseError = -32700,
InvalidRequest = -32600,
MethodNotFound = -32601,
InvalidParams = -32602,
InternalError = -32603,
serverErrorStart = -32099,
serverErrorEnd = -32000,
ServerNotInitialized = -32002,
UnknownErrorCode = -32001,
-- Defined by the protocol.
RequestCancelled = -32800,
ContentModified = -32801,
},
-- Describes the content type that a client supports in various
-- result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
--
-- Please note that `MarkupKinds` must not start with a `$`. This kinds
-- are reserved for internal usage.
MarkupKind = {
-- Plain text is supported as a content format
PlainText = 'plaintext',
-- Markdown is supported as a content format
Markdown = 'markdown',
},
ResourceOperationKind = {
-- Supports creating new files and folders.
Create = 'create',
-- Supports renaming existing files and folders.
Rename = 'rename',
-- Supports deleting existing files and folders.
Delete = 'delete',
},
FailureHandlingKind = {
-- Applying the workspace change is simply aborted if one of the changes provided
-- fails. All operations executed before the failing operation stay executed.
Abort = 'abort',
-- All operations are executed transactionally. That means they either all
-- succeed or no changes at all are applied to the workspace.
Transactional = 'transactional',
-- If the workspace edit contains only textual file changes they are executed transactionally.
-- If resource changes (create, rename or delete file) are part of the change the failure
-- handling strategy is abort.
TextOnlyTransactional = 'textOnlyTransactional',
-- The client tries to undo the operations already executed. But there is no
-- guarantee that this succeeds.
Undo = 'undo',
},
-- Known error codes for an `InitializeError`;
InitializeError = {
-- If the protocol version provided by the client can't be handled by the server.
-- @deprecated This initialize error got replaced by client capabilities. There is
-- no version handshake in version 3.0x
unknownProtocolVersion = 1,
},
-- Defines how the host (editor) should sync document changes to the language server.
TextDocumentSyncKind = {
-- Documents should not be synced at all.
None = 0,
-- Documents are synced by always sending the full content
-- of the document.
Full = 1,
-- Documents are synced by sending the full content on open.
-- After that only incremental updates to the document are
-- send.
Incremental = 2,
},
WatchKind = {
-- Interested in create events.
Create = 1,
-- Interested in change events
Change = 2,
-- Interested in delete events
Delete = 4,
},
-- Defines whether the insert text in a completion item should be interpreted as
-- plain text or a snippet.
--- @enum lsp.InsertTextFormat
InsertTextFormat = {
-- The primary text to be inserted is treated as a plain string.
PlainText = 1,
-- The primary text to be inserted is treated as a snippet.
--
-- A snippet can define tab stops and placeholders with `$1`, `$2`
-- and `${3:foo};`. `$0` defines the final tab stop, it defaults to
-- the end of the snippet. Placeholders with equal identifiers are linked,
-- that is typing in one will update others too.
Snippet = 2,
},
-- A set of predefined code action kinds
CodeActionKind = {
-- Empty kind.
Empty = '',
-- Base kind for quickfix actions
QuickFix = 'quickfix',
-- Base kind for refactoring actions
Refactor = 'refactor',
-- Base kind for refactoring extraction actions
--
-- Example extract actions:
--
-- - Extract method
-- - Extract function
-- - Extract variable
-- - Extract interface from class
-- - ...
RefactorExtract = 'refactor.extract',
-- Base kind for refactoring inline actions
--
-- Example inline actions:
--
-- - Inline function
-- - Inline variable
-- - Inline constant
-- - ...
RefactorInline = 'refactor.inline',
-- Base kind for refactoring rewrite actions
--
-- Example rewrite actions:
--
-- - Convert JavaScript function to class
-- - Add or remove parameter
-- - Encapsulate field
-- - Make method static
-- - Move method to base class
-- - ...
RefactorRewrite = 'refactor.rewrite',
-- Base kind for source actions
--
-- Source code actions apply to the entire file.
Source = 'source',
-- Base kind for an organize imports source action
SourceOrganizeImports = 'source.organizeImports',
},
-- The reason why code actions were requested.
---@enum lsp.CodeActionTriggerKind
CodeActionTriggerKind = {
-- Code actions were explicitly requested by the user or by an extension.
Invoked = 1,
-- Code actions were requested automatically.
--
-- This typically happens when current selection in a file changes, but can
-- also be triggered when file content changes.
Automatic = 2,
},
}
for k1, v1 in pairs(constants) do
local tbl = vim.deepcopy(v1, true)
for _, k2 in ipairs(vim.tbl_keys(tbl)) do
local v2 = tbl[k2]
tbl[v2] = k2
end
protocol[k1] = tbl
end
--[=[
--Text document specific client capabilities.
export interface TextDocumentClientCapabilities {
synchronization?: {
--Whether text document synchronization supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports sending will save notifications.
willSave?: boolean;
--The client supports sending a will save request and
--waits for a response providing text edits which will
--be applied to the document before it is saved.
willSaveWaitUntil?: boolean;
--The client supports did save notifications.
didSave?: boolean;
}
--Capabilities specific to the `textDocument/completion`
completion?: {
--Whether completion supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports the following `CompletionItem` specific
--capabilities.
completionItem?: {
--The client supports snippets as insert text.
--
--A snippet can define tab stops and placeholders with `$1`, `$2`
--and `${3:foo}`. `$0` defines the final tab stop, it defaults to
--the end of the snippet. Placeholders with equal identifiers are linked,
--that is typing in one will update others too.
snippetSupport?: boolean;
--The client supports commit characters on a completion item.
commitCharactersSupport?: boolean
--The client supports the following content formats for the documentation
--property. The order describes the preferred format of the client.
documentationFormat?: MarkupKind[];
--The client supports the deprecated property on a completion item.
deprecatedSupport?: boolean;
--The client supports the preselect property on a completion item.
preselectSupport?: boolean;
}
completionItemKind?: {
--The completion item kind values the client supports. When this
--property exists the client also guarantees that it will
--handle values outside its set gracefully and falls back
--to a default value when unknown.
--
--If this property is not present the client only supports
--the completion items kinds from `Text` to `Reference` as defined in
--the initial version of the protocol.
valueSet?: CompletionItemKind[];
},
--The client supports to send additional context information for a
--`textDocument/completion` request.
contextSupport?: boolean;
};
--Capabilities specific to the `textDocument/hover`
hover?: {
--Whether hover supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports the follow content formats for the content
--property. The order describes the preferred format of the client.
contentFormat?: MarkupKind[];
};
--Capabilities specific to the `textDocument/signatureHelp`
signatureHelp?: {
--Whether signature help supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports the following `SignatureInformation`
--specific properties.
signatureInformation?: {
--The client supports the follow content formats for the documentation
--property. The order describes the preferred format of the client.
documentationFormat?: MarkupKind[];
--Client capabilities specific to parameter information.
parameterInformation?: {
--The client supports processing label offsets instead of a
--simple label string.
--
--Since 3.14.0
labelOffsetSupport?: boolean;
}
};
};
--Capabilities specific to the `textDocument/references`
references?: {
--Whether references supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/documentHighlight`
documentHighlight?: {
--Whether document highlight supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/documentSymbol`
documentSymbol?: {
--Whether document symbol supports dynamic registration.
dynamicRegistration?: boolean;
--Specific capabilities for the `SymbolKind`.
symbolKind?: {
--The symbol kind values the client supports. When this
--property exists the client also guarantees that it will
--handle values outside its set gracefully and falls back
--to a default value when unknown.
--
--If this property is not present the client only supports
--the symbol kinds from `File` to `Array` as defined in
--the initial version of the protocol.
valueSet?: SymbolKind[];
}
--The client supports hierarchical document symbols.
hierarchicalDocumentSymbolSupport?: boolean;
};
--Capabilities specific to the `textDocument/formatting`
formatting?: {
--Whether formatting supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/rangeFormatting`
rangeFormatting?: {
--Whether range formatting supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/onTypeFormatting`
onTypeFormatting?: {
--Whether on type formatting supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/declaration`
declaration?: {
--Whether declaration supports dynamic registration. If this is set to `true`
--the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)`
--return value for the corresponding server capability as well.
dynamicRegistration?: boolean;
--The client supports additional metadata in the form of declaration links.
--
--Since 3.14.0
linkSupport?: boolean;
};
--Capabilities specific to the `textDocument/definition`.
--
--Since 3.14.0
definition?: {
--Whether definition supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports additional metadata in the form of definition links.
linkSupport?: boolean;
};
--Capabilities specific to the `textDocument/typeDefinition`
--
--Since 3.6.0
typeDefinition?: {
--Whether typeDefinition supports dynamic registration. If this is set to `true`
--the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)`
--return value for the corresponding server capability as well.
dynamicRegistration?: boolean;
--The client supports additional metadata in the form of definition links.
--
--Since 3.14.0
linkSupport?: boolean;
};
--Capabilities specific to the `textDocument/implementation`.
--
--Since 3.6.0
implementation?: {
--Whether implementation supports dynamic registration. If this is set to `true`
--the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)`
--return value for the corresponding server capability as well.
dynamicRegistration?: boolean;
--The client supports additional metadata in the form of definition links.
--
--Since 3.14.0
linkSupport?: boolean;
};
--Capabilities specific to the `textDocument/codeAction`
codeAction?: {
--Whether code action supports dynamic registration.
dynamicRegistration?: boolean;
--The client support code action literals as a valid
--response of the `textDocument/codeAction` request.
--
--Since 3.8.0
codeActionLiteralSupport?: {
--The code action kind is support with the following value
--set.
codeActionKind: {
--The code action kind values the client supports. When this
--property exists the client also guarantees that it will
--handle values outside its set gracefully and falls back
--to a default value when unknown.
valueSet: CodeActionKind[];
};
};
};
--Capabilities specific to the `textDocument/codeLens`
codeLens?: {
--Whether code lens supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/documentLink`
documentLink?: {
--Whether document link supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `textDocument/documentColor` and the
--`textDocument/colorPresentation` request.
--
--Since 3.6.0
colorProvider?: {
--Whether colorProvider supports dynamic registration. If this is set to `true`
--the client supports the new `(ColorProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
--return value for the corresponding server capability as well.
dynamicRegistration?: boolean;
}
--Capabilities specific to the `textDocument/rename`
rename?: {
--Whether rename supports dynamic registration.
dynamicRegistration?: boolean;
--The client supports testing for validity of rename operations
--before execution.
prepareSupport?: boolean;
};
--Capabilities specific to `textDocument/publishDiagnostics`.
publishDiagnostics?: {
--Whether the clients accepts diagnostics with related information.
relatedInformation?: boolean;
--Client supports the tag property to provide meta data about a diagnostic.
--Clients supporting tags have to handle unknown tags gracefully.
--Since 3.15.0
tagSupport?: {
--The tags supported by this client
valueSet: DiagnosticTag[];
};
};
--Capabilities specific to `textDocument/foldingRange` requests.
--
--Since 3.10.0
foldingRange?: {
--Whether implementation supports dynamic registration for folding range providers. If this is set to `true`
--the client supports the new `(FoldingRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
--return value for the corresponding server capability as well.
dynamicRegistration?: boolean;
--The maximum number of folding ranges that the client prefers to receive per document. The value serves as a
--hint, servers are free to follow the limit.
rangeLimit?: number;
--If set, the client signals that it only supports folding complete lines. If set, client will
--ignore specified `startCharacter` and `endCharacter` properties in a FoldingRange.
lineFoldingOnly?: boolean;
};
}
--]=]
--[=[
--Workspace specific client capabilities.
export interface WorkspaceClientCapabilities {
--The client supports applying batch edits to the workspace by supporting
--the request 'workspace/applyEdit'
applyEdit?: boolean;
--Capabilities specific to `WorkspaceEdit`s
workspaceEdit?: {
--The client supports versioned document changes in `WorkspaceEdit`s
documentChanges?: boolean;
--The resource operations the client supports. Clients should at least
--support 'create', 'rename' and 'delete' files and folders.
resourceOperations?: ResourceOperationKind[];
--The failure handling strategy of a client if applying the workspace edit
--fails.
failureHandling?: FailureHandlingKind;
};
--Capabilities specific to the `workspace/didChangeConfiguration` notification.
didChangeConfiguration?: {
--Did change configuration notification supports dynamic registration.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `workspace/didChangeWatchedFiles` notification.
didChangeWatchedFiles?: {
--Did change watched files notification supports dynamic registration. Please note
--that the current protocol doesn't support static configuration for file changes
--from the server side.
dynamicRegistration?: boolean;
};
--Capabilities specific to the `workspace/symbol` request.
symbol?: {
--Symbol request supports dynamic registration.
dynamicRegistration?: boolean;
--Specific capabilities for the `SymbolKind` in the `workspace/symbol` request.
symbolKind?: {
--The symbol kind values the client supports. When this
--property exists the client also guarantees that it will
--handle values outside its set gracefully and falls back
--to a default value when unknown.
--
--If this property is not present the client only supports
--the symbol kinds from `File` to `Array` as defined in
--the initial version of the protocol.
valueSet?: SymbolKind[];
}
};
--Capabilities specific to the `workspace/executeCommand` request.
executeCommand?: {
--Execute command supports dynamic registration.
dynamicRegistration?: boolean;
};
--The client has support for workspace folders.
--
--Since 3.6.0
workspaceFolders?: boolean;
--The client supports `workspace/configuration` requests.
--
--Since 3.6.0
configuration?: boolean;
}
--]=]
--- Gets a new ClientCapabilities object describing the LSP client
--- capabilities.
--- @return lsp.ClientCapabilities
function protocol.make_client_capabilities()
return {
general = {
positionEncodings = {
'utf-16',
},
},
textDocument = {
diagnostic = {
dynamicRegistration = false,
},
inlayHint = {
dynamicRegistration = true,
resolveSupport = {
properties = {
'textEdits',
'tooltip',
'location',
'command',
},
},
},
semanticTokens = {
dynamicRegistration = false,
tokenTypes = {
'namespace',
'type',
'class',
'enum',
'interface',
'struct',
'typeParameter',
'parameter',
'variable',
'property',
'enumMember',
'event',
'function',
'method',
'macro',
'keyword',
'modifier',
'comment',
'string',
'number',
'regexp',
'operator',
'decorator',
},
tokenModifiers = {
'declaration',
'definition',
'readonly',
'static',
'deprecated',
'abstract',
'async',
'modification',
'documentation',
'defaultLibrary',
},
formats = { 'relative' },
requests = {
-- TODO(jdrouhard): Add support for this
range = false,
full = { delta = true },
},
overlappingTokenSupport = true,
-- TODO(jdrouhard): Add support for this
multilineTokenSupport = false,
serverCancelSupport = false,
augmentsSyntaxTokens = true,
},
synchronization = {
dynamicRegistration = false,
willSave = true,
willSaveWaitUntil = true,
-- Send textDocument/didSave after saving (BufWritePost)
didSave = true,
},
codeAction = {
dynamicRegistration = true,
codeActionLiteralSupport = {
codeActionKind = {
valueSet = get_value_set(constants.CodeActionKind),
},
},
isPreferredSupport = true,
dataSupport = true,
resolveSupport = {
properties = { 'edit' },
},
},
formatting = {
dynamicRegistration = true,
},
rangeFormatting = {
dynamicRegistration = true,
},
completion = {
dynamicRegistration = false,
completionItem = {
-- Until we can actually expand snippet, move cursor and allow for true snippet experience,
-- this should be disabled out of the box.
-- However, users can turn this back on if they have a snippet plugin.
snippetSupport = false,
commitCharactersSupport = false,
preselectSupport = false,
deprecatedSupport = false,
documentationFormat = { constants.MarkupKind.Markdown, constants.MarkupKind.PlainText },
},
completionItemKind = {
valueSet = get_value_set(constants.CompletionItemKind),
},
completionList = {
itemDefaults = {
'editRange',
'insertTextFormat',
'insertTextMode',
'data',
},
},
-- TODO(tjdevries): Implement this
contextSupport = false,
},
declaration = {
linkSupport = true,
},
definition = {
linkSupport = true,
dynamicRegistration = true,
},
implementation = {
linkSupport = true,
},
typeDefinition = {
linkSupport = true,
},
hover = {
dynamicRegistration = true,
contentFormat = { constants.MarkupKind.Markdown, constants.MarkupKind.PlainText },
},
signatureHelp = {
dynamicRegistration = false,
signatureInformation = {
activeParameterSupport = true,
documentationFormat = { constants.MarkupKind.Markdown, constants.MarkupKind.PlainText },
parameterInformation = {
labelOffsetSupport = true,
},
},
},
references = {
dynamicRegistration = false,
},
documentHighlight = {
dynamicRegistration = false,
},
documentSymbol = {
dynamicRegistration = false,
symbolKind = {
valueSet = get_value_set(constants.SymbolKind),
},
hierarchicalDocumentSymbolSupport = true,
},
rename = {
dynamicRegistration = true,
prepareSupport = true,
},
publishDiagnostics = {
relatedInformation = true,
tagSupport = {
valueSet = get_value_set(constants.DiagnosticTag),
},
dataSupport = true,
},
callHierarchy = {
dynamicRegistration = false,
},
},
workspace = {
symbol = {
dynamicRegistration = false,
symbolKind = {
valueSet = get_value_set(constants.SymbolKind),
},
},
configuration = true,
didChangeConfiguration = {
dynamicRegistration = false,
},
workspaceFolders = true,
applyEdit = true,
workspaceEdit = {
resourceOperations = { 'rename', 'create', 'delete' },
},
semanticTokens = {
refreshSupport = true,
},
didChangeWatchedFiles = {
dynamicRegistration = true,
relativePatternSupport = true,
},
inlayHint = {
refreshSupport = true,
},
},
experimental = nil,
window = {
workDoneProgress = true,
showMessage = {
messageActionItem = {
additionalPropertiesSupport = false,
},
},
showDocument = {
support = true,
},
},
}
end
--- Creates a normalized object describing LSP server capabilities.
---@param server_capabilities table Table of capabilities supported by the server
---@return lsp.ServerCapabilities|nil : Normalized table of capabilities
function protocol.resolve_capabilities(server_capabilities)
local TextDocumentSyncKind = protocol.TextDocumentSyncKind ---@type table<string|number, string|number>
local textDocumentSync = server_capabilities.textDocumentSync
if textDocumentSync == nil then
-- Defaults if omitted.
server_capabilities.textDocumentSync = {
openClose = false,
change = TextDocumentSyncKind.None,
willSave = false,
willSaveWaitUntil = false,
save = {
includeText = false,
},
}
elseif type(textDocumentSync) == 'number' then
-- Backwards compatibility
if not TextDocumentSyncKind[textDocumentSync] then
vim.notify('Invalid server TextDocumentSyncKind for textDocumentSync', vim.log.levels.ERROR)
return nil
end
server_capabilities.textDocumentSync = {
openClose = true,
change = textDocumentSync,
willSave = false,
willSaveWaitUntil = false,
save = {
includeText = false,
},
}
elseif type(textDocumentSync) ~= 'table' then
vim.notify(
string.format('Invalid type for textDocumentSync: %q', type(textDocumentSync)),
vim.log.levels.ERROR
)
return nil
end
return server_capabilities
end
-- Generated by gen_lsp.lua, keep at end of file.
--- LSP method names.
---
---@see https://microsoft.github.io/language-server-protocol/specification/#metaModel
protocol.Methods = {
--- A request to resolve the incoming calls for a given `CallHierarchyItem`.
--- @since 3.16.0
callHierarchy_incomingCalls = 'callHierarchy/incomingCalls',
--- A request to resolve the outgoing calls for a given `CallHierarchyItem`.
--- @since 3.16.0
callHierarchy_outgoingCalls = 'callHierarchy/outgoingCalls',
--- The `client/registerCapability` request is sent from the server to the client to register a new capability
--- handler on the client side.
client_registerCapability = 'client/registerCapability',
--- The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
--- handler on the client side.
client_unregisterCapability = 'client/unregisterCapability',
--- Request to resolve additional information for a given code action.The request's
--- parameter is of type {@link CodeAction} the response
--- is of type {@link CodeAction} or a Thenable that resolves to such.
codeAction_resolve = 'codeAction/resolve',
--- A request to resolve a command for a given code lens.
codeLens_resolve = 'codeLens/resolve',
--- Request to resolve additional information for a given completion item.The request's
--- parameter is of type {@link CompletionItem} the response
--- is of type {@link CompletionItem} or a Thenable that resolves to such.
completionItem_resolve = 'completionItem/resolve',
--- Request to resolve additional information for a given document link. The request's
--- parameter is of type {@link DocumentLink} the response
--- is of type {@link DocumentLink} or a Thenable that resolves to such.
documentLink_resolve = 'documentLink/resolve',
dollar_cancelRequest = '$/cancelRequest',
dollar_logTrace = '$/logTrace',
dollar_progress = '$/progress',
dollar_setTrace = '$/setTrace',
--- The exit event is sent from the client to the server to
--- ask the server to exit its process.
exit = 'exit',
--- The initialize request is sent from the client to the server.
--- It is sent once as the request after starting up the server.
--- The requests parameter is of type {@link InitializeParams}
--- the response if of type {@link InitializeResult} of a Thenable that
--- resolves to such.
initialize = 'initialize',
--- The initialized notification is sent from the client to the
--- server after the client is fully initialized and the server
--- is allowed to send requests from the server to the client.
initialized = 'initialized',
--- A request to resolve additional properties for an inlay hint.
--- The request's parameter is of type {@link InlayHint}, the response is
--- of type {@link InlayHint} or a Thenable that resolves to such.
--- @since 3.17.0
inlayHint_resolve = 'inlayHint/resolve',
notebookDocument_didChange = 'notebookDocument/didChange',
--- A notification sent when a notebook closes.
--- @since 3.17.0
notebookDocument_didClose = 'notebookDocument/didClose',
--- A notification sent when a notebook opens.
--- @since 3.17.0
notebookDocument_didOpen = 'notebookDocument/didOpen',
--- A notification sent when a notebook document is saved.
--- @since 3.17.0
notebookDocument_didSave = 'notebookDocument/didSave',
--- A shutdown request is sent from the client to the server.
--- It is sent once when the client decides to shutdown the
--- server. The only notification that is sent after a shutdown request
--- is the exit event.
shutdown = 'shutdown',
--- The telemetry event notification is sent from the server to the client to ask
--- the client to log telemetry data.
telemetry_event = 'telemetry/event',
--- A request to provide commands for the given text document and range.
textDocument_codeAction = 'textDocument/codeAction',
--- A request to provide code lens for the given text document.
textDocument_codeLens = 'textDocument/codeLens',
--- A request to list all presentation for a color. The request's
--- parameter is of type {@link ColorPresentationParams} the
--- response is of type {@link ColorInformation ColorInformation[]} or a Thenable
--- that resolves to such.
textDocument_colorPresentation = 'textDocument/colorPresentation',
--- Request to request completion at a given text document position. The request's
--- parameter is of type {@link TextDocumentPosition} the response
--- is of type {@link CompletionItem CompletionItem[]} or {@link CompletionList}
--- or a Thenable that resolves to such.
--- The request can delay the computation of the {@link CompletionItem.detail `detail`}
--- and {@link CompletionItem.documentation `documentation`} properties to the `completionItem/resolve`
--- request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
--- `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
textDocument_completion = 'textDocument/completion',
--- A request to resolve the type definition locations of a symbol at a given text
--- document position. The request's parameter is of type {@link TextDocumentPositionParams}
--- the response is of type {@link Declaration} or a typed array of {@link DeclarationLink}
--- or a Thenable that resolves to such.
textDocument_declaration = 'textDocument/declaration',
--- A request to resolve the definition location of a symbol at a given text
--- document position. The request's parameter is of type {@link TextDocumentPosition}
--- the response is of either type {@link Definition} or a typed array of
--- {@link DefinitionLink} or a Thenable that resolves to such.
textDocument_definition = 'textDocument/definition',
--- The document diagnostic request definition.
--- @since 3.17.0
textDocument_diagnostic = 'textDocument/diagnostic',
--- The document change notification is sent from the client to the server to signal
--- changes to a text document.
textDocument_didChange = 'textDocument/didChange',
--- The document close notification is sent from the client to the server when
--- the document got closed in the client. The document's truth now exists where
--- the document's uri points to (e.g. if the document's uri is a file uri the
--- truth now exists on disk). As with the open notification the close notification
--- is about managing the document's content. Receiving a close notification
--- doesn't mean that the document was open in an editor before. A close
--- notification requires a previous open notification to be sent.
textDocument_didClose = 'textDocument/didClose',
--- The document open notification is sent from the client to the server to signal
--- newly opened text documents. The document's truth is now managed by the client
--- and the server must not try to read the document's truth using the document's
--- uri. Open in this sense means it is managed by the client. It doesn't necessarily
--- mean that its content is presented in an editor. An open notification must not
--- be sent more than once without a corresponding close notification send before.
--- This means open and close notification must be balanced and the max open count
--- is one.
textDocument_didOpen = 'textDocument/didOpen',
--- The document save notification is sent from the client to the server when
--- the document got saved in the client.
textDocument_didSave = 'textDocument/didSave',
--- A request to list all color symbols found in a given text document. The request's
--- parameter is of type {@link DocumentColorParams} the
--- response is of type {@link ColorInformation ColorInformation[]} or a Thenable
--- that resolves to such.
textDocument_documentColor = 'textDocument/documentColor',
--- Request to resolve a {@link DocumentHighlight} for a given
--- text document position. The request's parameter is of type {@link TextDocumentPosition}
--- the request response is an array of type {@link DocumentHighlight}
--- or a Thenable that resolves to such.
textDocument_documentHighlight = 'textDocument/documentHighlight',
--- A request to provide document links
textDocument_documentLink = 'textDocument/documentLink',
--- A request to list all symbols found in a given text document. The request's
--- parameter is of type {@link TextDocumentIdentifier} the
--- response is of type {@link SymbolInformation SymbolInformation[]} or a Thenable
--- that resolves to such.
textDocument_documentSymbol = 'textDocument/documentSymbol',
--- A request to provide folding ranges in a document. The request's
--- parameter is of type {@link FoldingRangeParams}, the
--- response is of type {@link FoldingRangeList} or a Thenable
--- that resolves to such.
textDocument_foldingRange = 'textDocument/foldingRange',
--- A request to format a whole document.
textDocument_formatting = 'textDocument/formatting',
--- Request to request hover information at a given text document position. The request's
--- parameter is of type {@link TextDocumentPosition} the response is of
--- type {@link Hover} or a Thenable that resolves to such.
textDocument_hover = 'textDocument/hover',
--- A request to resolve the implementation locations of a symbol at a given text
--- document position. The request's parameter is of type {@link TextDocumentPositionParams}
--- the response is of type {@link Definition} or a Thenable that resolves to such.
textDocument_implementation = 'textDocument/implementation',
--- A request to provide inlay hints in a document. The request's parameter is of
--- type {@link InlayHintsParams}, the response is of type
--- {@link InlayHint InlayHint[]} or a Thenable that resolves to such.
--- @since 3.17.0
textDocument_inlayHint = 'textDocument/inlayHint',
--- A request to provide inline completions in a document. The request's parameter is of
--- type {@link InlineCompletionParams}, the response is of type
--- {@link InlineCompletion InlineCompletion[]} or a Thenable that resolves to such.
--- @since 3.18.0
--- @proposed
textDocument_inlineCompletion = 'textDocument/inlineCompletion',
--- A request to provide inline values in a document. The request's parameter is of
--- type {@link InlineValueParams}, the response is of type
--- {@link InlineValue InlineValue[]} or a Thenable that resolves to such.
--- @since 3.17.0
textDocument_inlineValue = 'textDocument/inlineValue',
--- A request to provide ranges that can be edited together.
--- @since 3.16.0
textDocument_linkedEditingRange = 'textDocument/linkedEditingRange',
--- A request to get the moniker of a symbol at a given text document position.
--- The request parameter is of type {@link TextDocumentPositionParams}.
--- The response is of type {@link Moniker Moniker[]} or `null`.
textDocument_moniker = 'textDocument/moniker',
--- A request to format a document on type.
textDocument_onTypeFormatting = 'textDocument/onTypeFormatting',
--- A request to result a `CallHierarchyItem` in a document at a given position.
--- Can be used as an input to an incoming or outgoing call hierarchy.
--- @since 3.16.0
textDocument_prepareCallHierarchy = 'textDocument/prepareCallHierarchy',
--- A request to test and perform the setup necessary for a rename.
--- @since 3.16 - support for default behavior
textDocument_prepareRename = 'textDocument/prepareRename',
--- A request to result a `TypeHierarchyItem` in a document at a given position.
--- Can be used as an input to a subtypes or supertypes type hierarchy.
--- @since 3.17.0
textDocument_prepareTypeHierarchy = 'textDocument/prepareTypeHierarchy',
--- Diagnostics notification are sent from the server to the client to signal
--- results of validation runs.
textDocument_publishDiagnostics = 'textDocument/publishDiagnostics',
--- A request to format a range in a document.
textDocument_rangeFormatting = 'textDocument/rangeFormatting',
--- A request to format ranges in a document.
--- @since 3.18.0
--- @proposed
textDocument_rangesFormatting = 'textDocument/rangesFormatting',
--- A request to resolve project-wide references for the symbol denoted
--- by the given text document position. The request's parameter is of
--- type {@link ReferenceParams} the response is of type
--- {@link Location Location[]} or a Thenable that resolves to such.
textDocument_references = 'textDocument/references',
--- A request to rename a symbol.
textDocument_rename = 'textDocument/rename',
--- A request to provide selection ranges in a document. The request's
--- parameter is of type {@link SelectionRangeParams}, the
--- response is of type {@link SelectionRange SelectionRange[]} or a Thenable
--- that resolves to such.
textDocument_selectionRange = 'textDocument/selectionRange',
--- @since 3.16.0
textDocument_semanticTokens_full = 'textDocument/semanticTokens/full',
--- @since 3.16.0
textDocument_semanticTokens_full_delta = 'textDocument/semanticTokens/full/delta',
--- @since 3.16.0
textDocument_semanticTokens_range = 'textDocument/semanticTokens/range',
textDocument_signatureHelp = 'textDocument/signatureHelp',
--- A request to resolve the type definition locations of a symbol at a given text
--- document position. The request's parameter is of type {@link TextDocumentPositionParams}
--- the response is of type {@link Definition} or a Thenable that resolves to such.
textDocument_typeDefinition = 'textDocument/typeDefinition',
--- A document will save notification is sent from the client to the server before
--- the document is actually saved.
textDocument_willSave = 'textDocument/willSave',
--- A document will save request is sent from the client to the server before
--- the document is actually saved. The request can return an array of TextEdits
--- which will be applied to the text document before it is saved. Please note that
--- clients might drop results if computing the text edits took too long or if a
--- server constantly fails on this request. This is done to keep the save fast and
--- reliable.
textDocument_willSaveWaitUntil = 'textDocument/willSaveWaitUntil',
--- A request to resolve the subtypes for a given `TypeHierarchyItem`.
--- @since 3.17.0
typeHierarchy_subtypes = 'typeHierarchy/subtypes',
--- A request to resolve the supertypes for a given `TypeHierarchyItem`.
--- @since 3.17.0
typeHierarchy_supertypes = 'typeHierarchy/supertypes',
--- The log message notification is sent from the server to the client to ask
--- the client to log a particular message.
window_logMessage = 'window/logMessage',
--- A request to show a document. This request might open an
--- external program depending on the value of the URI to open.
--- For example a request to open `https://code.visualstudio.com/`
--- will very likely open the URI in a WEB browser.
--- @since 3.16.0
window_showDocument = 'window/showDocument',
--- The show message notification is sent from a server to a client to ask
--- the client to display a particular message in the user interface.
window_showMessage = 'window/showMessage',
--- The show message request is sent from the server to the client to show a message
--- and a set of options actions to the user.
window_showMessageRequest = 'window/showMessageRequest',
--- The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
--- initiated on the server side.
window_workDoneProgress_cancel = 'window/workDoneProgress/cancel',
--- The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
--- reporting from the server.
window_workDoneProgress_create = 'window/workDoneProgress/create',
--- A request to resolve the range inside the workspace
--- symbol's location.
--- @since 3.17.0
workspaceSymbol_resolve = 'workspaceSymbol/resolve',
--- A request sent from the server to the client to modify certain resources.
workspace_applyEdit = 'workspace/applyEdit',
--- A request to refresh all code actions
--- @since 3.16.0
workspace_codeLens_refresh = 'workspace/codeLens/refresh',
--- The 'workspace/configuration' request is sent from the server to the client to fetch a certain
--- configuration setting.
--- This pull model replaces the old push model where the client signaled configuration change via an
--- event. If the server still needs to react to configuration changes (since the server caches the
--- result of `workspace/configuration` requests) the server should register for an empty configuration
--- change event and empty the cache if such an event is received.
workspace_configuration = 'workspace/configuration',
--- The workspace diagnostic request definition.
--- @since 3.17.0
workspace_diagnostic = 'workspace/diagnostic',
--- The diagnostic refresh request definition.
--- @since 3.17.0
workspace_diagnostic_refresh = 'workspace/diagnostic/refresh',
--- The configuration change notification is sent from the client to the server
--- when the client's configuration has changed. The notification contains
--- the changed configuration as defined by the language client.
workspace_didChangeConfiguration = 'workspace/didChangeConfiguration',
--- The watched files notification is sent from the client to the server when
--- the client detects changes to file watched by the language client.
workspace_didChangeWatchedFiles = 'workspace/didChangeWatchedFiles',
--- The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
--- folder configuration changes.
workspace_didChangeWorkspaceFolders = 'workspace/didChangeWorkspaceFolders',
--- The did create files notification is sent from the client to the server when
--- files were created from within the client.
--- @since 3.16.0
workspace_didCreateFiles = 'workspace/didCreateFiles',
--- The will delete files request is sent from the client to the server before files are actually
--- deleted as long as the deletion is triggered from within the client.
--- @since 3.16.0
workspace_didDeleteFiles = 'workspace/didDeleteFiles',
--- The did rename files notification is sent from the client to the server when
--- files were renamed from within the client.
--- @since 3.16.0
workspace_didRenameFiles = 'workspace/didRenameFiles',
--- A request sent from the client to the server to execute a command. The request might return
--- a workspace edit which the client will apply to the workspace.
workspace_executeCommand = 'workspace/executeCommand',
--- @since 3.18.0
--- @proposed
workspace_foldingRange_refresh = 'workspace/foldingRange/refresh',
--- @since 3.17.0
workspace_inlayHint_refresh = 'workspace/inlayHint/refresh',
--- @since 3.17.0
workspace_inlineValue_refresh = 'workspace/inlineValue/refresh',
--- @since 3.16.0
workspace_semanticTokens_refresh = 'workspace/semanticTokens/refresh',
--- A request to list project-wide symbols matching the query string given
--- by the {@link WorkspaceSymbolParams}. The response is
--- of type {@link SymbolInformation SymbolInformation[]} or a Thenable that
--- resolves to such.
--- @since 3.17.0 - support for WorkspaceSymbol in the returned data. Clients
--- need to advertise support for WorkspaceSymbols via the client capability
--- `workspace.symbol.resolveSupport`.
workspace_symbol = 'workspace/symbol',
--- The will create files request is sent from the client to the server before files are actually
--- created as long as the creation is triggered from within the client.
--- The request can return a `WorkspaceEdit` which will be applied to workspace before the
--- files are created. Hence the `WorkspaceEdit` can not manipulate the content of the file
--- to be created.
--- @since 3.16.0
workspace_willCreateFiles = 'workspace/willCreateFiles',
--- The did delete files notification is sent from the client to the server when
--- files were deleted from within the client.
--- @since 3.16.0
workspace_willDeleteFiles = 'workspace/willDeleteFiles',
--- The will rename files request is sent from the client to the server before files are actually
--- renamed as long as the rename is triggered from within the client.
--- @since 3.16.0
workspace_willRenameFiles = 'workspace/willRenameFiles',
--- The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
workspace_workspaceFolders = 'workspace/workspaceFolders',
}
local function freeze(t)
return setmetatable({}, {
__index = t,
__newindex = function()
error('cannot modify immutable table')
end,
})
end
protocol.Methods = freeze(protocol.Methods)
return protocol