Documentation ¶
Overview ¶
Package protocol provides definitions for the Language Server Protocol (LSP). It includes structures and constants for common LSP operations and types.
Index ¶
- Constants
- func BuildTokens(tokens []Token) []uint32
- func CompareToken(a, b Token) int
- func PositionFor(pos int, doc *document.Document) (line, col int)
- func Register(extension string, handler Handler)
- func ToJSON(v any) json.RawMessage
- func TokenModifiers() []string
- func TokenTypes() []string
- type AddTokenHook
- type ClientCapabilities
- type CodeActionContext
- type CodeActionParams
- type Command
- type CompletionClientCapabilities
- type CompletionContext
- type CompletionItem
- type CompletionItemClientCapabilities
- type CompletionItemKind
- type CompletionList
- type CompletionOptions
- type CompletionParams
- type CompletionTriggerKind
- type DefinitionParams
- type Diagnostic
- type DiagnosticRelatedInformation
- type DocumentFormattingParams
- type DocumentManager
- type DocumentSymbolParams
- type FormattingOptions
- type Handler
- type Hover
- type HoverClientCapabilities
- type HoverParams
- type InitializeParams
- type InitializeResult
- type InsertTextFormat
- type Location
- type MarkupContent
- type Position
- type PublishDiagnosticsParams
- type Range
- type ReferenceContext
- type ReferenceParams
- type RenameParams
- type SemanticTokensLegend
- type SemanticTokensOptions
- type SemanticTokensParams
- type SemanticTokensResult
- type ServerCapabilities
- type TextDocumentClientCapabilities
- type TextDocumentContentChangeEvent
- type TextDocumentIdentifier
- type TextDocumentItem
- type TextDocumentPositionParams
- type TextDocumentSyncClientCapabilities
- type TextEdit
- type Token
- type TokenModifier
- type TokenType
- type VersionedTextDocumentIdentifier
- type WindowClientCapabilities
- type WorkspaceClientCapabilities
Constants ¶
const ( Initialize = "initialize" Initialized = "initialized" Shutdown = "shutdown" Exit = "exit" TextDocumentDidOpen = "textDocument/didOpen" TextDocumentDidChange = "textDocument/didChange" TextDocumentDidSave = "textDocument/didSave" TextDocumentDidClose = "textDocument/didClose" TextDocumentCompletion = "textDocument/completion" TextDocumentHover = "textDocument/hover" TextDocumentDefinition = "textDocument/definition" TextDocumentReferences = "textDocument/references" TextDocumentDocumentSymbol = "textDocument/documentSymbol" TextDocumentFormatting = "textDocument/formatting" TextDocumentRename = "textDocument/rename" TextDocumentCodeAction = "textDocument/codeAction" TextDocumentSemanticTokensFull = "textDocument/semanticTokens/full" TextDocumentPublishDiagnostics = "textDocument/publishDiagnostics" )
The following constants define method names for LSP requests and notifications.
Variables ¶
This section is empty.
Functions ¶
func BuildTokens ¶
BuildTokens builds a list of sorted tokens from a list of tokens.
func PositionFor ¶
PositionFor returns the line and column for a position in a document.
func ToJSON ¶
func ToJSON(v any) json.RawMessage
func TokenModifiers ¶
func TokenModifiers() []string
Types ¶
type AddTokenHook ¶
type AddTokenHook func(tokens *[]Token, doc *document.Document, lit string, pos int, tokenType TokenType) bool
AddTokenHook is a hook that is called for each token added. If the hook returns true, the token is not added.
type ClientCapabilities ¶
type ClientCapabilities struct { Workspace WorkspaceClientCapabilities `json:"workspace,omitempty"` TextDocument TextDocumentClientCapabilities `json:"textDocument,omitempty"` Window WindowClientCapabilities `json:"window,omitempty"` }
ClientCapabilities represents the capabilities provided by the client.
type CodeActionContext ¶
type CodeActionContext struct { Diagnostics []Diagnostic `json:"diagnostics"` Only []string `json:"only,omitempty"` }
CodeActionContext represents the context of a code action request.
type CodeActionParams ¶
type CodeActionParams struct { TextDocument TextDocumentIdentifier `json:"textDocument"` Range Range `json:"range"` Context CodeActionContext `json:"context"` }
CodeActionParams represents the parameters of a textDocument/codeAction request.
type Command ¶
type Command struct { Title string `json:"title"` Command string `json:"command"` Arguments []any `json:"arguments,omitempty"` }
Command represents a reference to a command.
type CompletionClientCapabilities ¶
type CompletionClientCapabilities struct { DynamicRegistration bool `json:"dynamicRegistration,omitempty"` CompletionItem CompletionItemClientCapabilities `json:"completionItem,omitempty"` }
CompletionClientCapabilities represents the client capabilities for completion.
type CompletionContext ¶
type CompletionContext struct { TriggerKind CompletionTriggerKind `json:"triggerKind"` TriggerCharacter string `json:"triggerCharacter,omitempty"` }
CompletionContext represents additional information about the context in which a completion request is triggered.
type CompletionItem ¶
type CompletionItem struct { Label string `json:"label"` Kind CompletionItemKind `json:"kind,omitempty"` Detail string `json:"detail,omitempty"` Documentation json.RawMessage `json:"documentation,omitempty"` Deprecated bool `json:"deprecated,omitempty"` Preselect bool `json:"preselect,omitempty"` SortText string `json:"sortText,omitempty"` FilterText string `json:"filterText,omitempty"` InsertText string `json:"insertText,omitempty"` InsertTextFormat InsertTextFormat `json:"insertTextFormat,omitempty"` TextEdit *TextEdit `json:"textEdit,omitempty"` AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"` CommitCharacters []string `json:"commitCharacters,omitempty"` Command *Command `json:"command,omitempty"` Data any `json:"data,omitempty"` }
CompletionItem represents a completion item.
type CompletionItemClientCapabilities ¶
type CompletionItemClientCapabilities struct { SnippetSupport bool `json:"snippetSupport,omitempty"` CommitCharactersSupport bool `json:"commitCharactersSupport,omitempty"` DocumentationFormat []string `json:"documentationFormat,omitempty"` DeprecatedSupport bool `json:"deprecatedSupport,omitempty"` PreselectSupport bool `json:"preselectSupport,omitempty"` }
CompletionItemClientCapabilities represents the client capabilities for completion items.
type CompletionItemKind ¶
type CompletionItemKind int
CompletionItemKind represents the kind of a completion item.
type CompletionList ¶
type CompletionList struct { IsIncomplete bool `json:"isIncomplete"` Items []CompletionItem `json:"items"` }
CompletionList represents the result of a completion request.
type CompletionOptions ¶
type CompletionOptions struct { ResolveProvider bool `json:"resolveProvider,omitempty"` TriggerCharacters []string `json:"triggerCharacters,omitempty"` }
CompletionOptions represents the options for completion support.
type CompletionParams ¶
type CompletionParams struct { TextDocumentPositionParams Context *CompletionContext `json:"context,omitempty"` }
CompletionParams represents the parameters of a textDocument/completion request.
type CompletionTriggerKind ¶
type CompletionTriggerKind int
CompletionTriggerKind represents how a completion was triggered.
const ( CompletionTriggerInvoked CompletionTriggerKind = 1 CompletionTriggerTriggerCharacter CompletionTriggerKind = 2 CompletionTriggerTriggerForIncompleteCompletions CompletionTriggerKind = 3 )
type DefinitionParams ¶
type DefinitionParams struct {
TextDocumentPositionParams
}
DefinitionParams represents the parameters of a textDocument/definition request.
type Diagnostic ¶
type Diagnostic struct { Range Range `json:"range"` Severity int `json:"severity,omitempty"` Code any `json:"code,omitempty"` Source string `json:"source,omitempty"` Message string `json:"message"` Tags []int `json:"tags,omitempty"` RelatedInformation []DiagnosticRelatedInformation `json:"relatedInformation,omitempty"` }
Diagnostic represents a diagnostic, such as a compiler error or warning.
type DiagnosticRelatedInformation ¶
type DiagnosticRelatedInformation struct { Location Location `json:"location"` Message string `json:"message"` }
DiagnosticRelatedInformation represents a related piece of information for a diagnostic.
type DocumentFormattingParams ¶
type DocumentFormattingParams struct { TextDocument TextDocumentIdentifier `json:"textDocument"` Options FormattingOptions `json:"options"` }
DocumentFormattingParams represents the parameters of a textDocument/formatting request.
type DocumentManager ¶
type DocumentManager interface { UpdateDocument(doc *document.Document) GetDocument(uri string) *document.Document RemoveDocument(uri string) }
DocumentManager is the interface that must be implemented by a document manager.
type DocumentSymbolParams ¶
type DocumentSymbolParams struct {
TextDocument TextDocumentIdentifier `json:"textDocument"`
}
DocumentSymbolParams represents the parameters of a textDocument/documentSymbol request.
type FormattingOptions ¶
type FormattingOptions struct { TabSize int `json:"tabSize"` InsertSpaces bool `json:"insertSpaces"` }
FormattingOptions represents options for formatting.
type Handler ¶
type Handler interface { // HandleSemanticTokens handles a "textDocument/semanticTokens/full" request. HandleSemanticTokens(context.Context, DocumentManager, *document.Document) (any, error) }
Handler is the interface that must be implemented by a language server handler.
type Hover ¶
type Hover struct { Contents json.RawMessage `json:"contents"` Range *Range `json:"range,omitempty"` }
Hover represents the result of a hover request.
type HoverClientCapabilities ¶
type HoverClientCapabilities struct { DynamicRegistration bool `json:"dynamicRegistration,omitempty"` ContentFormat []string `json:"contentFormat,omitempty"` }
HoverClientCapabilities represents the client capabilities for hover.
type HoverParams ¶
type HoverParams struct {
TextDocumentPositionParams
}
HoverParams represents the parameters of a textDocument/hover request.
type InitializeParams ¶
type InitializeParams struct { ProcessID int `json:"processId"` // The process ID of the parent process that started the server. RootURI string `json:"rootUri"` // The rootUri of the workspace. InitializationOptions any `json:"initializationOptions"` // User provided initialization options. Capabilities ClientCapabilities `json:"capabilities"` // The capabilities provided by the client (editor or tool). }
InitializeParams represents the parameters sent in an initialize request.
type InitializeResult ¶
type InitializeResult struct {
Capabilities ServerCapabilities `json:"capabilities"` // The capabilities the language server provides.
}
InitializeResult represents the result of an initialize request.
type InsertTextFormat ¶
type InsertTextFormat int
InsertTextFormat represents the format of the insert text.
const ( InsertTextFormatPlainText InsertTextFormat = 1 InsertTextFormatSnippet InsertTextFormat = 2 )
type Location ¶
type Location struct { URI string `json:"uri"` // The text document's URI. Range Range `json:"range"` // The location's range. }
Location represents a location inside a resource, such as a line inside a text file.
type MarkupContent ¶
type MarkupContent struct { // Kind is the type of the MarkupContent. // It can be "plaintext" or "markdown". Kind string `json:"kind"` // Value is the actual content value. // This will be the text shown to the user, with the format depending on the "kind". Value string `json:"value"` }
MarkupContent represents a string value with a specific content type.
type Position ¶
type Position struct { Line int `json:"line"` // Line position in a document (zero-based). Character int `json:"character"` // Character offset on a line in a document (zero-based). }
Position represents a position in a text document.
type PublishDiagnosticsParams ¶
type PublishDiagnosticsParams struct { URI string `json:"uri"` Diagnostics []Diagnostic `json:"diagnostics"` }
PublishDiagnosticsParams represents the parameters of a textDocument/publishDiagnostics notification.
type Range ¶
type Range struct { Start Position `json:"start"` // The range's start position. End Position `json:"end"` // The range's end position. }
Range represents a range in a text document.
type ReferenceContext ¶
type ReferenceContext struct {
IncludeDeclaration bool `json:"includeDeclaration"`
}
ReferenceContext represents the context of a reference request.
type ReferenceParams ¶
type ReferenceParams struct { TextDocumentPositionParams Context ReferenceContext `json:"context"` }
ReferenceParams represents the parameters of a textDocument/references request.
type RenameParams ¶
type RenameParams struct { TextDocument TextDocumentIdentifier `json:"textDocument"` Position Position `json:"position"` NewName string `json:"newName"` }
RenameParams represents the parameters of a textDocument/rename request.
type SemanticTokensLegend ¶
type SemanticTokensLegend struct { TokenTypes []string `json:"tokenTypes"` TokenModifiers []string `json:"tokenModifiers"` }
SemanticTokensLegend represents the legend for semantic tokens.
type SemanticTokensOptions ¶
type SemanticTokensOptions struct { Legend SemanticTokensLegend `json:"legend"` Range bool `json:"range,omitempty"` Full bool `json:"full,omitempty"` }
SemanticTokensOptions represents the options for semantic tokens support.
type SemanticTokensParams ¶
type SemanticTokensParams struct {
TextDocument TextDocumentIdentifier `json:"textDocument"`
}
SemanticTokensParams represents the parameters of a textDocument/semanticTokens/full request.
type SemanticTokensResult ¶
type SemanticTokensResult struct { // The result id. If provided and clients support delta updating, this id // can be sent in a semantic token request to request delta updates. ResultID string `json:"resultId,omitempty"` // The actual tokens. For a detailed description of the format please refer // to the LSP spec at: // https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_semanticTokens Data []uint32 `json:"data"` }
SemanticTokens represents the result of a textDocument/semantic SemanticTokens represents the result of a textDocument/semanticTokens/full request.
type ServerCapabilities ¶
type ServerCapabilities struct { TextDocumentSync int `json:"textDocumentSync,omitempty"` CompletionProvider *CompletionOptions `json:"completionProvider,omitempty"` HoverProvider bool `json:"hoverProvider,omitempty"` DefinitionProvider bool `json:"definitionProvider,omitempty"` ReferencesProvider bool `json:"referencesProvider,omitempty"` DocumentSymbolProvider bool `json:"documentSymbolProvider,omitempty"` WorkspaceSymbolProvider bool `json:"workspaceSymbolProvider,omitempty"` CodeActionProvider bool `json:"codeActionProvider,omitempty"` DocumentFormattingProvider bool `json:"documentFormattingProvider,omitempty"` RenameProvider bool `json:"renameProvider,omitempty"` SemanticTokensProvider *SemanticTokensOptions `json:"semanticTokensProvider,omitempty"` }
ServerCapabilities represents the capabilities provided by the language server.
type TextDocumentClientCapabilities ¶
type TextDocumentClientCapabilities struct { Synchronization TextDocumentSyncClientCapabilities `json:"synchronization,omitempty"` Completion CompletionClientCapabilities `json:"completion,omitempty"` Hover HoverClientCapabilities `json:"hover,omitempty"` }
TextDocumentClientCapabilities represents the text document-specific client capabilities.
type TextDocumentContentChangeEvent ¶
type TextDocumentContentChangeEvent struct { Range *Range `json:"range,omitempty"` // The range of the document that changed. RangeLength int `json:"rangeLength,omitempty"` // The length of the range that got replaced. Text string `json:"text"` // The new text of the range/document. }
TextDocumentContentChangeEvent represents a change to a text document.
type TextDocumentIdentifier ¶
type TextDocumentIdentifier struct {
URI string `json:"uri"` // The text document's URI.
}
TextDocumentIdentifier identifies a text document using its URI.
type TextDocumentItem ¶
type TextDocumentItem struct { URI string `json:"uri"` // The text document's URI. LanguageID string `json:"languageId"` // The text document's language identifier. Version int `json:"version"` // The version number of this document (it will increase after each change, including undo/redo). Text string `json:"text"` // The content of the opened text document. }
TextDocumentItem represents an open text document.
type TextDocumentPositionParams ¶
type TextDocumentPositionParams struct { TextDocument TextDocumentIdentifier `json:"textDocument"` Position Position `json:"position"` }
TextDocumentPositionParams represents a text document and a position inside that document.
type TextDocumentSyncClientCapabilities ¶
type TextDocumentSyncClientCapabilities struct { DynamicRegistration bool `json:"dynamicRegistration,omitempty"` WillSave bool `json:"willSave,omitempty"` WillSaveWaitUntil bool `json:"willSaveWaitUntil,omitempty"` DidSave bool `json:"didSave,omitempty"` }
TextDocumentSyncClientCapabilities represents the client capabilities for document synchronization.
type Token ¶
type Token struct { Pos uint32 // 0-based character offset Line uint32 // 0-based line number Character uint32 // 0-based character offset Length uint32 // length of the token TokenType TokenType // token type TokenMod uint32 // token modifier }
Token represents a token in a document.
func AddToken ¶
func AddToken[Pos constraints.Integer](tokens *[]Token, doc *document.Document, lit string, position Pos, tokenType TokenType, hooks ...AddTokenHook) []Token
AddToken adds a token to the list of tokens. It splits the token by newlines and adds each line as a separate token. The hook is called for each token added. If the hook returns true, the token is not added.
type TokenModifier ¶
type TokenModifier int
const (
TokenModifierDeclaration TokenModifier = iota // declaration
)
func (TokenModifier) String ¶
func (i TokenModifier) String() string
type TokenType ¶
type TokenType uint32
TokenType constants aligned with VSCode's standard semantic token types
const ( TokenTypeText TokenType = iota // text TokenTypeNamespace // namespace TokenTypeType // type TokenTypeClass // class TokenTypeEnum // enum TokenTypeInterface // interface TokenTypeStruct // struct TokenTypeTypeParameter // typeParameter TokenTypeParameter // parameter TokenTypeVariable // variable TokenTypeProperty // property TokenTypeEnumMember // enumMember TokenTypeEvent // event TokenTypeFunction // function TokenTypeMethod // method TokenTypeMacro // macro TokenTypeKeyword // keyword TokenTypeModifier // modifier TokenTypeComment // comment TokenTypeString // string TokenTypeNumber // number TokenTypeRegexp // regexp TokenTypeOperator // operator // token aliases TokenTypeConst = TokenTypeEnumMember // const TokenTypeAnnotation = TokenTypeRegexp // annotation TokenTypeAnnotationParameter = TokenTypeMacro // annotationParameter )
type VersionedTextDocumentIdentifier ¶
type VersionedTextDocumentIdentifier struct { TextDocumentIdentifier Version int `json:"version"` // The version number of this document. }
VersionedTextDocumentIdentifier identifies a specific version of a text document.
type WindowClientCapabilities ¶
type WindowClientCapabilities struct {
WorkDoneProgress bool `json:"workDoneProgress,omitempty"`
}
WindowClientCapabilities represents the window-specific client capabilities.
type WorkspaceClientCapabilities ¶
type WorkspaceClientCapabilities struct {
ApplyEdit bool `json:"applyEdit,omitempty"`
}
WorkspaceClientCapabilities represents the workspace-specific client capabilities.