A Python-based command-line tool that provides comprehensive analysis of source code repositories. Think of it as an MRI scanner for your codebase - it doesn’t just show you what’s there, but reveals the health and complexity of your code structure.
.gitignore
patterns at all directory levelsThe Code Analyzer provides advanced AST-based duplicate code detection with the following features:
Cross-File Detection: Finds duplicate code patterns across different files in your project
Similarity Scoring: Provides quantitative similarity measures between code blocks (0.0 to 1.0)
The duplicate detection can be customized with the duplicates
command:
# Analyze for exact duplicates only (complexity analysis is now included by default)
uv run refactoroscope duplicates src/ --type exact
# Find similar code with minimum similarity threshold
uv run refactoroscope duplicates src/ --min-similarity 0.8
# Focus on renamed clones
uv run refactoroscope duplicates src/ --type renamed
First, install uv if you haven’t already:
curl -LsSf https://astral.sh/uv/install.sh | sh
Then install the dependencies:
uv sync
Or install directly from PyPI:
pip install refactoroscope
# Analyze current directory (complexity analysis is now enabled by default)
uv run refactoroscope analyze .
# Analyze specific directory
uv run refactoroscope analyze /path/to/project
# Disable complexity analysis (if needed)
uv run refactoroscope analyze . --no-complexity
# Enable AI-powered suggestions
uv run refactoroscope analyze . --ai
Refactoroscope provides AI-powered code quality suggestions using multiple AI providers including OpenAI, Anthropic, Google, and Ollama. The AI analysis provides intelligent insights on code readability, performance, potential bugs, and security issues.
# Analyze with AI only
uv run refactoroscope ai /path/to/project
# Analyze with a specific AI provider
uv run refactoroscope ai /path/to/project --provider openai
# Enable AI suggestions during regular analysis
uv run refactoroscope analyze . --ai
# Enable AI suggestions during watching
uv run refactoroscope watch . --ai
To use AI-powered features, you need to configure at least one AI provider in your .refactoroscope.yml
configuration file:
# AI configuration
ai:
# Enable AI-powered code suggestions
enable_ai_suggestions: true
# Maximum file size to analyze with AI (in bytes)
max_file_size: 50000
# Whether to cache AI analysis results
cache_results: true
# Cache time-to-live in seconds
cache_ttl: 3600
# Preference order for AI providers
provider_preferences:
- "openai"
- "anthropic"
- "google"
- "ollama"
# Provider configurations
providers:
openai:
# API key (can also be set via OPENAI_API_KEY environment variable)
# api_key: "your-openai-api-key"
# Model to use
model: "gpt-3.5-turbo"
# Whether this provider is enabled
enabled: true
anthropic:
# API key (can also be set via ANTHROPIC_API_KEY environment variable)
# api_key: "your-anthropic-api-key"
# Model to use
model: "claude-3-haiku-20240307"
# Whether this provider is enabled
enabled: true
google:
# API key (can also be set via GOOGLE_API_KEY environment variable)
# api_key: "your-google-api-key"
# Model to use
model: "gemini-pro"
# Whether this provider is enabled
enabled: true
ollama:
# Ollama doesn't require API keys
# Model to use
model: "llama2"
# Base URL for Ollama (default is localhost)
base_url: "http://localhost:11434"
# Whether this provider is enabled
enabled: true
For cloud-based providers, you can set API keys via environment variables:
OPENAI_API_KEY
for OpenAIANTHROPIC_API_KEY
for AnthropicGOOGLE_API_KEY
for Google# Watch current directory for changes (complexity analysis is now enabled by default)
uv run refactoroscope watch .
# Enable AI-powered suggestions during watching
uv run refactoroscope watch . --ai
# Disable complexity analysis (if needed)
uv run refactoroscope watch . --no-complexity
# Display in terminal (default)
uv run refactoroscope analyze . --output terminal
# Export to JSON
uv run refactoroscope analyze . --export json --export-dir ./reports
# Export to multiple formats
uv run refactoroscope analyze . --export json,html --export-dir ./reports
# Compare two analysis reports
uv run refactoroscope compare reports/report1.json reports/report2.json
# Initialize configuration file
uv run refactoroscope init
# Analyze for duplicate code with advanced options
uv run refactoroscope duplicates src/ --type exact --min-similarity 0.9
# Analyze for unused code
uv run refactoroscope unused src/
# Analyze for unused files
uv run refactoroscope unused-files src/
# Analyze for unused files with confidence threshold
uv run refactoroscope unused-files src/ --confidence 0.7
Refactoroscope can identify potentially unused code in your Python projects using AST-based static analysis. This feature helps you identify dead code that can be safely removed to reduce technical debt.
The unused code detection identifies:
# Analyze for unused code
uv run refactoroscope unused src/
# Get JSON output for unused code
uv run refactoroscope unused src/ --output json
The analysis provides confidence scores for each finding to help you distinguish between likely unused code and potential false positives.
Refactoroscope can also identify completely unused files in your Python projects using dependency graph analysis. This feature helps you identify entire files that are never imported by any other file in your project.
# Analyze for unused files
uv run refactoroscope unused-files src/
# Analyze for unused files with confidence threshold
uv run refactoroscope unused-files src/ --confidence 0.7
# Get JSON output for unused files
uv run refactoroscope unused-files src/ --output json
The unused file detection uses the following approach:
__main__
guards, common entry point names)The Code Analyzer supports 60+ programming languages:
Create a .refactoroscope.yml
file in your project root:
version: 1.0
# Language-specific settings
languages:
python:
max_line_length: 88
complexity_threshold: 10
typescript:
max_line_length: 100
complexity_threshold: 15
# Analysis rules
analysis:
ignore_patterns:
- "*.generated.*"
- "*_pb2.py"
- "*.min.js"
- "node_modules/"
- ".git/"
complexity:
include_docstrings: false
count_assertions: true
thresholds:
file_too_long: 500
function_too_complex: 20
class_too_large: 1000
# Output preferences
output:
format: "terminal" # terminal, json, html, csv
theme: "monokai"
show_recommendations: true
export_path: "./reports"
# AI configuration
ai:
# Enable AI-powered code suggestions
enable_ai_suggestions: false
# Maximum file size to analyze with AI (in bytes)
max_file_size: 50000
# Whether to cache AI analysis results
cache_results: true
# Cache time-to-live in seconds
cache_ttl: 3600
# Preference order for AI providers
provider_preferences:
- "openai"
- "anthropic"
- "google"
- "ollama"
# Provider configurations
providers:
openai:
# API key (can also be set via OPENAI_API_KEY environment variable)
# api_key: "your-openai-api-key"
# Model to use
model: "gpt-3.5-turbo"
# Whether this provider is enabled
enabled: false
anthropic:
# API key (can also be set via ANTHROPIC_API_KEY environment variable)
# api_key: "your-anthropic-api-key"
# Model to use
model: "claude-3-haiku-20240307"
# Whether this provider is enabled
enabled: false
google:
# API key (can also be set via GOOGLE_API_KEY environment variable)
# api_key: "your-google-api-key"
# Model to use
model: "gemini-pro"
# Whether this provider is enabled
enabled: false
ollama:
# Ollama doesn't require API keys
# Model to use
model: "llama2"
# Base URL for Ollama (default is localhost)
base_url: "http://localhost:11434"
# Whether this provider is enabled
enabled: false
Code Analyzer provides built-in support for popular CI/CD platforms:
To integrate Refactoroscope into your GitHub Actions workflow, create a workflow file in .github/workflows/
:
name: Code Analysis
on: [push, pull_request]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Code Analysis
uses: moinsen-dev/code_analyzer@v0.2.0
with:
args: analyze . --complexity --export json,html
Alternatively, you can install and run it directly:
- name: Install uv
uses: astral-sh/setup-uv@v3
- name: Install Refactoroscope
run: |
uv pip install refactoroscope
- name: Run analysis
run: |
refactoroscope analyze . --complexity --export json,html --export-dir ./reports
For GitLab CI, add this to your .gitlab-ci.yml
:
analyze:
stage: test
script:
- pip install refactoroscope
- refactoroscope analyze . --complexity --export json,html --export-dir ./reports
artifacts:
paths:
- reports/
See CI/CD Integration Guide for more detailed instructions.
For detailed documentation, visit our GitHub Pages site.
See CHANGELOG.md for release history.
We welcome contributions! Please see our Contributing Guide for more information.
New versions are automatically published to PyPI when a new tag is created following the pattern v*.*.*
. To release a new version:
pyproject.toml
and setup.py
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0