// SPDX-FileCopyrightText: 2021 The Go Language Server Authors // SPDX-License-Identifier: BSD-3-Clause package protocol import "strconv" // ClientCapabilities now define capabilities for dynamic registration, workspace and text document features // the client supports. // // The experimental can be used to pass experimental capabilities under development. // // For future compatibility a ClientCapabilities object literal can have more properties set than currently defined. // Servers receiving a ClientCapabilities object literal with unknown properties should ignore these properties. // // A missing property should be interpreted as an absence of the capability. // If a missing property normally defines sub properties, all missing sub properties should be interpreted // as an absence of the corresponding capability. type ClientCapabilities struct { // Workspace specific client capabilities. Workspace *WorkspaceClientCapabilities `json:"workspace,omitempty"` // TextDocument specific client capabilities. TextDocument *TextDocumentClientCapabilities `json:"textDocument,omitempty"` // Window specific client capabilities. Window *WindowClientCapabilities `json:"window,omitempty"` // General client capabilities. // // @since 3.16.0. General *GeneralClientCapabilities `json:"general,omitempty"` // Experimental client capabilities. Experimental interface{} `json:"experimental,omitempty"` } // WorkspaceClientCapabilities Workspace specific client capabilities. type WorkspaceClientCapabilities struct { // The client supports applying batch edits to the workspace by supporting // the request "workspace/applyEdit". ApplyEdit bool `json:"applyEdit,omitempty"` // WorkspaceEdit capabilities specific to `WorkspaceEdit`s. WorkspaceEdit *WorkspaceClientCapabilitiesWorkspaceEdit `json:"workspaceEdit,omitempty"` // DidChangeConfiguration capabilities specific to the `workspace/didChangeConfiguration` notification. DidChangeConfiguration *DidChangeConfigurationWorkspaceClientCapabilities `json:"didChangeConfiguration,omitempty"` // DidChangeWatchedFiles capabilities specific to the `workspace/didChangeWatchedFiles` notification. DidChangeWatchedFiles *DidChangeWatchedFilesWorkspaceClientCapabilities `json:"didChangeWatchedFiles,omitempty"` // Symbol capabilities specific to the "workspace/symbol" request. Symbol *WorkspaceSymbolClientCapabilities `json:"symbol,omitempty"` // ExecuteCommand capabilities specific to the "workspace/executeCommand" request. ExecuteCommand *ExecuteCommandClientCapabilities `json:"executeCommand,omitempty"` // WorkspaceFolders is the client has support for workspace folders. // // @since 3.6.0. WorkspaceFolders bool `json:"workspaceFolders,omitempty"` // Configuration is the client supports "workspace/configuration" requests. // // @since 3.6.0. Configuration bool `json:"configuration,omitempty"` // SemanticTokens is the capabilities specific to the semantic token requests scoped to the // workspace. // // @since 3.16.0. SemanticTokens *SemanticTokensWorkspaceClientCapabilities `json:"semanticTokens,omitempty"` // CodeLens is the Capabilities specific to the code lens requests scoped to the // workspace. // // @since 3.16.0. CodeLens *CodeLensWorkspaceClientCapabilities `json:"codeLens,omitempty"` // FileOperations is the client has support for file requests/notifications. // // @since 3.16.0. FileOperations *WorkspaceClientCapabilitiesFileOperations `json:"fileOperations,omitempty"` } // WorkspaceClientCapabilitiesWorkspaceEdit capabilities specific to "WorkspaceEdit"s. type WorkspaceClientCapabilitiesWorkspaceEdit struct { // DocumentChanges is the client supports versioned document changes in `WorkspaceEdit`s DocumentChanges bool `json:"documentChanges,omitempty"` // FailureHandling is the failure handling strategy of a client if applying the workspace edit // fails. // // Mostly FailureHandlingKind. FailureHandling string `json:"failureHandling,omitempty"` // ResourceOperations is the resource operations the client supports. Clients should at least // support "create", "rename" and "delete" files and folders. ResourceOperations []string `json:"resourceOperations,omitempty"` // NormalizesLineEndings whether the client normalizes line endings to the client specific // setting. // If set to `true` the client will normalize line ending characters // in a workspace edit to the client specific new line character(s). // // @since 3.16.0. NormalizesLineEndings bool `json:"normalizesLineEndings,omitempty"` // ChangeAnnotationSupport whether the client in general supports change annotations on text edits, // create file, rename file and delete file changes. // // @since 3.16.0. ChangeAnnotationSupport *WorkspaceClientCapabilitiesWorkspaceEditChangeAnnotationSupport `json:"changeAnnotationSupport,omitempty"` } // FailureHandlingKind is the kind of failure handling . type FailureHandlingKind string const ( // FailureHandlingKindAbort applying the workspace change is simply aborted if one of the changes provided // fails. All operations executed before the failing operation stay executed. FailureHandlingKindAbort FailureHandlingKind = "abort" // FailureHandlingKindTransactional all operations are executed transactional. That means they either all // succeed or no changes at all are applied to the workspace. FailureHandlingKindTransactional FailureHandlingKind = "transactional" // FailureHandlingKindTextOnlyTransactional if the workspace edit contains only textual file changes they are executed transactional. // If resource changes (create, rename or delete file) are part of the change the failure // handling strategy is abort. FailureHandlingKindTextOnlyTransactional FailureHandlingKind = "textOnlyTransactional" // FailureHandlingKindUndo the client tries to undo the operations already executed. But there is no // guarantee that this is succeeding. FailureHandlingKindUndo FailureHandlingKind = "undo" ) // WorkspaceClientCapabilitiesWorkspaceEditChangeAnnotationSupport is the ChangeAnnotationSupport of WorkspaceClientCapabilitiesWorkspaceEdit. // // @since 3.16.0. type WorkspaceClientCapabilitiesWorkspaceEditChangeAnnotationSupport struct { // GroupsOnLabel whether the client groups edits with equal labels into tree nodes, // for instance all edits labeled with "Changes in Strings" would // be a tree node. GroupsOnLabel bool `json:"groupsOnLabel,omitempty"` } // DidChangeConfigurationWorkspaceClientCapabilities capabilities specific to the "workspace/didChangeConfiguration" notification. // // @since 3.16.0. type DidChangeConfigurationWorkspaceClientCapabilities struct { // DynamicRegistration whether the did change configuration notification supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DidChangeWatchedFilesWorkspaceClientCapabilities capabilities specific to the "workspace/didChangeWatchedFiles" notification. // // @since 3.16.0. type DidChangeWatchedFilesWorkspaceClientCapabilities struct { // Did change watched files notification supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // WorkspaceSymbolClientCapabilities capabilities specific to the `workspace/symbol` request. // // WorkspaceSymbolClientCapabilities is the workspace symbol request is sent from the client to the server to // list project-wide symbols matching the query string. type WorkspaceSymbolClientCapabilities struct { // DynamicRegistration is the Symbol request supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // SymbolKindCapabilities is the specific capabilities for the SymbolKindCapabilities in the "workspace/symbol" request. SymbolKind *SymbolKindCapabilities `json:"symbolKind,omitempty"` // TagSupport is the client supports tags on `SymbolInformation`. // Clients supporting tags have to handle unknown tags gracefully. // // @since 3.16.0 TagSupport *TagSupportCapabilities `json:"tagSupport,omitempty"` } type SymbolKindCapabilities struct { // ValueSet is 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 `json:"valueSet,omitempty"` } type TagSupportCapabilities struct { // ValueSet is the tags supported by the client. ValueSet []SymbolTag `json:"valueSet,omitempty"` } // ExecuteCommandClientCapabilities capabilities specific to the "workspace/executeCommand" request. type ExecuteCommandClientCapabilities struct { // DynamicRegistration Execute command supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // SemanticTokensWorkspaceClientCapabilities capabilities specific to the "workspace/semanticToken" request. // // @since 3.16.0. type SemanticTokensWorkspaceClientCapabilities struct { // RefreshSupport whether the client implementation supports a refresh request sent from // the server to the client. // // Note that this event is global and will force the client to refresh all // semantic tokens currently shown. It should be used with absolute care // and is useful for situation where a server for example detect a project // wide change that requires such a calculation. RefreshSupport bool `json:"refreshSupport,omitempty"` } // CodeLensWorkspaceClientCapabilities capabilities specific to the "workspace/codeLens" request. // // @since 3.16.0. type CodeLensWorkspaceClientCapabilities struct { // RefreshSupport whether the client implementation supports a refresh request sent from the // server to the client. // // Note that this event is global and will force the client to refresh all // code lenses currently shown. It should be used with absolute care and is // useful for situation where a server for example detect a project wide // change that requires such a calculation. RefreshSupport bool `json:"refreshSupport,omitempty"` } // WorkspaceClientCapabilitiesFileOperations capabilities specific to the fileOperations. // // @since 3.16.0. type WorkspaceClientCapabilitiesFileOperations struct { // DynamicRegistration whether the client supports dynamic registration for file // requests/notifications. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // DidCreate is the client has support for sending didCreateFiles notifications. DidCreate bool `json:"didCreate,omitempty"` // WillCreate is the client has support for sending willCreateFiles requests. WillCreate bool `json:"willCreate,omitempty"` // DidRename is the client has support for sending didRenameFiles notifications. DidRename bool `json:"didRename,omitempty"` // WillRename is the client has support for sending willRenameFiles requests. WillRename bool `json:"willRename,omitempty"` // DidDelete is the client has support for sending didDeleteFiles notifications. DidDelete bool `json:"didDelete,omitempty"` // WillDelete is the client has support for sending willDeleteFiles requests. WillDelete bool `json:"willDelete,omitempty"` } // TextDocumentClientCapabilities Text document specific client capabilities. type TextDocumentClientCapabilities struct { // Synchronization defines which synchronization capabilities the client supports. Synchronization *TextDocumentSyncClientCapabilities `json:"synchronization,omitempty"` // Completion Capabilities specific to the "textDocument/completion". Completion *CompletionTextDocumentClientCapabilities `json:"completion,omitempty"` // Hover capabilities specific to the "textDocument/hover". Hover *HoverTextDocumentClientCapabilities `json:"hover,omitempty"` // SignatureHelp capabilities specific to the "textDocument/signatureHelp". SignatureHelp *SignatureHelpTextDocumentClientCapabilities `json:"signatureHelp,omitempty"` // Declaration capabilities specific to the "textDocument/declaration". Declaration *DeclarationTextDocumentClientCapabilities `json:"declaration,omitempty"` // Definition capabilities specific to the "textDocument/definition". // // @since 3.14.0. Definition *DefinitionTextDocumentClientCapabilities `json:"definition,omitempty"` // TypeDefinition capabilities specific to the "textDocument/typeDefinition". // // @since 3.6.0. TypeDefinition *TypeDefinitionTextDocumentClientCapabilities `json:"typeDefinition,omitempty"` // Implementation capabilities specific to the "textDocument/implementation". // // @since 3.6.0. Implementation *ImplementationTextDocumentClientCapabilities `json:"implementation,omitempty"` // References capabilities specific to the "textDocument/references". References *ReferencesTextDocumentClientCapabilities `json:"references,omitempty"` // DocumentHighlight capabilities specific to the "textDocument/documentHighlight". DocumentHighlight *DocumentHighlightClientCapabilities `json:"documentHighlight,omitempty"` // DocumentSymbol capabilities specific to the "textDocument/documentSymbol". DocumentSymbol *DocumentSymbolClientCapabilities `json:"documentSymbol,omitempty"` // CodeAction capabilities specific to the "textDocument/codeAction". CodeAction *CodeActionClientCapabilities `json:"codeAction,omitempty"` // CodeLens capabilities specific to the "textDocument/codeLens". CodeLens *CodeLensClientCapabilities `json:"codeLens,omitempty"` // DocumentLink capabilities specific to the "textDocument/documentLink". DocumentLink *DocumentLinkClientCapabilities `json:"documentLink,omitempty"` // ColorProvider capabilities specific to the "textDocument/documentColor" and the // "textDocument/colorPresentation" request. // // @since 3.6.0. ColorProvider *DocumentColorClientCapabilities `json:"colorProvider,omitempty"` // Formatting Capabilities specific to the "textDocument/formatting" request. Formatting *DocumentFormattingClientCapabilities `json:"formatting,omitempty"` // RangeFormatting Capabilities specific to the "textDocument/rangeFormatting" request. RangeFormatting *DocumentRangeFormattingClientCapabilities `json:"rangeFormatting,omitempty"` // OnTypeFormatting Capabilities specific to the "textDocument/onTypeFormatting" request. OnTypeFormatting *DocumentOnTypeFormattingClientCapabilities `json:"onTypeFormatting,omitempty"` // PublishDiagnostics capabilities specific to "textDocument/publishDiagnostics". PublishDiagnostics *PublishDiagnosticsClientCapabilities `json:"publishDiagnostics,omitempty"` // Rename capabilities specific to the "textDocument/rename". Rename *RenameClientCapabilities `json:"rename,omitempty"` // FoldingRange capabilities specific to "textDocument/foldingRange" requests. // // @since 3.10.0. FoldingRange *FoldingRangeClientCapabilities `json:"foldingRange,omitempty"` // SelectionRange capabilities specific to "textDocument/selectionRange" requests. // // @since 3.15.0. SelectionRange *SelectionRangeClientCapabilities `json:"selectionRange,omitempty"` // CallHierarchy capabilities specific to the various call hierarchy requests. // // @since 3.16.0. CallHierarchy *CallHierarchyClientCapabilities `json:"callHierarchy,omitempty"` // SemanticTokens capabilities specific to the various semantic token requests. // // @since 3.16.0. SemanticTokens *SemanticTokensClientCapabilities `json:"semanticTokens,omitempty"` // LinkedEditingRange capabilities specific to the "textDocument/linkedEditingRange" request. // // @since 3.16.0. LinkedEditingRange *LinkedEditingRangeClientCapabilities `json:"linkedEditingRange,omitempty"` // Moniker capabilities specific to the "textDocument/moniker" request. // // @since 3.16.0. Moniker *MonikerClientCapabilities `json:"moniker,omitempty"` } // TextDocumentSyncClientCapabilities defines which synchronization capabilities the client supports. type TextDocumentSyncClientCapabilities struct { // DynamicRegistration whether text document synchronization supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // WillSave is the client supports sending will save notifications. WillSave bool `json:"willSave,omitempty"` // WillSaveWaitUntil is 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 bool `json:"willSaveWaitUntil,omitempty"` // DidSave is the client supports did save notifications. DidSave bool `json:"didSave,omitempty"` } // CompletionTextDocumentClientCapabilities Capabilities specific to the "textDocument/completion". type CompletionTextDocumentClientCapabilities struct { // Whether completion supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // The client supports the following `CompletionItem` specific // capabilities. CompletionItem *CompletionTextDocumentClientCapabilitiesItem `json:"completionItem,omitempty"` CompletionItemKind *CompletionTextDocumentClientCapabilitiesItemKind `json:"completionItemKind,omitempty"` // ContextSupport is the client supports to send additional context information for a // `textDocument/completion` request. ContextSupport bool `json:"contextSupport,omitempty"` } // CompletionTextDocumentClientCapabilitiesItem is the client supports the following "CompletionItem" specific // capabilities. type CompletionTextDocumentClientCapabilitiesItem struct { // SnippetSupport 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 bool `json:"snippetSupport,omitempty"` // CommitCharactersSupport client supports commit characters on a completion item. CommitCharactersSupport bool `json:"commitCharactersSupport,omitempty"` // DocumentationFormat client supports the follow content formats for the documentation // property. The order describes the preferred format of the client. DocumentationFormat []MarkupKind `json:"documentationFormat,omitempty"` // DeprecatedSupport client supports the deprecated property on a completion item. DeprecatedSupport bool `json:"deprecatedSupport,omitempty"` // PreselectSupport client supports the preselect property on a completion item. PreselectSupport bool `json:"preselectSupport,omitempty"` // TagSupport is the client supports the tag property on a completion item. // // Clients supporting tags have to handle unknown tags gracefully. // Clients especially need to preserve unknown tags when sending // a completion item back to the server in a resolve call. // // @since 3.15.0. TagSupport *CompletionTextDocumentClientCapabilitiesItemTagSupport `json:"tagSupport,omitempty"` // InsertReplaceSupport client supports insert replace edit to control different behavior if // a completion item is inserted in the text or should replace text. // // @since 3.16.0. InsertReplaceSupport bool `json:"insertReplaceSupport,omitempty"` // ResolveSupport indicates which properties a client can resolve lazily on a // completion item. Before version 3.16.0 only the predefined properties // `documentation` and `details` could be resolved lazily. // // @since 3.16.0. ResolveSupport *CompletionTextDocumentClientCapabilitiesItemResolveSupport `json:"resolveSupport,omitempty"` // InsertTextModeSupport is the client supports the `insertTextMode` property on // a completion item to override the whitespace handling mode // as defined by the client (see `insertTextMode`). // // @since 3.16.0. InsertTextModeSupport *CompletionTextDocumentClientCapabilitiesItemInsertTextModeSupport `json:"insertTextModeSupport,omitempty"` } // CompletionTextDocumentClientCapabilitiesItemTagSupport specific capabilities for the "TagSupport" in the "textDocument/completion" request. // // @since 3.15.0. type CompletionTextDocumentClientCapabilitiesItemTagSupport struct { // ValueSet is the tags supported by the client. // // @since 3.15.0. ValueSet []CompletionItemTag `json:"valueSet,omitempty"` } // CompletionTextDocumentClientCapabilitiesItemResolveSupport specific capabilities for the ResolveSupport in the CompletionTextDocumentClientCapabilitiesItem. // // @since 3.16.0. type CompletionTextDocumentClientCapabilitiesItemResolveSupport struct { // Properties is the properties that a client can resolve lazily. Properties []string `json:"properties"` } // CompletionTextDocumentClientCapabilitiesItemInsertTextModeSupport specific capabilities for the InsertTextModeSupport in the CompletionTextDocumentClientCapabilitiesItem. // // @since 3.16.0. type CompletionTextDocumentClientCapabilitiesItemInsertTextModeSupport struct { // ValueSet is the tags supported by the client. // // @since 3.16.0. ValueSet []InsertTextMode `json:"valueSet,omitempty"` } // CompletionTextDocumentClientCapabilitiesItemKind specific capabilities for the "CompletionItemKind" in the "textDocument/completion" request. type CompletionTextDocumentClientCapabilitiesItemKind struct { // 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 `json:"valueSet,omitempty"` } // HoverTextDocumentClientCapabilities capabilities specific to the "textDocument/hover". type HoverTextDocumentClientCapabilities struct { // DynamicRegistration whether hover supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // ContentFormat is the client supports the follow content formats for the content // property. The order describes the preferred format of the client. ContentFormat []MarkupKind `json:"contentFormat,omitempty"` } // SignatureHelpTextDocumentClientCapabilities capabilities specific to the "textDocument/signatureHelp". type SignatureHelpTextDocumentClientCapabilities struct { // DynamicRegistration whether signature help supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // SignatureInformation is the client supports the following "SignatureInformation" // specific properties. SignatureInformation *TextDocumentClientCapabilitiesSignatureInformation `json:"signatureInformation,omitempty"` // ContextSupport is the client supports to send additional context information for a "textDocument/signatureHelp" request. // // A client that opts into contextSupport will also support the "retriggerCharacters" on "SignatureHelpOptions". // // @since 3.15.0. ContextSupport bool `json:"contextSupport,omitempty"` } // TextDocumentClientCapabilitiesSignatureInformation is the client supports the following "SignatureInformation" // specific properties. type TextDocumentClientCapabilitiesSignatureInformation struct { // DocumentationFormat is the client supports the follow content formats for the documentation // property. The order describes the preferred format of the client. DocumentationFormat []MarkupKind `json:"documentationFormat,omitempty"` // ParameterInformation is the Client capabilities specific to parameter information. ParameterInformation *TextDocumentClientCapabilitiesParameterInformation `json:"parameterInformation,omitempty"` // ActiveParameterSupport is the client supports the `activeParameter` property on // `SignatureInformation` literal. // // @since 3.16.0. ActiveParameterSupport bool `json:"activeParameterSupport,omitempty"` } // TextDocumentClientCapabilitiesParameterInformation is the client capabilities specific to parameter information. type TextDocumentClientCapabilitiesParameterInformation struct { // LabelOffsetSupport is the client supports processing label offsets instead of a // simple label string. // // @since 3.14.0. LabelOffsetSupport bool `json:"labelOffsetSupport,omitempty"` } // DeclarationTextDocumentClientCapabilities capabilities specific to the "textDocument/declaration". type DeclarationTextDocumentClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` // LinkSupport is the client supports additional metadata in the form of declaration links. // // @since 3.14.0. LinkSupport bool `json:"linkSupport,omitempty"` } // DefinitionTextDocumentClientCapabilities capabilities specific to the "textDocument/definition". // // @since 3.14.0. type DefinitionTextDocumentClientCapabilities struct { // DynamicRegistration whether definition supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // LinkSupport is the client supports additional metadata in the form of definition links. LinkSupport bool `json:"linkSupport,omitempty"` } // TypeDefinitionTextDocumentClientCapabilities capabilities specific to the "textDocument/typeDefinition". // // @since 3.6.0. type TypeDefinitionTextDocumentClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` // LinkSupport is the client supports additional metadata in the form of definition links. // // @since 3.14.0 LinkSupport bool `json:"linkSupport,omitempty"` } // ImplementationTextDocumentClientCapabilities capabilities specific to the "textDocument/implementation". // // @since 3.6.0. type ImplementationTextDocumentClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` // LinkSupport is the client supports additional metadata in the form of definition links. // // @since 3.14.0 LinkSupport bool `json:"linkSupport,omitempty"` } // ReferencesTextDocumentClientCapabilities capabilities specific to the "textDocument/references". type ReferencesTextDocumentClientCapabilities struct { // DynamicRegistration whether references supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DocumentHighlightClientCapabilities capabilities specific to the "textDocument/documentHighlight". type DocumentHighlightClientCapabilities struct { // DynamicRegistration Whether document highlight supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DocumentSymbolClientCapabilities capabilities specific to the "textDocument/documentSymbol". type DocumentSymbolClientCapabilities struct { // DynamicRegistration whether document symbol supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // SymbolKind specific capabilities for the "SymbolKindCapabilities". SymbolKind *SymbolKindCapabilities `json:"symbolKind,omitempty"` // HierarchicalDocumentSymbolSupport is the client support hierarchical document symbols. HierarchicalDocumentSymbolSupport bool `json:"hierarchicalDocumentSymbolSupport,omitempty"` // TagSupport is the client supports tags on "SymbolInformation". Tags are supported on // "DocumentSymbol" if "HierarchicalDocumentSymbolSupport" is set to true. // Clients supporting tags have to handle unknown tags gracefully. // // @since 3.16.0. TagSupport *DocumentSymbolClientCapabilitiesTagSupport `json:"tagSupport,omitempty"` // LabelSupport is the client supports an additional label presented in the UI when // registering a document symbol provider. // // @since 3.16.0. LabelSupport bool `json:"labelSupport,omitempty"` } // DocumentSymbolClientCapabilitiesTagSupport TagSupport in the DocumentSymbolClientCapabilities. // // @since 3.16.0. type DocumentSymbolClientCapabilitiesTagSupport struct { // ValueSet is the tags supported by the client. ValueSet []SymbolTag `json:"valueSet"` } // CodeActionClientCapabilities capabilities specific to the "textDocument/codeAction". type CodeActionClientCapabilities struct { // DynamicRegistration whether code action supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // CodeActionLiteralSupport is the client support code action literals as a valid // response of the "textDocument/codeAction" request. // // @since 3.8.0 CodeActionLiteralSupport *CodeActionClientCapabilitiesLiteralSupport `json:"codeActionLiteralSupport,omitempty"` // IsPreferredSupport whether code action supports the "isPreferred" property. // // @since 3.15.0. IsPreferredSupport bool `json:"isPreferredSupport,omitempty"` // DisabledSupport whether code action supports the `disabled` property. // // @since 3.16.0. DisabledSupport bool `json:"disabledSupport,omitempty"` // DataSupport whether code action supports the `data` property which is // preserved between a `textDocument/codeAction` and a // `codeAction/resolve` request. // // @since 3.16.0. DataSupport bool `json:"dataSupport,omitempty"` // ResolveSupport whether the client supports resolving additional code action // properties via a separate `codeAction/resolve` request. // // @since 3.16.0. ResolveSupport *CodeActionClientCapabilitiesResolveSupport `json:"resolveSupport,omitempty"` // HonorsChangeAnnotations whether the client honors the change annotations in // text edits and resource operations returned via the // `CodeAction#edit` property by for example presenting // the workspace edit in the user interface and asking // for confirmation. // // @since 3.16.0. HonorsChangeAnnotations bool `json:"honorsChangeAnnotations,omitempty"` } // CodeActionClientCapabilitiesLiteralSupport is the client support code action literals as a valid response of the "textDocument/codeAction" request. type CodeActionClientCapabilitiesLiteralSupport struct { // CodeActionKind is the code action kind is support with the following value // set. CodeActionKind *CodeActionClientCapabilitiesKind `json:"codeActionKind"` } // CodeActionClientCapabilitiesKind is the code action kind is support with the following value set. type CodeActionClientCapabilitiesKind struct { // ValueSet is 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 `json:"valueSet"` } // CodeActionClientCapabilitiesResolveSupport ResolveSupport in the CodeActionClientCapabilities. // // @since 3.16.0. type CodeActionClientCapabilitiesResolveSupport struct { // Properties is the properties that a client can resolve lazily. Properties []string `json:"properties"` } // CodeLensClientCapabilities capabilities specific to the "textDocument/codeLens". type CodeLensClientCapabilities struct { // DynamicRegistration Whether code lens supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DocumentLinkClientCapabilities capabilities specific to the "textDocument/documentLink". type DocumentLinkClientCapabilities struct { // DynamicRegistration whether document link supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // TooltipSupport whether the client supports the "tooltip" property on "DocumentLink". // // @since 3.15.0. TooltipSupport bool `json:"tooltipSupport,omitempty"` } // DocumentColorClientCapabilities capabilities specific to the "textDocument/documentColor" and the // "textDocument/colorPresentation" request. // // @since 3.6.0. type DocumentColorClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` } // DocumentFormattingClientCapabilities capabilities specific to the "textDocument/formatting". type DocumentFormattingClientCapabilities struct { // DynamicRegistration whether code lens supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DocumentRangeFormattingClientCapabilities capabilities specific to the "textDocument/rangeFormatting". type DocumentRangeFormattingClientCapabilities struct { // DynamicRegistration whether code lens supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // DocumentOnTypeFormattingClientCapabilities capabilities specific to the "textDocument/onTypeFormatting". type DocumentOnTypeFormattingClientCapabilities struct { // DynamicRegistration whether code lens supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // PublishDiagnosticsClientCapabilities capabilities specific to "textDocument/publishDiagnostics". type PublishDiagnosticsClientCapabilities struct { // RelatedInformation whether the clients accepts diagnostics with related information. RelatedInformation bool `json:"relatedInformation,omitempty"` // TagSupport clients supporting tags have to handle unknown tags gracefully. // // @since 3.15.0. TagSupport *PublishDiagnosticsClientCapabilitiesTagSupport `json:"tagSupport,omitempty"` // VersionSupport whether the client interprets the version property of the // "textDocument/publishDiagnostics" notification`s parameter. // // @since 3.15.0. VersionSupport bool `json:"versionSupport,omitempty"` // CodeDescriptionSupport client supports a codeDescription property // // @since 3.16.0. CodeDescriptionSupport bool `json:"codeDescriptionSupport,omitempty"` // DataSupport whether code action supports the `data` property which is // preserved between a `textDocument/publishDiagnostics` and // `textDocument/codeAction` request. // // @since 3.16.0. DataSupport bool `json:"dataSupport,omitempty"` } // PublishDiagnosticsClientCapabilitiesTagSupport is the client capacity of TagSupport. // // @since 3.15.0. type PublishDiagnosticsClientCapabilitiesTagSupport struct { // ValueSet is the tags supported by the client. ValueSet []DiagnosticTag `json:"valueSet"` } // RenameClientCapabilities capabilities specific to the "textDocument/rename". type RenameClientCapabilities struct { // DynamicRegistration whether rename supports dynamic registration. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` // PrepareSupport is the client supports testing for validity of rename operations // before execution. PrepareSupport bool `json:"prepareSupport,omitempty"` // PrepareSupportDefaultBehavior client supports the default behavior result // (`{ defaultBehavior: boolean }`). // // The value indicates the default behavior used by the // client. // // @since 3.16.0. PrepareSupportDefaultBehavior PrepareSupportDefaultBehavior `json:"prepareSupportDefaultBehavior,omitempty"` // HonorsChangeAnnotations whether th client honors the change annotations in // text edits and resource operations returned via the // rename request's workspace edit by for example presenting // the workspace edit in the user interface and asking // for confirmation. // // @since 3.16.0. HonorsChangeAnnotations bool `json:"honorsChangeAnnotations,omitempty"` } // PrepareSupportDefaultBehavior default behavior of PrepareSupport. // // @since 3.16.0. type PrepareSupportDefaultBehavior float64 // list of PrepareSupportDefaultBehavior. const ( // PrepareSupportDefaultBehaviorIdentifier is the client's default behavior is to select the identifier // according the to language's syntax rule. PrepareSupportDefaultBehaviorIdentifier PrepareSupportDefaultBehavior = 1 ) // String returns a string representation of the PrepareSupportDefaultBehavior. func (k PrepareSupportDefaultBehavior) String() string { switch k { case PrepareSupportDefaultBehaviorIdentifier: return "Identifier" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // FoldingRangeClientCapabilities capabilities specific to "textDocument/foldingRange" requests. // // @since 3.10.0. type FoldingRangeClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` // RangeLimit is 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 uint32 `json:"rangeLimit,omitempty"` // LineFoldingOnly 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 bool `json:"lineFoldingOnly,omitempty"` } // SelectionRangeClientCapabilities capabilities specific to "textDocument/selectionRange" requests. // // @since 3.16.0. type SelectionRangeClientCapabilities struct { // DynamicRegistration whether implementation supports dynamic registration for selection range providers. If this is set to `true` // the client supports the new "(SelectionRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)" // return value for the corresponding server capability as well. DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // CallHierarchyClientCapabilities capabilities specific to "textDocument/callHierarchy" requests. // // @since 3.16.0. type CallHierarchyClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` } // SemanticTokensClientCapabilities capabilities specific to the "textDocument.semanticTokens" request. // // @since 3.16.0. type SemanticTokensClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` // Requests which requests the client supports and might send to the server // depending on the server's capability. Please note that clients might not // show semantic tokens or degrade some of the user experience if a range // or full request is advertised by the client but not provided by the // server. If for example the client capability `requests.full` and // `request.range` are both set to true but the server only provides a // range provider the client might not render a minimap correctly or might // even decide to not show any semantic tokens at all. Requests SemanticTokensWorkspaceClientCapabilitiesRequests `json:"requests"` // TokenTypes is the token types that the client supports. TokenTypes []string `json:"tokenTypes"` // TokenModifiers is the token modifiers that the client supports. TokenModifiers []string `json:"tokenModifiers"` // Formats is the formats the clients supports. Formats []TokenFormat `json:"formats"` // OverlappingTokenSupport whether the client supports tokens that can overlap each other. OverlappingTokenSupport bool `json:"overlappingTokenSupport,omitempty"` // MultilineTokenSupport whether the client supports tokens that can span multiple lines. MultilineTokenSupport bool `json:"multilineTokenSupport,omitempty"` } // SemanticTokensWorkspaceClientCapabilitiesRequests capabilities specific to the "textDocument/semanticTokens/xxx" request. // // @since 3.16.0. type SemanticTokensWorkspaceClientCapabilitiesRequests struct { // Range is the client will send the "textDocument/semanticTokens/range" request // if the server provides a corresponding handler. Range bool `json:"range,omitempty"` // Full is the client will send the "textDocument/semanticTokens/full" request // if the server provides a corresponding handler. The client will send the // `textDocument/semanticTokens/full/delta` request if the server provides a // corresponding handler. Full interface{} `json:"full,omitempty"` } // LinkedEditingRangeClientCapabilities capabilities specific to "textDocument/linkedEditingRange" requests. // // @since 3.16.0. type LinkedEditingRangeClientCapabilities struct { // DynamicRegistration 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 bool `json:"dynamicRegistration,omitempty"` } // MonikerClientCapabilities capabilities specific to the "textDocument/moniker" request. // // @since 3.16.0. type MonikerClientCapabilities struct { // DynamicRegistration 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 whether implementation supports dynamic registration. If this is set to DynamicRegistration bool `json:"dynamicRegistration,omitempty"` } // WindowClientCapabilities represents a WindowClientCapabilities specific client capabilities. // // @since 3.15.0. type WindowClientCapabilities struct { // WorkDoneProgress whether client supports handling progress notifications. If set servers are allowed to // report in "workDoneProgress" property in the request specific server capabilities. // // @since 3.15.0. WorkDoneProgress bool `json:"workDoneProgress,omitempty"` // ShowMessage capabilities specific to the showMessage request. // // @since 3.16.0. ShowMessage *ShowMessageRequestClientCapabilities `json:"showMessage,omitempty"` // ShowDocument client capabilities for the show document request. // // @since 3.16.0. ShowDocument *ShowDocumentClientCapabilities `json:"showDocument,omitempty"` } // ShowMessageRequestClientCapabilities show message request client capabilities. // // @since 3.16.0. type ShowMessageRequestClientCapabilities struct { // MessageActionItem capabilities specific to the "MessageActionItem" type. MessageActionItem *ShowMessageRequestClientCapabilitiesMessageActionItem `json:"messageActionItem,omitempty"` } // ShowMessageRequestClientCapabilitiesMessageActionItem capabilities specific to the "MessageActionItem" type. // // @since 3.16.0. type ShowMessageRequestClientCapabilitiesMessageActionItem struct { // AdditionalPropertiesSupport whether the client supports additional attributes which // are preserved and sent back to the server in the // request's response. AdditionalPropertiesSupport bool `json:"additionalPropertiesSupport,omitempty"` } // ShowDocumentClientCapabilities client capabilities for the show document request. // // @since 3.16.0. type ShowDocumentClientCapabilities struct { // Support is the client has support for the show document // request. Support bool `json:"support"` } // GeneralClientCapabilities represents a General specific client capabilities. // // @since 3.16.0. type GeneralClientCapabilities struct { // RegularExpressions is the client capabilities specific to regular expressions. // // @since 3.16.0. RegularExpressions *RegularExpressionsClientCapabilities `json:"regularExpressions,omitempty"` // Markdown client capabilities specific to the client's markdown parser. // // @since 3.16.0. Markdown *MarkdownClientCapabilities `json:"markdown,omitempty"` } // RegularExpressionsClientCapabilities represents a client capabilities specific to regular expressions. // // The following features from the ECMAScript 2020 regular expression specification are NOT mandatory for a client: // // Assertions // Lookahead assertion, Negative lookahead assertion, lookbehind assertion, negative lookbehind assertion. // Character classes // Matching control characters using caret notation (e.g. "\cX") and matching UTF-16 code units (e.g. "\uhhhh"). // Group and ranges // Named capturing groups. // Unicode property escapes // None of the features needs to be supported. // // The only regular expression flag that a client needs to support is "i" to specify a case insensitive search. // // @since 3.16.0. type RegularExpressionsClientCapabilities struct { // Engine is the engine's name. // // Well known engine name is "ECMAScript". // https://tc39.es/ecma262/#sec-regexp-regular-expression-objects // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions Engine string `json:"engine"` // Version is the engine's version. // // Well known engine version is "ES2020". // https://tc39.es/ecma262/#sec-regexp-regular-expression-objects // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions Version string `json:"version,omitempty"` } // MarkdownClientCapabilities represents a client capabilities specific to the used markdown parser. // // @since 3.16.0. type MarkdownClientCapabilities struct { // Parser is the name of the parser. Parser string `json:"parser"` // version is the version of the parser. Version string `json:"version,omitempty"` }