status-go/vendor/go.lsp.dev/protocol/language.go

1317 lines
46 KiB
Go

// 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><cursor><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<cursor position>`
// 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"`
}