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
- type ClientCapabilities
- type CodeAction
- type CodeActionContext
- type CodeActionKind
- type CodeActionOptions
- type CodeActionParams
- type Command
- type CompletionClientCapabilities
- type CompletionContext
- type CompletionItem
- type CompletionItemKind
- type CompletionList
- type CompletionOptions
- type CompletionParams
- type CompletionTriggerKind
- type Diagnostic
- type DiagnosticRelatedInformation
- type DiagnosticSeverity
- type DidChangeTextDocumentParams
- type DidCloseTextDocumentParams
- type DidOpenTextDocumentParams
- type DidSaveTextDocumentParams
- type Document
- type DocumentFormattingParams
- type DocumentManager
- func (dm *DocumentManager) Close(uri string)
- func (dm *DocumentManager) Get(uri string) (*Document, bool)
- func (dm *DocumentManager) GetContent(uri string) (string, bool)
- func (dm *DocumentManager) Open(uri, languageID string, version int, content string)
- func (dm *DocumentManager) Update(uri string, version int, changes []TextDocumentContentChangeEvent)
- type DocumentSymbol
- type DocumentSymbolParams
- type FormattingOptions
- type Handler
- type Hover
- type HoverClientCapabilities
- type InitializeParams
- type InitializeResult
- type InsertTextFormat
- type Location
- type MarkupContent
- type MarkupKind
- type MessageType
- type Notification
- type ParameterInformation
- type Position
- type PublishDiagnosticsClientCapabilities
- type PublishDiagnosticsParams
- type Range
- type Request
- type Response
- type ResponseError
- type SaveOptions
- type Server
- type ServerCapabilities
- type ServerInfo
- type ShowMessageParams
- type ShutdownResult
- type SignatureHelp
- type SignatureHelpOptions
- type SignatureInformation
- type SymbolInformation
- type SymbolKind
- type TextDocumentClientCapabilities
- type TextDocumentContentChangeEvent
- type TextDocumentEdit
- type TextDocumentIdentifier
- type TextDocumentItem
- type TextDocumentPositionParams
- type TextDocumentSyncClientCapabilities
- type TextDocumentSyncKind
- type TextDocumentSyncOptions
- type TextEdit
- type VersionedTextDocumentIdentifier
- type WorkspaceEdit
Constants ¶
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
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 ¶
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 ¶
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 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 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 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 NewStdioServer ¶
NewStdioServer creates a new LSP server using stdin/stdout
func (*Server) Documents ¶
func (s *Server) Documents() *DocumentManager
Documents returns the document manager
func (*Server) MaxDocumentSizeBytes ¶
MaxDocumentSizeBytes returns the maximum allowed document size
func (*Server) SendNotification ¶
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 ¶
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 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