mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1257 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
