code-reviewer
Advanced code review skill with multi-language support and best practices enforcement
When & Why to Use This Skill
The Code Reviewer skill is a comprehensive automated code analysis tool designed to enhance software quality across multiple programming languages including JavaScript, Python, Java, Go, and Rust. It streamlines the development workflow by enforcing industry best practices, detecting security vulnerabilities (OWASP Top 10), and providing actionable insights into code complexity and maintainability to reduce technical debt.
Use Cases
- Automated Pull Request Audits: Integrate into CI/CD pipelines to automatically scan code changes for syntax errors, style violations, and potential bugs before human review.
- Security Vulnerability Scanning: Proactively identify security flaws, such as injection vulnerabilities and sensitive data exposure, across diverse polyglot codebases.
- Technical Debt Assessment: Utilize cyclomatic complexity and maintainability index metrics to pinpoint over-complicated code sections that require refactoring.
- Best Practice Enforcement: Ensure team-wide adherence to SOLID principles, DRY patterns, and specific naming conventions through automated linting and design pattern detection.
- Performance Optimization: Identify memory leaks, inefficient database queries, and algorithmic bottlenecks during the development phase to ensure high-performance software delivery.
| name | code-reviewer |
|---|---|
| version | 1.0.0 |
| description | Advanced code review skill with multi-language support and best practices enforcement |
| author | DevOps Team |
| tags | [code-quality, review, static-analysis, best-practices] |
Code Reviewer Skill
Overview
The Code Reviewer skill provides comprehensive code analysis capabilities across multiple programming languages, enforcing best practices, identifying bugs, and suggesting improvements.
Features
1. Static Code Analysis
- Syntax error detection
- Type checking
- Dead code identification
- Unused variable detection
- Import optimization
2. Code Quality Metrics
- Cyclomatic complexity
- Code duplication
- Test coverage analysis
- Maintainability index
- Technical debt calculation
3. Security Analysis
- OWASP Top 10 vulnerability detection
- Sensitive data exposure checks
- Injection vulnerability scanning
- Authentication/authorization issues
- Cryptographic weaknesses
4. Best Practices Enforcement
- Naming conventions
- Code formatting standards
- Design pattern compliance
- SOLID principles adherence
- DRY (Don't Repeat Yourself) validation
5. Performance Analysis
- Algorithm complexity analysis
- Memory leak detection
- Database query optimization
- Caching opportunities
- Resource utilization
Configuration
{
"code_reviewer": {
"enabled": true,
"languages": {
"javascript": {
"linter": "eslint",
"config": ".eslintrc.json",
"rules": {
"complexity": {"max": 10},
"line_length": {"max": 100},
"function_length": {"max": 50}
}
},
"python": {
"linter": "pylint",
"config": ".pylintrc",
"rules": {
"complexity": {"max": 10},
"line_length": {"max": 120},
"function_length": {"max": 50}
}
}
},
"security": {
"enabled": true,
"scanners": ["semgrep", "bandit", "snyk"]
},
"performance": {
"enabled": true,
"profiling": true
},
"reporting": {
"format": ["json", "markdown", "html"],
"include_suggestions": true,
"severity_threshold": "warning"
}
}
}
Usage Examples
Basic Code Review
// Input code to review
function calculatePrice(items) {
let total = 0;
for(var i = 0; i < items.length; i++) {
total = total + items[i].price * items[i].quantity;
}
return total;
}
Review Output
## Code Review Results
### Issues Found: 3
#### 1. Use Modern JavaScript Syntax (Style)
**Line 3**: Use `const` or `let` instead of `var`
```diff
- for(var i = 0; i < items.length; i++) {
+ for(let i = 0; i < items.length; i++) {
2. Consider Using Array Methods (Performance)
Lines 3-5: Use reduce() for better readability and performance
function calculatePrice(items) {
return items.reduce((total, item) =>
total + item.price * item.quantity, 0
);
}
3. Add Input Validation (Security)
Line 1: Add validation for undefined/null input
function calculatePrice(items) {
if (!items || !Array.isArray(items)) {
throw new Error('Invalid input: items must be an array');
}
// ... rest of function
}
Metrics
- Complexity: 2 (Good ✅)
- Maintainability: 85/100 (Good ✅)
- Test Coverage: 0% (Needs Improvement ❌)
## Advanced Features
### Multi-file Analysis
```python
# Example: Analyzing Python module dependencies
class CodeAnalyzer:
def analyze_imports(self, file_path):
"""Analyze import statements for circular dependencies"""
imports = self.extract_imports(file_path)
circular_deps = self.detect_circular_deps(imports)
unused_imports = self.find_unused_imports(imports)
return {
'circular_dependencies': circular_deps,
'unused_imports': unused_imports,
'import_depth': self.calculate_import_depth(imports)
}
Design Pattern Detection
// Detects and validates design pattern implementations
public class PatternDetector {
public List<Pattern> detectPatterns(String code) {
List<Pattern> patterns = new ArrayList<>();
if (isSingleton(code)) {
patterns.add(new Pattern("Singleton",
validateSingleton(code)));
}
if (isFactory(code)) {
patterns.add(new Pattern("Factory",
validateFactory(code)));
}
return patterns;
}
}
Integration with Agents
Security Reviewer Agent Integration
integration:
security_reviewer:
trigger: "on_code_change"
actions:
- scan_vulnerabilities
- check_dependencies
- validate_authentication
Performance Tester Agent Integration
integration:
performance_tester:
trigger: "on_optimization_suggestion"
actions:
- benchmark_before
- apply_optimization
- benchmark_after
- report_improvement
Customization
Adding Custom Rules
// custom-rules.js
module.exports = {
rules: {
'no-console-log': {
create(context) {
return {
CallExpression(node) {
if (node.callee.type === 'MemberExpression' &&
node.callee.object.name === 'console' &&
node.callee.property.name === 'log') {
context.report({
node,
message: 'console.log should not be used in production'
});
}
}
};
}
}
}
};
Language-Specific Configurations
JavaScript/TypeScript
{
"extends": ["airbnb", "plugin:@typescript-eslint/recommended"],
"rules": {
"max-len": ["error", 100],
"complexity": ["error", 10],
"no-unused-vars": "error"
}
}
Python
[MESSAGES CONTROL]
max-line-length=120
max-complexity=10
min-public-methods=1
[DESIGN]
max-args=5
max-attributes=10
max-statements=50
Performance Benchmarks
| Language | Files/Second | Avg Time per File | Memory Usage |
|---|---|---|---|
| JavaScript | 50 | 20ms | 50MB |
| Python | 40 | 25ms | 60MB |
| Java | 30 | 33ms | 80MB |
| Go | 60 | 17ms | 40MB |
| Rust | 45 | 22ms | 55MB |
Best Practices
1. Incremental Reviews
Review code changes incrementally rather than entire codebases:
@code-review --changes-only --since=last-commit
2. Automated PR Reviews
Integrate with pull request workflows:
on: [pull_request]
jobs:
code-review:
runs-on: ubuntu-latest
steps:
- uses: claude/code-reviewer@v1
with:
severity: warning
auto-fix: true
3. Custom Severity Levels
Configure severity based on environment:
{
"environments": {
"development": {"severity": "info"},
"staging": {"severity": "warning"},
"production": {"severity": "error"}
}
}
Troubleshooting
Common Issues
Slow Analysis
- Solution: Limit scope with
--filesflag - Use
.codereviewignorefile
- Solution: Limit scope with
False Positives
- Solution: Adjust rule sensitivity
- Add inline suppressions
Missing Language Support
- Solution: Install language-specific plugins
- Configure custom parsers
API Reference
analyze(code, options)
interface AnalyzeOptions {
language: string;
rules?: RuleSet;
severity?: 'error' | 'warning' | 'info';
autoFix?: boolean;
}
interface AnalyzeResult {
issues: Issue[];
metrics: Metrics;
suggestions: Suggestion[];
autoFixed?: boolean;
}
Review Output Format
interface Issue {
severity: 'error' | 'warning' | 'info';
rule: string;
message: string;
line: number;
column: number;
suggestion?: string;
autoFixable: boolean;
}