Skip to main content

Overview

The Refactron class is the main entry point for all code analysis and refactoring operations.

Constructor

from refactron import Refactron
from refactron.core.config import RefactronConfig

# Default configuration
refactron = Refactron()

# Custom configuration
config = RefactronConfig(
    max_function_complexity=15,
    enabled_analyzers=["security", "complexity"]
)
refactron = Refactron(config)
config
RefactronConfig
default:"None"
Configuration object. If None, uses default configuration.

Methods

analyze()

Analyze a file or directory for issues.
def analyze(target: Union[str, Path]) -> AnalysisResult
target
str | Path
required
Path to file or directory to analyze
Returns: AnalysisResult containing detected issues and metrics Example:
refactron = Refactron()
result = refactron.analyze("myproject/")

print(f"Files analyzed: {result.summary['files_analyzed']}")
print(f"Total issues: {result.summary['total_issues']}")

for issue in result.issues:
    print(f"{issue.level.value}: {issue.message}")

refactor()

Refactor a file or directory with intelligent transformations.
def refactor(
    target: Union[str, Path],
    preview: bool = True,
    operation_types: Optional[List[str]] = None
) -> RefactorResult
target
str | Path
required
Path to file or directory to refactor
preview
bool
default:"True"
If True, show changes without applying them
operation_types
List[str]
default:"None"
Specific refactoring types to apply. None = all types.Available types:
  • extract_constant
  • add_docstring
  • simplify_conditionals
  • reduce_parameters
Returns: RefactorResult containing operations and status Example:
# Preview all refactorings
result = refactron.refactor("myfile.py", preview=True)
result.show_diff()

# Apply specific refactorings
result = refactron.refactor(
    "myfile.py",
    preview=False,
    operation_types=["extract_constant", "add_docstring"]
)

if result.success:
    print(f"Applied {len(result.operations)} refactorings")
    print(f"Backup: {result.backup_path}")

record_feedback()

Record developer feedback on a refactoring suggestion.
def record_feedback(
    operation_id: str,
    action: str,
    reason: Optional[str] = None,
    operation: Optional[RefactoringOperation] = None
) -> None
operation_id
str
required
Unique identifier for the refactoring operation
action
str
required
Feedback action: "accepted", "rejected", or "ignored"
reason
str
default:"None"
Optional reason for the feedback
operation
RefactoringOperation
default:"None"
The refactoring operation object (for pattern learning)
Example:
result = refactron.refactor("myfile.py", preview=True)

for op in result.operations:
    refactron.record_feedback(
        operation_id=op.operation_id,
        action="accepted",
        reason="Improved readability",
        operation=op
    )

get_python_files()

Get all Python files in a directory, respecting exclude patterns.
def get_python_files(directory: Path) -> List[Path]
directory
Path
required
Directory to search for Python files
Returns: List of Python file paths Example:
from pathlib import Path

refactron = Refactron()
files = refactron.get_python_files(Path("myproject"))

print(f"Found {len(files)} Python files")
for file in files:
    print(file)

get_performance_stats()

Get performance statistics from optimization components.
def get_performance_stats() -> Dict[str, Any]
Returns: Dictionary containing performance statistics Example:
stats = refactron.get_performance_stats()

print(f"AST cache hits: {stats['ast_cache']['hits']}")
print(f"AST cache misses: {stats['ast_cache']['misses']}")
print(f"Parallel jobs: {stats['parallel']['max_workers']}")

clear_caches()

Clear all performance-related caches.
def clear_caches() -> None
Example:
# Clear caches after major code changes
refactron.clear_caches()

detect_project_root ()

Detect project root by looking for common markers.
def detect_project_root(file_path: Path) -> Path
file_path
Path
required
File path to start searching from
Returns: Path to project root Example:
from pathlib import Path

refactron = Refactron()
root = refactron.detect_project_root(Path("src/module/file.py"))
print(f"Project root: {root}")

Properties

config

Access current configuration.
config = refactron.config
print(f"Max complexity: {config.max_function_complexity}")

analyzers

List of enabled analyzers.
analyzers = refactron.analyzers
print(f"Enabled analyzers: {[a.__class__.__name__ for a in analyzers]}")

refactorers

List of enabled refactorers.
refactorers = refactron.refactorers
print(f"Enabled refactorers: {[r.__class__.__name__ for r in refactorers]}")

Complete Example

from refactron import Refactron
from refactron.core.config import RefactronConfig
from pathlib import Path

# Configure Refactron
config = RefactronConfig(
    max_function_complexity=15,
    max_function_length=100,
    enabled_analyzers=["security", "complexity", "code_smell"],
    enabled_refactorers=["extract_constant", "add_docstring"],
    enable_pattern_learning=True
)

# Initialize
refactron = Refactron(config)

# Analyze project
print("Analyzing project...")
analysis = refactron.analyze("myproject/")

# Print summary
print(f"\nAnalysis Summary:")
print(f"  Files analyzed: {analysis.summary['files_analyzed']}")
print(f"  Total issues: {analysis.summary['total_issues']}")

# Print critical issues
critical = [i for i in analysis.issues if i.level.value == "CRITICAL"]
if critical:
    print(f"\nCritical Issues ({len(critical)}):")
    for issue in critical:
        print(f"  {issue.file_path}:{issue.line_number} - {issue.message}")

# Refactor with preview
print("\nGenerating refactoring suggestions...")
result = refactron.refactor("myproject/", preview=True)

# Review and apply specific operations
for op in result.operations:
    print(f"\nOperation: {op.operation_type}")
    print(f"  File: {op.file_path}:{op.line_number}")
    print(f"  Risk: {op.risk_score}")
    print(f"  Description: {op.description}")
    
    # Record feedback
    refactron.record_feedback(
        operation_id=op.operation_id,
        action="accepted",
        reason="Approved after review",
        operation=op
    )

# Get performance stats
stats = refactron.get_performance_stats()
print(f"\nPerformance:")
print(f"  AST cache hit rate: {stats['ast_cache']['hit_rate']:.1%}")

print("\nRefactoring complete!")

Next Steps