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
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