// SPDX-FileCopyrightText: 2019 The Go Language Server Authors // SPDX-License-Identifier: BSD-3-Clause package protocol import ( "strconv" ) // CompletionParams params of Completion request. type CompletionParams struct { TextDocumentPositionParams WorkDoneProgressParams PartialResultParams // Context is the completion context. This is only available if the client specifies // to send this using `ClientCapabilities.textDocument.completion.contextSupport === true` Context *CompletionContext `json:"context,omitempty"` } // CompletionTriggerKind how a completion was triggered. type CompletionTriggerKind float64 const ( // CompletionTriggerKindInvoked completion was triggered by typing an identifier (24x7 code // complete), manual invocation (e.g Ctrl+Space) or via API. CompletionTriggerKindInvoked CompletionTriggerKind = 1 // CompletionTriggerKindTriggerCharacter completion was triggered by a trigger character specified by // the `triggerCharacters` properties of the `CompletionRegistrationOptions`. CompletionTriggerKindTriggerCharacter CompletionTriggerKind = 2 // CompletionTriggerKindTriggerForIncompleteCompletions completion was re-triggered as the current completion list is incomplete. CompletionTriggerKindTriggerForIncompleteCompletions CompletionTriggerKind = 3 ) // String implements fmt.Stringer. func (k CompletionTriggerKind) String() string { switch k { case CompletionTriggerKindInvoked: return "Invoked" case CompletionTriggerKindTriggerCharacter: return "TriggerCharacter" case CompletionTriggerKindTriggerForIncompleteCompletions: return "TriggerForIncompleteCompletions" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // CompletionContext contains additional information about the context in which a completion request is triggered. type CompletionContext struct { // TriggerCharacter is the trigger character (a single character) that has trigger code complete. // Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter` TriggerCharacter string `json:"triggerCharacter,omitempty"` // TriggerKind how the completion was triggered. TriggerKind CompletionTriggerKind `json:"triggerKind"` } // CompletionList represents a collection of [completion items](#CompletionItem) to be presented // in the editor. type CompletionList struct { // IsIncomplete this list it not complete. Further typing should result in recomputing // this list. IsIncomplete bool `json:"isIncomplete"` // Items is the completion items. Items []CompletionItem `json:"items"` } // InsertTextFormat defines whether the insert text in a completion item should be interpreted as // plain text or a snippet. type InsertTextFormat float64 const ( // InsertTextFormatPlainText is the primary text to be inserted is treated as a plain string. InsertTextFormatPlainText InsertTextFormat = 1 // InsertTextFormatSnippet is 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. InsertTextFormatSnippet InsertTextFormat = 2 ) // String implements fmt.Stringer. func (tf InsertTextFormat) String() string { switch tf { case InsertTextFormatPlainText: return "PlainText" case InsertTextFormatSnippet: return "Snippet" default: return strconv.FormatFloat(float64(tf), 'f', -10, 64) } } // InsertReplaceEdit is a special text edit to provide an insert and a replace operation. // // @since 3.16.0. type InsertReplaceEdit struct { // NewText is the string to be inserted. NewText string `json:"newText"` // Insert is the range if the insert is requested. Insert Range `json:"insert"` // Replace is the range if the replace is requested. Replace Range `json:"replace"` } // InsertTextMode how whitespace and indentation is handled during completion // item insertion. // // @since 3.16.0. type InsertTextMode float64 const ( // AsIs is the insertion or replace strings is taken as it is. If the // value is multi line the lines below the cursor will be // inserted using the indentation defined in the string value. // The client will not apply any kind of adjustments to the // string. InsertTextModeAsIs InsertTextMode = 1 // AdjustIndentation is the editor adjusts leading whitespace of new lines so that // they match the indentation up to the cursor of the line for // which the item is accepted. // // Consider a line like this: <2tabs><3tabs>foo. Accepting a // multi line completion item is indented using 2 tabs and all // following lines inserted will be indented using 2 tabs as well. InsertTextModeAdjustIndentation InsertTextMode = 2 ) // String returns a string representation of the InsertTextMode. func (k InsertTextMode) String() string { switch k { case InsertTextModeAsIs: return "AsIs" case InsertTextModeAdjustIndentation: return "AdjustIndentation" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // CompletionItem item of CompletionList. type CompletionItem struct { // AdditionalTextEdits an optional array of additional text edits that are applied when // selecting this completion. Edits must not overlap (including the same insert position) // with the main edit nor with themselves. // // Additional text edits should be used to change text unrelated to the current cursor position // (for example adding an import statement at the top of the file if the completion item will // insert an unqualified type). AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"` // Command an optional command that is executed *after* inserting this completion. *Note* that // additional modifications to the current document should be described with the // additionalTextEdits-property. Command *Command `json:"command,omitempty"` // CommitCharacters an optional set of characters that when pressed while this completion is active will accept it first and // then type that character. *Note* that all commit characters should have `length=1` and that superfluous // characters will be ignored. CommitCharacters []string `json:"commitCharacters,omitempty"` // Tags is the tag for this completion item. // // @since 3.15.0. Tags []CompletionItemTag `json:"tags,omitempty"` // Data an data entry field that is preserved on a completion item between // a completion and a completion resolve request. Data interface{} `json:"data,omitempty"` // Deprecated indicates if this item is deprecated. Deprecated bool `json:"deprecated,omitempty"` // Detail a human-readable string with additional information // about this item, like type or symbol information. Detail string `json:"detail,omitempty"` // Documentation a human-readable string that represents a doc-comment. Documentation interface{} `json:"documentation,omitempty"` // FilterText a string that should be used when filtering a set of // completion items. When `falsy` the label is used. FilterText string `json:"filterText,omitempty"` // InsertText a string that should be inserted into a document when selecting // this completion. When `falsy` the label is used. // // The `insertText` is subject to interpretation by the client side. // Some tools might not take the string literally. For example // VS Code when code complete is requested in this example `con` // and a completion item with an `insertText` of `console` is provided it // will only insert `sole`. Therefore it is recommended to use `textEdit` instead // since it avoids additional client side interpretation. InsertText string `json:"insertText,omitempty"` // InsertTextFormat is the format of the insert text. The format applies to both the `insertText` property // and the `newText` property of a provided `textEdit`. InsertTextFormat InsertTextFormat `json:"insertTextFormat,omitempty"` // InsertTextMode how whitespace and indentation is handled during completion // item insertion. If not provided the client's default value depends on // the `textDocument.completion.insertTextMode` client capability. // // @since 3.16.0. InsertTextMode InsertTextMode `json:"insertTextMode,omitempty"` // Kind is the kind of this completion item. Based of the kind // an icon is chosen by the editor. Kind CompletionItemKind `json:"kind,omitempty"` // Label is the label of this completion item. By default // also the text that is inserted when selecting // this completion. Label string `json:"label"` // Preselect select this item when showing. // // *Note* that only one completion item can be selected and that the // tool / client decides which item that is. The rule is that the *first* // item of those that match best is selected. Preselect bool `json:"preselect,omitempty"` // SortText a string that should be used when comparing this item // with other items. When `falsy` the label is used. SortText string `json:"sortText,omitempty"` // TextEdit an edit which is applied to a document when selecting this completion. When an edit is provided the value of // `insertText` is ignored. // // NOTE: The range of the edit must be a single line range and it must contain the position at which completion // has been requested. // // Most editors support two different operations when accepting a completion // item. One is to insert a completion text and the other is to replace an // existing text with a completion text. Since this can usually not be // predetermined by a server it can report both ranges. Clients need to // signal support for `InsertReplaceEdits` via the // "textDocument.completion.insertReplaceSupport" client capability // property. // // NOTE 1: The text edit's range as well as both ranges from an insert // replace edit must be a [single line] and they must contain the position // at which completion has been requested. // // NOTE 2: If an "InsertReplaceEdit" is returned the edit's insert range // must be a prefix of the edit's replace range, that means it must be // contained and starting at the same position. // // @since 3.16.0 additional type "InsertReplaceEdit". TextEdit *TextEdit `json:"textEdit,omitempty"` // *TextEdit | *InsertReplaceEdit } // CompletionItemKind is 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. type CompletionItemKind float64 const ( // CompletionItemKindText text completion kind. CompletionItemKindText CompletionItemKind = 1 // CompletionItemKindMethod method completion kind. CompletionItemKindMethod CompletionItemKind = 2 // CompletionItemKindFunction function completion kind. CompletionItemKindFunction CompletionItemKind = 3 // CompletionItemKindConstructor constructor completion kind. CompletionItemKindConstructor CompletionItemKind = 4 // CompletionItemKindField field completion kind. CompletionItemKindField CompletionItemKind = 5 // CompletionItemKindVariable variable completion kind. CompletionItemKindVariable CompletionItemKind = 6 // CompletionItemKindClass class completion kind. CompletionItemKindClass CompletionItemKind = 7 // CompletionItemKindInterface interface completion kind. CompletionItemKindInterface CompletionItemKind = 8 // CompletionItemKindModule module completion kind. CompletionItemKindModule CompletionItemKind = 9 // CompletionItemKindProperty property completion kind. CompletionItemKindProperty CompletionItemKind = 10 // CompletionItemKindUnit unit completion kind. CompletionItemKindUnit CompletionItemKind = 11 // CompletionItemKindValue value completion kind. CompletionItemKindValue CompletionItemKind = 12 // CompletionItemKindEnum enum completion kind. CompletionItemKindEnum CompletionItemKind = 13 // CompletionItemKindKeyword keyword completion kind. CompletionItemKindKeyword CompletionItemKind = 14 // CompletionItemKindSnippet snippet completion kind. CompletionItemKindSnippet CompletionItemKind = 15 // CompletionItemKindColor color completion kind. CompletionItemKindColor CompletionItemKind = 16 // CompletionItemKindFile file completion kind. CompletionItemKindFile CompletionItemKind = 17 // CompletionItemKindReference reference completion kind. CompletionItemKindReference CompletionItemKind = 18 // CompletionItemKindFolder folder completion kind. CompletionItemKindFolder CompletionItemKind = 19 // CompletionItemKindEnumMember enum member completion kind. CompletionItemKindEnumMember CompletionItemKind = 20 // CompletionItemKindConstant constant completion kind. CompletionItemKindConstant CompletionItemKind = 21 // CompletionItemKindStruct struct completion kind. CompletionItemKindStruct CompletionItemKind = 22 // CompletionItemKindEvent event completion kind. CompletionItemKindEvent CompletionItemKind = 23 // CompletionItemKindOperator operator completion kind. CompletionItemKindOperator CompletionItemKind = 24 // CompletionItemKindTypeParameter type parameter completion kind. CompletionItemKindTypeParameter CompletionItemKind = 25 ) // String implements fmt.Stringer. //nolint:cyclop func (k CompletionItemKind) String() string { switch k { case CompletionItemKindText: return "Text" case CompletionItemKindMethod: return "Method" case CompletionItemKindFunction: return "Function" case CompletionItemKindConstructor: return "Constructor" case CompletionItemKindField: return "Field" case CompletionItemKindVariable: return "Variable" case CompletionItemKindClass: return "Class" case CompletionItemKindInterface: return "Interface" case CompletionItemKindModule: return "Module" case CompletionItemKindProperty: return "Property" case CompletionItemKindUnit: return "Unit" case CompletionItemKindValue: return "Value" case CompletionItemKindEnum: return "Enum" case CompletionItemKindKeyword: return "Keyword" case CompletionItemKindSnippet: return "Snippet" case CompletionItemKindColor: return "Color" case CompletionItemKindFile: return "File" case CompletionItemKindReference: return "Reference" case CompletionItemKindFolder: return "Folder" case CompletionItemKindEnumMember: return "EnumMember" case CompletionItemKindConstant: return "Constant" case CompletionItemKindStruct: return "Struct" case CompletionItemKindEvent: return "Event" case CompletionItemKindOperator: return "Operator" case CompletionItemKindTypeParameter: return "TypeParameter" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // CompletionItemTag completion item tags are extra annotations that tweak the rendering of a completion // item. // // @since 3.15.0. type CompletionItemTag float64 // list of CompletionItemTag. const ( // CompletionItemTagDeprecated is the render a completion as obsolete, usually using a strike-out. CompletionItemTagDeprecated CompletionItemTag = 1 ) // String returns a string representation of the type. func (c CompletionItemTag) String() string { switch c { case CompletionItemTagDeprecated: return "Deprecated" default: return strconv.FormatFloat(float64(c), 'f', -10, 64) } } // CompletionRegistrationOptions CompletionRegistration options. type CompletionRegistrationOptions struct { TextDocumentRegistrationOptions // TriggerCharacters most tools trigger completion request automatically without explicitly requesting // it using a keyboard shortcut (e.g. Ctrl+Space). Typically they do so when the user // starts to type an identifier. For example if the user types `c` in a JavaScript file // code complete will automatically pop up present `console` besides others as a // completion item. Characters that make up identifiers don't need to be listed here. // // If code complete should automatically be trigger on characters not being valid inside // an identifier (for example `.` in JavaScript) list them in `triggerCharacters`. TriggerCharacters []string `json:"triggerCharacters,omitempty"` // ResolveProvider is the server provides support to resolve additional // information for a completion item. ResolveProvider bool `json:"resolveProvider,omitempty"` } // HoverParams params of Hover request. // // @since 3.15.0. type HoverParams struct { TextDocumentPositionParams WorkDoneProgressParams } // Hover is the result of a hover request. type Hover struct { // Contents is the hover's content Contents MarkupContent `json:"contents"` // Range an optional range is a range inside a text document // that is used to visualize a hover, e.g. by changing the background color. Range *Range `json:"range,omitempty"` } // SignatureHelpParams params of SignatureHelp request. // // @since 3.15.0. type SignatureHelpParams struct { TextDocumentPositionParams WorkDoneProgressParams // context is the signature help context. // // This is only available if the client specifies to send this using the // client capability `textDocument.signatureHelp.contextSupport === true`. // // @since 3.15.0. Context *SignatureHelpContext `json:"context,omitempty"` } // SignatureHelpTriggerKind is the how a signature help was triggered. // // @since 3.15.0. type SignatureHelpTriggerKind float64 // list of SignatureHelpTriggerKind. const ( // SignatureHelpTriggerKindInvoked is the signature help was invoked manually by the user or by a command. SignatureHelpTriggerKindInvoked SignatureHelpTriggerKind = 1 // SignatureHelpTriggerKindTriggerCharacter is the signature help was triggered by a trigger character. SignatureHelpTriggerKindTriggerCharacter SignatureHelpTriggerKind = 2 // SignatureHelpTriggerKindContentChange is the signature help was triggered by the cursor moving or // by the document content changing. SignatureHelpTriggerKindContentChange SignatureHelpTriggerKind = 3 ) // String returns a string representation of the type. func (s SignatureHelpTriggerKind) String() string { switch s { case SignatureHelpTriggerKindInvoked: return "Invoked" case SignatureHelpTriggerKindTriggerCharacter: return "TriggerCharacter" case SignatureHelpTriggerKindContentChange: return "ContentChange" default: return strconv.FormatFloat(float64(s), 'f', -10, 64) } } // SignatureHelpContext is the additional information about the context in which a // signature help request was triggered. // // @since 3.15.0. type SignatureHelpContext struct { // TriggerKind is the action that caused signature help to be triggered. TriggerKind SignatureHelpTriggerKind `json:"triggerKind"` // Character that caused signature help to be triggered. // // This is undefined when // TriggerKind != SignatureHelpTriggerKindTriggerCharacter TriggerCharacter string `json:"triggerCharacter,omitempty"` // IsRetrigger is the `true` if signature help was already showing when it was triggered. // // Retriggers occur when the signature help is already active and can be // caused by actions such as typing a trigger character, a cursor move, // or document content changes. IsRetrigger bool `json:"isRetrigger"` // ActiveSignatureHelp is the currently active SignatureHelp. // // The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field // updated based on the user navigating through available signatures. ActiveSignatureHelp *SignatureHelp `json:"activeSignatureHelp,omitempty"` } // SignatureHelp signature help represents the signature of something // callable. There can be multiple signature but only one // active and only one active parameter. type SignatureHelp struct { // Signatures one or more signatures. Signatures []SignatureInformation `json:"signatures"` // ActiveParameter is the active parameter of the active signature. If omitted or the value // lies outside the range of `signatures[activeSignature].parameters` // defaults to 0 if the active signature has parameters. If // the active signature has no parameters it is ignored. // In future version of the protocol this property might become // mandatory to better express the active parameter if the // active signature does have any. ActiveParameter uint32 `json:"activeParameter,omitempty"` // ActiveSignature is the active signature. If omitted or the value lies outside the // range of `signatures` the value defaults to zero or is ignored if // `signatures.length === 0`. Whenever possible implementors should // make an active decision about the active signature and shouldn't // rely on a default value. // In future version of the protocol this property might become // mandatory to better express this. ActiveSignature uint32 `json:"activeSignature,omitempty"` } // SignatureInformation is the client supports the following `SignatureInformation` // specific properties. type SignatureInformation struct { // Label is the label of this signature. Will be shown in // the UI. // // @since 3.16.0. Label string `json:"label"` // Documentation is the human-readable doc-comment of this signature. Will be shown // in the UI but can be omitted. // // @since 3.16.0. Documentation interface{} `json:"documentation,omitempty"` // string | *MarkupContent // Parameters is the parameters of this signature. // // @since 3.16.0. Parameters []ParameterInformation `json:"parameters,omitempty"` // ActiveParameterSupport is the client supports the `activeParameter` property on // `SignatureInformation` literal. // // @since 3.16.0. ActiveParameter uint32 `json:"activeParameter,omitempty"` } // ParameterInformation represents a parameter of a callable-signature. A parameter can // have a label and a doc-comment. type ParameterInformation struct { // Label is the label of this parameter information. // // Either a string or an inclusive start and exclusive end offsets within its containing // signature label. (see SignatureInformation.label). The offsets are based on a UTF-16 // string representation as "Position" and "Range" does. // // *Note*: a label of type string should be a substring of its containing signature label. // Its intended use case is to highlight the parameter label part in the "SignatureInformation.label". Label string `json:"label"` // string | [uint32, uint32] // Documentation is the human-readable doc-comment of this parameter. Will be shown // in the UI but can be omitted. Documentation interface{} `json:"documentation,omitempty"` // string | MarkupContent } // SignatureHelpRegistrationOptions SignatureHelp Registration options. type SignatureHelpRegistrationOptions struct { TextDocumentRegistrationOptions // TriggerCharacters is the characters that trigger signature help // automatically. TriggerCharacters []string `json:"triggerCharacters,omitempty"` } // ReferenceParams params of References request. // // @since 3.15.0. type ReferenceParams struct { TextDocumentPositionParams WorkDoneProgressParams PartialResultParams // Context is the ReferenceParams context. Context ReferenceContext `json:"context"` } // ReferenceContext context of ReferenceParams. type ReferenceContext struct { // IncludeDeclaration include the declaration of the current symbol. IncludeDeclaration bool `json:"includeDeclaration"` } // DocumentHighlight a document highlight is a range inside a text document which deserves // special attention. Usually a document highlight is visualized by changing // the background color of its range. type DocumentHighlight struct { // Range is the range this highlight applies to. Range Range `json:"range"` // Kind is the highlight kind, default is DocumentHighlightKind.Text. Kind DocumentHighlightKind `json:"kind,omitempty"` } // DocumentHighlightKind a document highlight kind. type DocumentHighlightKind float64 const ( // DocumentHighlightKindText a textual occurrence. DocumentHighlightKindText DocumentHighlightKind = 1 // DocumentHighlightKindRead read-access of a symbol, like reading a variable. DocumentHighlightKindRead DocumentHighlightKind = 2 // DocumentHighlightKindWrite write-access of a symbol, like writing to a variable. DocumentHighlightKindWrite DocumentHighlightKind = 3 ) // String implements fmt.Stringer. func (k DocumentHighlightKind) String() string { switch k { case DocumentHighlightKindText: return "Text" case DocumentHighlightKindRead: return "Read" case DocumentHighlightKindWrite: return "Write" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // DocumentSymbolParams params of Document Symbols request. type DocumentSymbolParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the text document. TextDocument TextDocumentIdentifier `json:"textDocument"` } // SymbolKind specific capabilities for the `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. type SymbolKind float64 const ( // SymbolKindFile symbol of file. SymbolKindFile SymbolKind = 1 // SymbolKindModule symbol of module. SymbolKindModule SymbolKind = 2 // SymbolKindNamespace symbol of namespace. SymbolKindNamespace SymbolKind = 3 // SymbolKindPackage symbol of package. SymbolKindPackage SymbolKind = 4 // SymbolKindClass symbol of class. SymbolKindClass SymbolKind = 5 // SymbolKindMethod symbol of method. SymbolKindMethod SymbolKind = 6 // SymbolKindProperty symbol of property. SymbolKindProperty SymbolKind = 7 // SymbolKindField symbol of field. SymbolKindField SymbolKind = 8 // SymbolKindConstructor symbol of constructor. SymbolKindConstructor SymbolKind = 9 // SymbolKindEnum symbol of enum. SymbolKindEnum SymbolKind = 10 // SymbolKindInterface symbol of interface. SymbolKindInterface SymbolKind = 11 // SymbolKindFunction symbol of function. SymbolKindFunction SymbolKind = 12 // SymbolKindVariable symbol of variable. SymbolKindVariable SymbolKind = 13 // SymbolKindConstant symbol of constant. SymbolKindConstant SymbolKind = 14 // SymbolKindString symbol of string. SymbolKindString SymbolKind = 15 // SymbolKindNumber symbol of number. SymbolKindNumber SymbolKind = 16 // SymbolKindBoolean symbol of boolean. SymbolKindBoolean SymbolKind = 17 // SymbolKindArray symbol of array. SymbolKindArray SymbolKind = 18 // SymbolKindObject symbol of object. SymbolKindObject SymbolKind = 19 // SymbolKindKey symbol of key. SymbolKindKey SymbolKind = 20 // SymbolKindNull symbol of null. SymbolKindNull SymbolKind = 21 // SymbolKindEnumMember symbol of enum member. SymbolKindEnumMember SymbolKind = 22 // SymbolKindStruct symbol of struct. SymbolKindStruct SymbolKind = 23 // SymbolKindEvent symbol of event. SymbolKindEvent SymbolKind = 24 // SymbolKindOperator symbol of operator. SymbolKindOperator SymbolKind = 25 // SymbolKindTypeParameter symbol of type parameter. SymbolKindTypeParameter SymbolKind = 26 ) // String implements fmt.Stringer. //nolint:cyclop func (k SymbolKind) String() string { switch k { case SymbolKindFile: return "File" case SymbolKindModule: return "Module" case SymbolKindNamespace: return "Namespace" case SymbolKindPackage: return "Package" case SymbolKindClass: return "Class" case SymbolKindMethod: return "Method" case SymbolKindProperty: return "Property" case SymbolKindField: return "Field" case SymbolKindConstructor: return "Constructor" case SymbolKindEnum: return "Enum" case SymbolKindInterface: return "Interface" case SymbolKindFunction: return "Function" case SymbolKindVariable: return "Variable" case SymbolKindConstant: return "Constant" case SymbolKindString: return "String" case SymbolKindNumber: return "Number" case SymbolKindBoolean: return "Boolean" case SymbolKindArray: return "Array" case SymbolKindObject: return "Object" case SymbolKindKey: return "Key" case SymbolKindNull: return "Null" case SymbolKindEnumMember: return "EnumMember" case SymbolKindStruct: return "Struct" case SymbolKindEvent: return "Event" case SymbolKindOperator: return "Operator" case SymbolKindTypeParameter: return "TypeParameter" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // SymbolTag symbol tags are extra annotations that tweak the rendering of a symbol. // // @since 3.16.0. type SymbolTag float64 // list of SymbolTag. const ( // SymbolTagDeprecated render a symbol as obsolete, usually using a strike-out. SymbolTagDeprecated SymbolTag = 1 ) // String returns a string representation of the SymbolTag. func (k SymbolTag) String() string { switch k { case SymbolTagDeprecated: return "Deprecated" default: return strconv.FormatFloat(float64(k), 'f', -10, 64) } } // DocumentSymbol represents programming constructs like variables, classes, interfaces etc. that appear in a document. Document symbols can be // hierarchical and they have two ranges: one that encloses its definition and one that points to its most interesting range, // e.g. the range of an identifier. type DocumentSymbol struct { // Name is the name of this symbol. Will be displayed in the user interface and therefore must not be // an empty string or a string only consisting of white spaces. Name string `json:"name"` // Detail is the more detail for this symbol, e.g the signature of a function. Detail string `json:"detail,omitempty"` // Kind is the kind of this symbol. Kind SymbolKind `json:"kind"` // Tags for this document symbol. // // @since 3.16.0. Tags []SymbolTag `json:"tags,omitempty"` // Deprecated indicates if this symbol is deprecated. Deprecated bool `json:"deprecated,omitempty"` // Range is the range enclosing this symbol not including leading/trailing whitespace but everything else // like comments. This information is typically used to determine if the clients cursor is // inside the symbol to reveal in the symbol in the UI. Range Range `json:"range"` // SelectionRange is the range that should be selected and revealed when this symbol is being picked, e.g the name of a function. // Must be contained by the `range`. SelectionRange Range `json:"selectionRange"` // Children children of this symbol, e.g. properties of a class. Children []DocumentSymbol `json:"children,omitempty"` } // SymbolInformation represents information about programming constructs like variables, classes, // interfaces etc. type SymbolInformation struct { // Name is the name of this symbol. Name string `json:"name"` // Kind is the kind of this symbol. Kind SymbolKind `json:"kind"` // Tags for this completion item. // // @since 3.16.0. Tags []SymbolTag `json:"tags,omitempty"` // Deprecated indicates if this symbol is deprecated. Deprecated bool `json:"deprecated,omitempty"` // Location is the location of this symbol. The location's range is used by a tool // to reveal the location in the editor. If the symbol is selected in the // tool the range's start information is used to position the cursor. So // the range usually spans more then the actual symbol's name and does // normally include things like visibility modifiers. // // The range doesn't have to denote a node range in the sense of a abstract // syntax tree. It can therefore not be used to re-construct a hierarchy of // the symbols. Location Location `json:"location"` // ContainerName is the name of the symbol containing this symbol. This information is for // user interface purposes (e.g. to render a qualifier in the user interface // if necessary). It can't be used to re-infer a hierarchy for the document // symbols. ContainerName string `json:"containerName,omitempty"` } // CodeActionParams params for the CodeActionRequest. type CodeActionParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the document in which the command was invoked. TextDocument TextDocumentIdentifier `json:"textDocument"` // Context carrying additional information. Context CodeActionContext `json:"context"` // Range is the range for which the command was invoked. Range Range `json:"range"` } // CodeActionKind 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. type CodeActionKind string // A set of predefined code action kinds. const ( // QuickFix base kind for quickfix actions: 'quickfix'. QuickFix CodeActionKind = "quickfix" // Refactor base kind for refactoring actions: 'refactor'. Refactor CodeActionKind = "refactor" // RefactorExtract base kind for refactoring extraction actions: 'refactor.extract' // // Example extract actions: // // - Extract method // - Extract function // - Extract variable // - Extract interface from class // - ... RefactorExtract CodeActionKind = "refactor.extract" // RefactorInline base kind for refactoring inline actions: 'refactor.inline' // // Example inline actions: // // - Inline function // - Inline variable // - Inline constant // - ... RefactorInline CodeActionKind = "refactor.inline" // RefactorRewrite base kind for refactoring rewrite actions: 'refactor.rewrite' // // Example rewrite actions: // // - Convert JavaScript function to class // - Add or remove parameter // - Encapsulate field // - Make method static // - Move method to base class // - ... RefactorRewrite CodeActionKind = "refactor.rewrite" // Source base kind for source actions: `source` // // Source code actions apply to the entire file. Source CodeActionKind = "source" // SourceOrganizeImports base kind for an organize imports source action: `source.organizeImports`. SourceOrganizeImports CodeActionKind = "source.organizeImports" ) // CodeActionContext contains additional diagnostic information about the context in which // a code action is run. type CodeActionContext struct { // Diagnostics is an array of diagnostics. Diagnostics []Diagnostic `json:"diagnostics"` // Only requested kind of actions to return. // // Actions not of this kind are filtered out by the client before being shown. So servers // can omit computing them. Only []CodeActionKind `json:"only,omitempty"` } // CodeAction capabilities specific to the `textDocument/codeAction`. type CodeAction struct { // Title is a short, human-readable, title for this code action. Title string `json:"title"` // Kind is the kind of the code action. // // Used to filter code actions. Kind CodeActionKind `json:"kind,omitempty"` // Diagnostics is the diagnostics that this code action resolves. Diagnostics []Diagnostic `json:"diagnostics,omitempty"` // IsPreferred marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted // by keybindings. // // A quick fix should be marked preferred if it properly addresses the underlying error. // A refactoring should be marked preferred if it is the most reasonable choice of actions to take. // // @since 3.15.0. IsPreferred bool `json:"isPreferred,omitempty"` // Disabled marks that the code action cannot currently be applied. // // Clients should follow the following guidelines regarding disabled code // actions: // // - Disabled code actions are not shown in automatic lightbulbs code // action menus. // // - Disabled actions are shown as faded out in the code action menu when // the user request a more specific type of code action, such as // refactorings. // // - If the user has a keybinding that auto applies a code action and only // a disabled code actions are returned, the client should show the user // an error message with `reason` in the editor. // // @since 3.16.0. Disabled *CodeActionDisable `json:"disabled,omitempty"` // Edit is the workspace edit this code action performs. Edit *WorkspaceEdit `json:"edit,omitempty"` // Command is a command this code action executes. If a code action // provides an edit and a command, first the edit is // executed and then the command. Command *Command `json:"command,omitempty"` // Data is a data entry field that is preserved on a code action between // a "textDocument/codeAction" and a "codeAction/resolve" request. // // @since 3.16.0. Data interface{} `json:"data,omitempty"` } // CodeActionDisable Disable in CodeAction. // // @since 3.16.0. type CodeActionDisable struct { // Reason human readable description of why the code action is currently // disabled. // // This is displayed in the code actions UI. Reason string `json:"reason"` } // CodeActionRegistrationOptions CodeAction Registrationi options. type CodeActionRegistrationOptions struct { TextDocumentRegistrationOptions CodeActionOptions } // CodeLensParams params of Code Lens request. type CodeLensParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the document to request code lens for. TextDocument TextDocumentIdentifier `json:"textDocument"` } // CodeLens is a code lens represents a command that should be shown along with // source text, like the number of references, a way to run tests, etc. // // A code lens is _unresolved_ when no command is associated to it. For performance // reasons the creation of a code lens and resolving should be done in two stages. type CodeLens struct { // Range is the range in which this code lens is valid. Should only span a single line. Range Range `json:"range"` // Command is the command this code lens represents. Command *Command `json:"command,omitempty"` // Data is a data entry field that is preserved on a code lens item between // a code lens and a code lens resolve request. Data interface{} `json:"data,omitempty"` } // CodeLensRegistrationOptions CodeLens Registration options. type CodeLensRegistrationOptions struct { TextDocumentRegistrationOptions // ResolveProvider code lens has a resolve provider as well. ResolveProvider bool `json:"resolveProvider,omitempty"` } // DocumentLinkParams params of Document Link request. type DocumentLinkParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the document to provide document links for. TextDocument TextDocumentIdentifier `json:"textDocument"` } // DocumentLink is a document link is a range in a text document that links to an internal or external resource, like another // text document or a web site. type DocumentLink struct { // Range is the range this link applies to. Range Range `json:"range"` // Target is the uri this link points to. If missing a resolve request is sent later. Target DocumentURI `json:"target,omitempty"` // Tooltip is the tooltip text when you hover over this link. // // If a tooltip is provided, is will be displayed in a string that includes instructions on how to // trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary depending on OS, // user settings, and localization. // // @since 3.15.0. Tooltip string `json:"tooltip,omitempty"` // Data is a data entry field that is preserved on a document link between a // DocumentLinkRequest and a DocumentLinkResolveRequest. Data interface{} `json:"data,omitempty"` } // DocumentColorParams params of Document Color request. type DocumentColorParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the document to format. TextDocument TextDocumentIdentifier `json:"textDocument"` } // ColorInformation response of Document Color request. type ColorInformation struct { // Range is the range in the document where this color appears. Range Range `json:"range"` // Color is the actual color value for this color range. Color Color `json:"color"` } // Color represents a color in RGBA space. type Color struct { // Alpha is the alpha component of this color in the range [0-1]. Alpha float64 `json:"alpha"` // Blue is the blue component of this color in the range [0-1]. Blue float64 `json:"blue"` // Green is the green component of this color in the range [0-1]. Green float64 `json:"green"` // Red is the red component of this color in the range [0-1]. Red float64 `json:"red"` } // ColorPresentationParams params of Color Presentation request. type ColorPresentationParams struct { WorkDoneProgressParams PartialResultParams // TextDocument is the text document. TextDocument TextDocumentIdentifier `json:"textDocument"` // Color is the color information to request presentations for. Color Color `json:"color"` // Range is the range where the color would be inserted. Serves as a context. Range Range `json:"range"` } // ColorPresentation response of Color Presentation request. type ColorPresentation struct { // Label is the label of this color presentation. It will be shown on the color // picker header. By default this is also the text that is inserted when selecting // this color presentation. Label string `json:"label"` // TextEdit an edit which is applied to a document when selecting // this presentation for the color. When `falsy` the label is used. TextEdit *TextEdit `json:"textEdit,omitempty"` // AdditionalTextEdits an optional array of additional [text edits](#TextEdit) that are applied when // selecting this color presentation. Edits must not overlap with the main [edit](#ColorPresentation.textEdit) nor with themselves. AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"` } // DocumentFormattingParams params of Document Formatting request. type DocumentFormattingParams struct { WorkDoneProgressParams // Options is the format options. Options FormattingOptions `json:"options"` // TextDocument is the document to format. TextDocument TextDocumentIdentifier `json:"textDocument"` } // FormattingOptions value-object describing what options formatting should use. type FormattingOptions struct { // InsertSpaces prefer spaces over tabs. InsertSpaces bool `json:"insertSpaces"` // TabSize size of a tab in spaces. TabSize uint32 `json:"tabSize"` // TrimTrailingWhitespace trim trailing whitespaces on a line. // // @since 3.15.0. TrimTrailingWhitespace bool `json:"trimTrailingWhitespace,omitempty"` // InsertFinalNewlines insert a newline character at the end of the file if one does not exist. // // @since 3.15.0. InsertFinalNewline bool `json:"insertFinalNewline,omitempty"` // TrimFinalNewlines trim all newlines after the final newline at the end of the file. // // @since 3.15.0. TrimFinalNewlines bool `json:"trimFinalNewlines,omitempty"` // Key is the signature for further properties. Key map[string]interface{} `json:"key,omitempty"` // bool | int32 | string } // DocumentRangeFormattingParams params of Document Range Formatting request. type DocumentRangeFormattingParams struct { WorkDoneProgressParams // TextDocument is the document to format. TextDocument TextDocumentIdentifier `json:"textDocument"` // Range is the range to format Range Range `json:"range"` // Options is the format options. Options FormattingOptions `json:"options"` } // DocumentOnTypeFormattingParams params of Document on Type Formatting request. type DocumentOnTypeFormattingParams struct { // TextDocument is the document to format. TextDocument TextDocumentIdentifier `json:"textDocument"` // Position is the position at which this request was sent. Position Position `json:"position"` // Ch is the character that has been typed. Ch string `json:"ch"` // Options is the format options. Options FormattingOptions `json:"options"` } // DocumentOnTypeFormattingRegistrationOptions DocumentOnTypeFormatting Registration options. type DocumentOnTypeFormattingRegistrationOptions struct { TextDocumentRegistrationOptions // FirstTriggerCharacter a character on which formatting should be triggered, like `}`. FirstTriggerCharacter string `json:"firstTriggerCharacter"` // MoreTriggerCharacter a More trigger characters. MoreTriggerCharacter []string `json:"moreTriggerCharacter"` } // RenameParams params of Rename request. type RenameParams struct { TextDocumentPositionParams PartialResultParams // NewName is the new name of the symbol. If the given name is not valid the // request must return a [ResponseError](#ResponseError) with an // appropriate message set. NewName string `json:"newName"` } // RenameRegistrationOptions Rename Registration options. type RenameRegistrationOptions struct { TextDocumentRegistrationOptions // PrepareProvider is the renames should be checked and tested for validity before being executed. PrepareProvider bool `json:"prepareProvider,omitempty"` } // PrepareRenameParams params of PrepareRenameParams request. // // @since 3.15.0. type PrepareRenameParams struct { TextDocumentPositionParams } // FoldingRangeParams params of Folding Range request. type FoldingRangeParams struct { TextDocumentPositionParams PartialResultParams } // FoldingRangeKind is the enum of known range kinds. type FoldingRangeKind string const ( // CommentFoldingRange is the folding range for a comment. CommentFoldingRange FoldingRangeKind = "comment" // ImportsFoldingRange is the folding range for a imports or includes. ImportsFoldingRange FoldingRangeKind = "imports" // RegionFoldingRange is the folding range for a region (e.g. `#region`). RegionFoldingRange FoldingRangeKind = "region" ) // FoldingRange capabilities specific to `textDocument/foldingRange` requests. // // @since 3.10.0. type FoldingRange struct { // StartLine is the zero-based line number from where the folded range starts. StartLine uint32 `json:"startLine"` // StartCharacter is the zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line. StartCharacter uint32 `json:"startCharacter,omitempty"` // EndLine is the zero-based line number where the folded range ends. EndLine uint32 `json:"endLine"` // EndCharacter is the zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line. EndCharacter uint32 `json:"endCharacter,omitempty"` // Kind describes the kind of the folding range such as `comment' or 'region'. The kind // is used to categorize folding ranges and used by commands like 'Fold all comments'. // See FoldingRangeKind for an enumeration of standardized kinds. Kind FoldingRangeKind `json:"kind,omitempty"` }