lsp

package
v1.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2025 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Overview

Package lsp implements a Language Server Protocol (LSP) server for GoSQLX. It provides real-time SQL validation, formatting, and code intelligence features for IDEs and text editors.

Index

Constants

View Source
const (
	// JSON-RPC standard error codes
	ParseError     = -32700
	InvalidRequest = -32600
	MethodNotFound = -32601
	InvalidParams  = -32602
	InternalError  = -32603

	// LSP-specific error codes
	ServerNotInitialized = -32002
	UnknownErrorCode     = -32001
	RequestCancelled     = -32800
	ContentModified      = -32801
	ServerCancelled      = -32802
	RequestFailed        = -32803
)

Error codes

View Source
const (
	// MaxContentLength limits the size of a single LSP message (10MB)
	MaxContentLength = 10 * 1024 * 1024
	// MaxDocumentSize limits the size of SQL documents (5MB)
	MaxDocumentSize = 5 * 1024 * 1024
	// RateLimitRequests is the max requests per rate limit window
	RateLimitRequests = 100
	// RateLimitWindow is the time window for rate limiting
	RateLimitWindow = time.Second
	// RequestTimeout limits how long a request can take
	RequestTimeout = 30 * time.Second
)

Server configuration constants

Variables

This section is empty.

Functions

This section is empty.

Types

type ClientCapabilities

type ClientCapabilities struct {
	TextDocument TextDocumentClientCapabilities `json:"textDocument,omitempty"`
}

ClientCapabilities describes the client's capabilities

type CodeAction

type CodeAction struct {
	Title       string         `json:"title"`
	Kind        CodeActionKind `json:"kind,omitempty"`
	Diagnostics []Diagnostic   `json:"diagnostics,omitempty"`
	IsPreferred bool           `json:"isPreferred,omitempty"`
	Edit        *WorkspaceEdit `json:"edit,omitempty"`
	Command     *Command       `json:"command,omitempty"`
}

CodeAction represents a code action

type CodeActionContext

type CodeActionContext struct {
	Diagnostics []Diagnostic     `json:"diagnostics"`
	Only        []CodeActionKind `json:"only,omitempty"`
}

CodeActionContext contains additional diagnostic information

type CodeActionKind

type CodeActionKind string

CodeActionKind represents the kind of code action

const (
	CodeActionQuickFix       CodeActionKind = "quickfix"
	CodeActionRefactor       CodeActionKind = "refactor"
	CodeActionSource         CodeActionKind = "source"
	CodeActionSourceOrganize CodeActionKind = "source.organizeImports"
)

type CodeActionOptions

type CodeActionOptions struct {
	CodeActionKinds []CodeActionKind `json:"codeActionKinds,omitempty"`
}

CodeActionOptions describes code action options

type CodeActionParams

type CodeActionParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
	Range        Range                  `json:"range"`
	Context      CodeActionContext      `json:"context"`
}

CodeActionParams is the parameters for textDocument/codeAction

type Command

type Command struct {
	Title     string        `json:"title"`
	Command   string        `json:"command"`
	Arguments []interface{} `json:"arguments,omitempty"`
}

Command represents a command to be executed

type CompletionClientCapabilities

type CompletionClientCapabilities struct {
	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
	CompletionItem      *struct {
		SnippetSupport bool `json:"snippetSupport,omitempty"`
	} `json:"completionItem,omitempty"`
}

CompletionClientCapabilities describes completion capabilities

type CompletionContext

type CompletionContext struct {
	TriggerKind      CompletionTriggerKind `json:"triggerKind"`
	TriggerCharacter string                `json:"triggerCharacter,omitempty"`
}

CompletionContext provides additional information about the context

type CompletionItem

type CompletionItem struct {
	Label            string             `json:"label"`
	Kind             CompletionItemKind `json:"kind,omitempty"`
	Detail           string             `json:"detail,omitempty"`
	Documentation    interface{}        `json:"documentation,omitempty"`
	InsertText       string             `json:"insertText,omitempty"`
	InsertTextFormat InsertTextFormat   `json:"insertTextFormat,omitempty"`
}

CompletionItem represents a completion suggestion

type CompletionItemKind

type CompletionItemKind int

CompletionItemKind defines the kind of completion item

const (
	TextCompletion     CompletionItemKind = 1
	MethodCompletion   CompletionItemKind = 2
	FunctionCompletion CompletionItemKind = 3
	KeywordCompletion  CompletionItemKind = 14
	SnippetCompletion  CompletionItemKind = 15
)

type CompletionList

type CompletionList struct {
	IsIncomplete bool             `json:"isIncomplete"`
	Items        []CompletionItem `json:"items"`
}

CompletionList represents a list of completion items

type CompletionOptions

type CompletionOptions struct {
	TriggerCharacters []string `json:"triggerCharacters,omitempty"`
	ResolveProvider   bool     `json:"resolveProvider,omitempty"`
}

CompletionOptions describes completion options

type CompletionParams

type CompletionParams struct {
	TextDocumentPositionParams
	Context *CompletionContext `json:"context,omitempty"`
}

CompletionParams describes completion request parameters

type CompletionTriggerKind

type CompletionTriggerKind int

CompletionTriggerKind describes how completion was triggered

const (
	// Invoked means completion was invoked explicitly
	Invoked CompletionTriggerKind = 1
	// TriggerCharacter means completion was triggered by a character
	TriggerCharacter CompletionTriggerKind = 2
	// TriggerForIncompleteCompletions means re-triggered for incomplete completions
	TriggerForIncompleteCompletions CompletionTriggerKind = 3
)

type Diagnostic

type Diagnostic struct {
	Range              Range                          `json:"range"`
	Severity           DiagnosticSeverity             `json:"severity,omitempty"`
	Code               interface{}                    `json:"code,omitempty"`
	Source             string                         `json:"source,omitempty"`
	Message            string                         `json:"message"`
	RelatedInformation []DiagnosticRelatedInformation `json:"relatedInformation,omitempty"`
}

Diagnostic represents a diagnostic (error, warning, etc.)

type DiagnosticRelatedInformation

type DiagnosticRelatedInformation struct {
	Location Location `json:"location"`
	Message  string   `json:"message"`
}

DiagnosticRelatedInformation provides additional context

type DiagnosticSeverity

type DiagnosticSeverity int

DiagnosticSeverity represents the severity of a diagnostic

const (
	// SeverityError reports an error
	SeverityError DiagnosticSeverity = 1
	// SeverityWarning reports a warning
	SeverityWarning DiagnosticSeverity = 2
	// SeverityInformation reports information
	SeverityInformation DiagnosticSeverity = 3
	// SeverityHint reports a hint
	SeverityHint DiagnosticSeverity = 4
)

type DidChangeTextDocumentParams

type DidChangeTextDocumentParams struct {
	TextDocument   VersionedTextDocumentIdentifier  `json:"textDocument"`
	ContentChanges []TextDocumentContentChangeEvent `json:"contentChanges"`
}

DidChangeTextDocumentParams is sent when a document changes

type DidCloseTextDocumentParams

type DidCloseTextDocumentParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
}

DidCloseTextDocumentParams is sent when a document is closed

type DidOpenTextDocumentParams

type DidOpenTextDocumentParams struct {
	TextDocument TextDocumentItem `json:"textDocument"`
}

DidOpenTextDocumentParams is sent when a document is opened

type DidSaveTextDocumentParams

type DidSaveTextDocumentParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
	Text         string                 `json:"text,omitempty"`
}

DidSaveTextDocumentParams is sent when a document is saved

type Document

type Document struct {
	URI        string
	LanguageID string
	Version    int
	Content    string
	Lines      []string // Cached line splits
}

Document represents an open SQL document

func (*Document) GetWordAtPosition

func (doc *Document) GetWordAtPosition(pos Position) string

GetWordAtPosition returns the word at the given position Uses rune-based indexing for proper UTF-8 handling

type DocumentFormattingParams

type DocumentFormattingParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
	Options      FormattingOptions      `json:"options"`
}

DocumentFormattingParams describes formatting request parameters

type DocumentManager

type DocumentManager struct {
	// contains filtered or unexported fields
}

DocumentManager manages open documents

func NewDocumentManager

func NewDocumentManager() *DocumentManager

NewDocumentManager creates a new document manager

func (*DocumentManager) Close

func (dm *DocumentManager) Close(uri string)

Close removes a document from the manager

func (*DocumentManager) Get

func (dm *DocumentManager) Get(uri string) (*Document, bool)

Get retrieves a copy of a document to avoid race conditions The returned document is a snapshot and modifications won't affect the original

func (*DocumentManager) GetContent

func (dm *DocumentManager) GetContent(uri string) (string, bool)

GetContent retrieves a document's content

func (*DocumentManager) Open

func (dm *DocumentManager) Open(uri, languageID string, version int, content string)

Open adds a document to the manager

func (*DocumentManager) Update

func (dm *DocumentManager) Update(uri string, version int, changes []TextDocumentContentChangeEvent)

Update updates a document's content

type DocumentSymbol

type DocumentSymbol struct {
	Name           string           `json:"name"`
	Detail         string           `json:"detail,omitempty"`
	Kind           SymbolKind       `json:"kind"`
	Range          Range            `json:"range"`
	SelectionRange Range            `json:"selectionRange"`
	Children       []DocumentSymbol `json:"children,omitempty"`
}

DocumentSymbol represents a symbol in a document (hierarchical)

type DocumentSymbolParams

type DocumentSymbolParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
}

DocumentSymbolParams is the parameters for textDocument/documentSymbol

type FormattingOptions

type FormattingOptions struct {
	TabSize                int  `json:"tabSize"`
	InsertSpaces           bool `json:"insertSpaces"`
	TrimTrailingWhitespace bool `json:"trimTrailingWhitespace,omitempty"`
	InsertFinalNewline     bool `json:"insertFinalNewline,omitempty"`
	TrimFinalNewlines      bool `json:"trimFinalNewlines,omitempty"`
}

FormattingOptions describes formatting options

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler processes LSP requests and notifications

func NewHandler

func NewHandler(server *Server) *Handler

NewHandler creates a new LSP request handler

func (*Handler) HandleNotification

func (h *Handler) HandleNotification(method string, params json.RawMessage)

HandleNotification processes an LSP notification

func (*Handler) HandleRequest

func (h *Handler) HandleRequest(method string, params json.RawMessage) (interface{}, error)

HandleRequest processes an LSP request and returns a result

type Hover

type Hover struct {
	Contents MarkupContent `json:"contents"`
	Range    *Range        `json:"range,omitempty"`
}

Hover represents hover information

type HoverClientCapabilities

type HoverClientCapabilities struct {
	DynamicRegistration bool     `json:"dynamicRegistration,omitempty"`
	ContentFormat       []string `json:"contentFormat,omitempty"`
}

HoverClientCapabilities describes hover capabilities

type InitializeParams

type InitializeParams struct {
	ProcessID             int                `json:"processId"`
	RootURI               string             `json:"rootUri"`
	RootPath              string             `json:"rootPath,omitempty"`
	Capabilities          ClientCapabilities `json:"capabilities"`
	InitializationOptions interface{}        `json:"initializationOptions,omitempty"`
}

InitializeParams contains initialization options

type InitializeResult

type InitializeResult struct {
	Capabilities ServerCapabilities `json:"capabilities"`
	ServerInfo   *ServerInfo        `json:"serverInfo,omitempty"`
}

InitializeResult is the response to initialize

type InsertTextFormat

type InsertTextFormat int

InsertTextFormat defines the format of the insert text

const (
	PlainTextFormat InsertTextFormat = 1
	SnippetFormat   InsertTextFormat = 2
)

type Location

type Location struct {
	URI   string `json:"uri"`
	Range Range  `json:"range"`
}

Location represents a location in a document

type MarkupContent

type MarkupContent struct {
	Kind  MarkupKind `json:"kind"`
	Value string     `json:"value"`
}

MarkupContent represents markup content

type MarkupKind

type MarkupKind string

MarkupKind describes the markup type

const (
	// PlainText is plain text
	PlainText MarkupKind = "plaintext"
	// Markdown is markdown
	Markdown MarkupKind = "markdown"
)

type MessageType

type MessageType int

MessageType represents the type of message to show

const (
	// MessageError is an error message
	MessageError MessageType = 1
	// MessageWarning is a warning message
	MessageWarning MessageType = 2
	// MessageInfo is an info message
	MessageInfo MessageType = 3
	// MessageLog is a log message
	MessageLog MessageType = 4
)

type Notification

type Notification struct {
	JSONRPC string          `json:"jsonrpc"`
	Method  string          `json:"method"`
	Params  json.RawMessage `json:"params,omitempty"`
}

Notification represents a JSON-RPC 2.0 notification (request without ID)

type ParameterInformation

type ParameterInformation struct {
	Label         interface{} `json:"label"` // string or [int, int]
	Documentation interface{} `json:"documentation,omitempty"`
}

ParameterInformation represents a parameter of a function signature

type Position

type Position struct {
	Line      int `json:"line"`
	Character int `json:"character"`
}

Position in a text document

type PublishDiagnosticsClientCapabilities

type PublishDiagnosticsClientCapabilities struct {
	RelatedInformation bool `json:"relatedInformation,omitempty"`
}

PublishDiagnosticsClientCapabilities describes diagnostics capabilities

type PublishDiagnosticsParams

type PublishDiagnosticsParams struct {
	URI         string       `json:"uri"`
	Version     int          `json:"version,omitempty"`
	Diagnostics []Diagnostic `json:"diagnostics"`
}

PublishDiagnosticsParams is sent to publish diagnostics

type Range

type Range struct {
	Start Position `json:"start"`
	End   Position `json:"end"`
}

Range in a text document

type Request

type Request struct {
	JSONRPC string          `json:"jsonrpc"`
	ID      interface{}     `json:"id,omitempty"`
	Method  string          `json:"method"`
	Params  json.RawMessage `json:"params,omitempty"`
}

Request represents a JSON-RPC 2.0 request message

type Response

type Response struct {
	JSONRPC string         `json:"jsonrpc"`
	ID      interface{}    `json:"id,omitempty"`
	Result  interface{}    `json:"result,omitempty"`
	Error   *ResponseError `json:"error,omitempty"`
}

Response represents a JSON-RPC 2.0 response message

type ResponseError

type ResponseError struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
}

ResponseError represents a JSON-RPC 2.0 error

type SaveOptions

type SaveOptions struct {
	IncludeText bool `json:"includeText,omitempty"`
}

SaveOptions describes save options

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server represents the LSP server

func NewServer

func NewServer(reader io.Reader, writer io.Writer, logger *log.Logger) *Server

NewServer creates a new LSP server

func NewStdioServer

func NewStdioServer(logger *log.Logger) *Server

NewStdioServer creates a new LSP server using stdin/stdout

func (*Server) Documents

func (s *Server) Documents() *DocumentManager

Documents returns the document manager

func (*Server) Logger

func (s *Server) Logger() *log.Logger

Logger returns the server's logger

func (*Server) MaxDocumentSizeBytes

func (s *Server) MaxDocumentSizeBytes() int

MaxDocumentSizeBytes returns the maximum allowed document size

func (*Server) Run

func (s *Server) Run() error

Run starts the server's main loop

func (*Server) SendNotification

func (s *Server) SendNotification(method string, params interface{})

SendNotification sends a notification to the client

func (*Server) SetShutdown

func (s *Server) SetShutdown()

SetShutdown marks the server for shutdown

type ServerCapabilities

type ServerCapabilities struct {
	TextDocumentSync           *TextDocumentSyncOptions `json:"textDocumentSyncOptions,omitempty"`
	CompletionProvider         *CompletionOptions       `json:"completionProvider,omitempty"`
	HoverProvider              bool                     `json:"hoverProvider,omitempty"`
	DocumentFormattingProvider bool                     `json:"documentFormattingProvider,omitempty"`
	DocumentSymbolProvider     bool                     `json:"documentSymbolProvider,omitempty"`
	SignatureHelpProvider      *SignatureHelpOptions    `json:"signatureHelpProvider,omitempty"`
	CodeActionProvider         interface{}              `json:"codeActionProvider,omitempty"` // bool or CodeActionOptions
}

ServerCapabilities describes what the server can do

type ServerInfo

type ServerInfo struct {
	Name    string `json:"name"`
	Version string `json:"version,omitempty"`
}

ServerInfo provides information about the server

type ShowMessageParams

type ShowMessageParams struct {
	Type    MessageType `json:"type"`
	Message string      `json:"message"`
}

ShowMessageParams is used to show a message to the user

type ShutdownResult

type ShutdownResult struct{}

ShutdownResult is the result of a shutdown request

type SignatureHelp

type SignatureHelp struct {
	Signatures      []SignatureInformation `json:"signatures"`
	ActiveSignature int                    `json:"activeSignature,omitempty"`
	ActiveParameter int                    `json:"activeParameter,omitempty"`
}

SignatureHelp represents signature help information

type SignatureHelpOptions

type SignatureHelpOptions struct {
	TriggerCharacters   []string `json:"triggerCharacters,omitempty"`
	RetriggerCharacters []string `json:"retriggerCharacters,omitempty"`
}

SignatureHelpOptions describes signature help options

type SignatureInformation

type SignatureInformation struct {
	Label         string                 `json:"label"`
	Documentation interface{}            `json:"documentation,omitempty"`
	Parameters    []ParameterInformation `json:"parameters,omitempty"`
}

SignatureInformation represents a function signature

type SymbolInformation

type SymbolInformation struct {
	Name          string     `json:"name"`
	Kind          SymbolKind `json:"kind"`
	Location      Location   `json:"location"`
	ContainerName string     `json:"containerName,omitempty"`
}

SymbolInformation represents a symbol (flat list)

type SymbolKind

type SymbolKind int

SymbolKind represents the kind of symbol

const (
	SymbolFile        SymbolKind = 1
	SymbolModule      SymbolKind = 2
	SymbolNamespace   SymbolKind = 3
	SymbolPackage     SymbolKind = 4
	SymbolClass       SymbolKind = 5
	SymbolMethod      SymbolKind = 6
	SymbolProperty    SymbolKind = 7
	SymbolField       SymbolKind = 8
	SymbolConstructor SymbolKind = 9
	SymbolEnum        SymbolKind = 10
	SymbolInterface   SymbolKind = 11
	SymbolFunction    SymbolKind = 12
	SymbolVariable    SymbolKind = 13
	SymbolConstant    SymbolKind = 14
	SymbolString      SymbolKind = 15
	SymbolNumber      SymbolKind = 16
	SymbolBoolean     SymbolKind = 17
	SymbolArray       SymbolKind = 18
	SymbolObject      SymbolKind = 19
	SymbolKey         SymbolKind = 20
	SymbolNull        SymbolKind = 21
	SymbolEnumMember  SymbolKind = 22
	SymbolStruct      SymbolKind = 23
	SymbolEvent       SymbolKind = 24
	SymbolOperator    SymbolKind = 25
	SymbolTypeParam   SymbolKind = 26
)

type TextDocumentClientCapabilities

type TextDocumentClientCapabilities struct {
	Synchronization    *TextDocumentSyncClientCapabilities   `json:"synchronization,omitempty"`
	Completion         *CompletionClientCapabilities         `json:"completion,omitempty"`
	Hover              *HoverClientCapabilities              `json:"hover,omitempty"`
	PublishDiagnostics *PublishDiagnosticsClientCapabilities `json:"publishDiagnostics,omitempty"`
}

TextDocumentClientCapabilities describes text document capabilities

type TextDocumentContentChangeEvent

type TextDocumentContentChangeEvent struct {
	Range       *Range `json:"range,omitempty"`
	RangeLength int    `json:"rangeLength,omitempty"`
	Text        string `json:"text"`
}

TextDocumentContentChangeEvent describes a content change

type TextDocumentEdit

type TextDocumentEdit struct {
	TextDocument VersionedTextDocumentIdentifier `json:"textDocument"`
	Edits        []TextEdit                      `json:"edits"`
}

TextDocumentEdit represents an edit to a single document

type TextDocumentIdentifier

type TextDocumentIdentifier struct {
	URI string `json:"uri"`
}

TextDocumentIdentifier identifies a document

type TextDocumentItem

type TextDocumentItem struct {
	URI        string `json:"uri"`
	LanguageID string `json:"languageId"`
	Version    int    `json:"version"`
	Text       string `json:"text"`
}

TextDocumentItem represents a document

type TextDocumentPositionParams

type TextDocumentPositionParams struct {
	TextDocument TextDocumentIdentifier `json:"textDocument"`
	Position     Position               `json:"position"`
}

TextDocumentPositionParams identifies a position in a 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 describes sync capabilities

type TextDocumentSyncKind

type TextDocumentSyncKind int

TextDocumentSyncKind defines how the client syncs document changes

const (
	// SyncNone means documents should not be synced at all
	SyncNone TextDocumentSyncKind = 0
	// SyncFull means documents are synced by sending the full content
	SyncFull TextDocumentSyncKind = 1
	// SyncIncremental means documents are synced by sending incremental updates
	SyncIncremental TextDocumentSyncKind = 2
)

type TextDocumentSyncOptions

type TextDocumentSyncOptions struct {
	OpenClose bool                 `json:"openClose,omitempty"`
	Change    TextDocumentSyncKind `json:"change,omitempty"`
	Save      *SaveOptions         `json:"save,omitempty"`
}

TextDocumentSyncOptions describes how documents are synced

type TextEdit

type TextEdit struct {
	Range   Range  `json:"range"`
	NewText string `json:"newText"`
}

TextEdit represents a text edit

type VersionedTextDocumentIdentifier

type VersionedTextDocumentIdentifier struct {
	TextDocumentIdentifier
	Version int `json:"version"`
}

VersionedTextDocumentIdentifier identifies a specific version of a document

type WorkspaceEdit

type WorkspaceEdit struct {
	Changes         map[string][]TextEdit `json:"changes,omitempty"`
	DocumentChanges []TextDocumentEdit    `json:"documentChanges,omitempty"`
}

WorkspaceEdit represents changes to be applied to a workspace

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL