Documentation
¶
Index ¶
- Variables
- func DetectLanguage(filePath string) string
- func GetAvailableLanguages(ctx context.Context, logger *logrus.Logger) []string
- func StopCleanupRoutine(cache *sync.Map, logger *logrus.Logger)
- type ChangeSnippet
- type CodeRenameTool
- type LSPClient
- func (c *LSPClient) Close() (err error)
- func (c *LSPClient) PrepareRename(ctx context.Context, filePath string, line, column int) (string, error)
- func (c *LSPClient) Rename(ctx context.Context, filePath string, line, column int, newName string) (*protocol.WorkspaceEdit, error)
- func (c *LSPClient) SyncDocument(ctx context.Context, filePath string) error
- type LanguageServer
- type ProcessTracker
- type RenameRequest
- type RenameResult
- type RenameTransaction
- func (tx *RenameTransaction) ApplyWithTracking(filePath string, edits []protocol.TextEdit) error
- func (tx *RenameTransaction) BackupFile(filePath string) error
- func (tx *RenameTransaction) Cleanup() error
- func (tx *RenameTransaction) KeepBackups() string
- func (tx *RenameTransaction) PreflightCheck(edit *protocol.WorkspaceEdit) error
- func (tx *RenameTransaction) Rollback() ([]string, error)
- type ServerCache
Constants ¶
This section is empty.
Variables ¶
var SupportedServers = []LanguageServer{ {Language: "go", Command: "gopls", Args: []string{"serve"}}, {Language: "typescript", Command: "typescript-language-server", Args: []string{"--stdio"}}, {Language: "javascript", Command: "typescript-language-server", Args: []string{"--stdio"}}, {Language: "python", Command: "pyright-langserver", Args: []string{"--stdio"}}, {Language: "rust", Command: "rust-analyzer", Args: []string{}}, {Language: "bash", Command: "bash-language-server", Args: []string{"start"}}, {Language: "sh", Command: "bash-language-server", Args: []string{"start"}}, {Language: "html", Command: "vscode-html-language-server", Args: []string{"--stdio"}}, {Language: "css", Command: "vscode-css-language-server", Args: []string{"--stdio"}}, {Language: "scss", Command: "vscode-css-language-server", Args: []string{"--stdio"}}, {Language: "less", Command: "vscode-css-language-server", Args: []string{"--stdio"}}, {Language: "json", Command: "vscode-json-language-server", Args: []string{"--stdio"}}, {Language: "yaml", Command: "yaml-language-server", Args: []string{"--stdio"}}, {Language: "c", Command: "clangd", Args: []string{}}, {Language: "cpp", Command: "clangd", Args: []string{}}, {Language: "java", Command: "jdtls", Args: []string{}}, {Language: "swift", Command: "sourcekit-lsp", Args: []string{}}, }
SupportedServers defines LSP servers with rename capability
Functions ¶
func DetectLanguage ¶
DetectLanguage determines the language from a file path
func GetAvailableLanguages ¶
GetAvailableLanguages returns a list of languages with available LSP servers
func StopCleanupRoutine ¶
StopCleanupRoutine stops the background cleanup routine and closes all cached LSP clients Should be called during server shutdown to prevent goroutine leaks This function is idempotent and safe to call multiple times, including before startCleanupRoutine
Types ¶
type ChangeSnippet ¶
type ChangeSnippet struct {
FilePath string `json:"file_path"`
Line int `json:"line"`
Before string `json:"before"`
After string `json:"after"`
}
ChangeSnippet shows a single change in preview mode
type CodeRenameTool ¶
type CodeRenameTool struct{}
CodeRenameTool implements symbol renaming via LSP
func (*CodeRenameTool) Definition ¶
func (t *CodeRenameTool) Definition() mcp.Tool
Definition returns the tool's definition for MCP registration
func (*CodeRenameTool) Execute ¶
func (t *CodeRenameTool) Execute(ctx context.Context, logger *logrus.Logger, cache *sync.Map, args map[string]any) (*mcp.CallToolResult, error)
Execute executes the tool's logic
func (*CodeRenameTool) ProvideExtendedInfo ¶
func (t *CodeRenameTool) ProvideExtendedInfo() *tools.ExtendedHelp
ProvideExtendedInfo implements the ExtendedHelpProvider interface
type LSPClient ¶
type LSPClient struct {
// contains filtered or unexported fields
}
LSPClient wraps an LSP server connection
func NewLSPClient ¶
func NewLSPClient(ctx context.Context, logger *logrus.Logger, server *LanguageServer, filePath string) (*LSPClient, error)
NewLSPClient creates and initialises a new LSP client
func (*LSPClient) PrepareRename ¶
func (c *LSPClient) PrepareRename(ctx context.Context, filePath string, line, column int) (string, error)
PrepareRename calls textDocument/prepareRename to get the current symbol
type LanguageServer ¶
type LanguageServer struct {
Language string // Language name (e.g., "go", "python", "typescript")
Command string // Command to execute (e.g., "gopls", "pyright-langserver")
Args []string // Arguments to pass to the command
}
LanguageServer represents configuration for a language server
func FindServerForLanguage ¶
func FindServerForLanguage(ctx context.Context, logger *logrus.Logger, language string) (*LanguageServer, error)
FindServerForLanguage finds an available LSP server for the given language
type ProcessTracker ¶
type ProcessTracker struct {
// contains filtered or unexported fields
}
ProcessTracker tracks LSP server processes for cleanup
func GetProcessTracker ¶
func GetProcessTracker(logger *logrus.Logger) *ProcessTracker
GetProcessTracker returns the global process tracker instance
func (*ProcessTracker) CleanupOrphaned ¶
func (pt *ProcessTracker) CleanupOrphaned()
CleanupOrphaned kills any orphaned LSP server processes
func (*ProcessTracker) CleanupStale ¶
func (pt *ProcessTracker) CleanupStale(maxAge time.Duration)
CleanupStale kills processes that have been running too long (>5 minutes)
func (*ProcessTracker) Deregister ¶
func (pt *ProcessTracker) Deregister(pid int)
Deregister removes a process from tracking
type RenameRequest ¶
type RenameRequest struct {
FilePath string `json:"file_path"`
Line int `json:"line"`
Column int `json:"column"`
NewName string `json:"new_name"`
Preview bool `json:"preview"`
}
RenameRequest represents a rename operation request
type RenameResult ¶
type RenameResult struct {
FilesModified int `json:"files_modified,omitempty"`
TotalReplacements int `json:"total_replacements,omitempty"`
AffectedFiles []string `json:"affected_files,omitempty"` // List of file paths with change counts
Applied bool `json:"applied,omitempty"` // Only present when true
Error string `json:"error,omitempty"` // Only present on failure
RolledBack bool `json:"rolled_back,omitempty"` // True if rollback was performed
RollbackSuccessful bool `json:"rollback_successful,omitempty"` // True if rollback succeeded
BackupLocation string `json:"backup_location,omitempty"` // Path to backup directory (on failure)
FilesReverted []string `json:"files_reverted,omitempty"` // Files restored during rollback
ChangePreview []ChangeSnippet `json:"change_preview,omitempty"` // Preview of changes (preview mode only)
}
RenameResult represents the result of a rename operation Only returns actionable information - no echo of input parameters
type RenameTransaction ¶
type RenameTransaction struct {
// contains filtered or unexported fields
}
RenameTransaction manages atomic rename operations with rollback support
func NewRenameTransaction ¶
func NewRenameTransaction() (*RenameTransaction, error)
NewRenameTransaction creates a new transaction for atomic rename operations
func (*RenameTransaction) ApplyWithTracking ¶
func (tx *RenameTransaction) ApplyWithTracking(filePath string, edits []protocol.TextEdit) error
ApplyWithTracking applies edits to a file and tracks the modification
func (*RenameTransaction) BackupFile ¶
func (tx *RenameTransaction) BackupFile(filePath string) error
BackupFile creates a backup of a file before modification
func (*RenameTransaction) Cleanup ¶
func (tx *RenameTransaction) Cleanup() error
Cleanup removes the backup directory on successful completion
func (*RenameTransaction) KeepBackups ¶
func (tx *RenameTransaction) KeepBackups() string
KeepBackups preserves the backup directory for debugging
func (*RenameTransaction) PreflightCheck ¶
func (tx *RenameTransaction) PreflightCheck(edit *protocol.WorkspaceEdit) error
PreflightCheck validates all files can be modified before starting transaction
func (*RenameTransaction) Rollback ¶
func (tx *RenameTransaction) Rollback() ([]string, error)
Rollback restores all modified files from backups
type ServerCache ¶
type ServerCache struct {
// contains filtered or unexported fields
}
ServerCache caches LSP server availability
func GetServerCache ¶
func GetServerCache() *ServerCache
GetServerCache returns the global server cache instance
func NewServerCache ¶
func NewServerCache() *ServerCache
NewServerCache creates a new server cache with 5-minute expiry
func (*ServerCache) IsAvailable ¶
func (sc *ServerCache) IsAvailable(command string) (bool, bool)
IsAvailable checks if a language server is available (cached)
func (*ServerCache) SetAvailable ¶
func (sc *ServerCache) SetAvailable(command string, available bool)
SetAvailable sets the availability of a language server