home / skills / el-feo / ai-context / rubocop

rubocop skill

/plugins/ruby-rails/skills/rubocop

npx playbooks add skill el-feo/ai-context --skill rubocop

Review the files below or copy the command above to add this skill to your agents.

Files (7)
SKILL.md
6.5 KB
---
name: rubocop
description: >-
  Ruby static code analyzer and formatter for enforcing style guidelines, detecting bugs,
  and improving code quality. Supports Rails, RSpec, and Performance extensions with safe
  autocorrection capabilities.
---

# RuboCop Code Analysis & Formatting

RuboCop is Ruby's premier static code analyzer (linter) and formatter, based on the community-driven Ruby Style Guide. This skill enables comprehensive code analysis, automatic formatting, and enforcement of coding standards across Ruby projects including Rails applications.

## When to Use This Skill

Claude automatically uses this skill when users:

- Ask to "check", "lint", "analyze", or "review" Ruby code
- Request code formatting or style improvements
- Want to enforce coding standards or style guidelines
- Need to detect potential bugs or code smells
- Ask about RuboCop configuration or setup
- Request Rails, RSpec, or performance-specific analysis
- Want to run autocorrections on Ruby code

## Core Capabilities

**Code Analysis & Linting**
- Detects style violations, bugs, and code smells across all cop departments
- Supports Rails, RSpec, Performance, and custom cop extensions
- Provides detailed offense reports with line numbers and descriptions

**Automatic Code Correction**
- Safe autocorrection (`-a`) for guaranteed-safe fixes
- Unsafe autocorrection (`-A`) for broader but riskier corrections
- Layout-only fixes (`-x`) for formatting without logic changes

**Configuration & Customization**
- Flexible `.rubocop.yml` configuration
- Per-project and per-directory configuration inheritance
- Selective cop enabling/disabling and severity adjustment
- Custom cop development support

**Extension Integration**
- **rubocop-rails**: Rails best practices and conventions
- **rubocop-rspec**: RSpec-specific analysis
- **rubocop-performance**: Performance optimization checks

## Quick Analysis Workflow

### Run Basic Analysis

```bash
# Analyze current directory
rubocop

# Analyze specific files/directories
rubocop app spec lib/important_file.rb

# Show only correctable offenses
rubocop --display-only-correctable
```

### Apply Corrections

```bash
# Safe autocorrection only (recommended)
rubocop -a

# All corrections including unsafe
rubocop -A

# Layout/formatting corrections only
rubocop -x

# Autocorrect specific cops
rubocop -a --only Style/StringLiterals,Layout/TrailingWhitespace
```

### Targeted Analysis

```bash
# Run only specific cops
rubocop --only Style/StringLiterals,Naming/MethodName

# Run all cops except specified
rubocop --except Metrics/MethodLength

# Run only lint cops
rubocop --lint

# Check only Rails-specific issues
rubocop --only Rails
```

## Configuration Essentials

### Basic .rubocop.yml Setup

```yaml
# Enable extensions
plugins:
  - rubocop-rails
  - rubocop-rspec
  - rubocop-performance

AllCops:
  TargetRubyVersion: 3.2
  NewCops: enable  # Auto-enable new cops
  Exclude:
    - 'db/schema.rb'
    - 'vendor/**/*'
    - 'node_modules/**/*'

# Adjust specific cops
Style/StringLiterals:
  EnforcedStyle: double_quotes

Metrics/MethodLength:
  Max: 15
  Exclude:
    - 'spec/**/*'
```

### Common Configuration Patterns

**Inherit from shared config:**
```yaml
inherit_from:
  - .rubocop_todo.yml
  - config/rubocop_defaults.yml
```

**Rails-specific settings:**
```yaml
Rails:
  Enabled: true

Rails/ApplicationRecord:
  Enabled: true
  Exclude:
    - 'db/migrate/**'
```

**RSpec configuration:**
```yaml
RSpec/ExampleLength:
  Max: 10

RSpec/MultipleExpectations:
  Max: 3
```

## Analysis Interpretation

### Understanding Offense Output

```
app/models/user.rb:15:3: C: Style/StringLiterals: Prefer single-quoted strings...
  name = "John Doe"
         ^^^^^^^^^^
```

**Format breakdown:**
- `app/models/user.rb:15:3` - File path, line number, column number
- `C:` - Severity (C=Convention, W=Warning, E=Error, F=Fatal)
- `Style/StringLiterals` - Cop department and name
- Message explains the issue and often suggests fixes

### Severity Levels

- **Convention (C)**: Style/formatting issues
- **Warning (W)**: Potential problems that should be reviewed
- **Error (E)**: Definite problems that need fixing
- **Fatal (F)**: Syntax errors preventing analysis

## Common Workflows

### Initial Project Setup

```bash
# Generate initial configuration
rubocop --init

# Generate .rubocop_todo.yml for existing violations
rubocop --auto-gen-config

# Use todo file to gradually fix issues
# .rubocop.yml:
inherit_from: .rubocop_todo.yml
```

### Pre-commit Integration

```bash
# Check staged files only
git diff --name-only --cached | grep '\.rb$' | xargs rubocop

# With autocorrection
git diff --name-only --cached | grep '\.rb$' | xargs rubocop -a
```

### CI/CD Integration

```bash
# Exit with error code if offenses found
rubocop --format progress --fail-level warning

# Generate formatted reports
rubocop --format json --out rubocop-report.json
rubocop --format html --out rubocop-report.html
```

### Parallel Execution

```bash
# Use all available CPUs (enabled by default)
rubocop --parallel

# Limit CPU usage
PARALLEL_PROCESSOR_COUNT=2 rubocop
```

## Extension-Specific Features

### Rails Analysis

Detects Rails-specific issues:
- ActiveRecord best practices
- Controller and routing conventions
- Migration safety checks
- SQL injection risks

### RSpec Analysis

Enforces RSpec best practices:
- Example organization and naming
- Let vs instance variable usage
- Expectation patterns
- Test file structure

### Performance Analysis

Identifies performance optimizations:
- Inefficient collection methods
- String concatenation issues
- Unnecessary array allocations
- Regex compilation optimizations

## Troubleshooting

**"Unknown cop" errors:**
- Ensure required gems are installed (`rubocop-rails`, `rubocop-rspec`, etc.)
- Add to `.rubocop.yml`: `plugins: [rubocop-rails]`

**Autocorrection not working:**
- Some cops don't support autocorrection
- Use `-A` for unsafe corrections
- Check cop is enabled in configuration

**Performance issues:**
- Use `--parallel` for faster execution
- Add `UseCache: true` under `AllCops` in config
- Exclude large generated files

## Additional Resources

- [Configuration Guide](references/configuration_guide.md) - Comprehensive configuration reference
- [Cop Reference](references/cop_reference.md) - All cop departments and their responsibilities
- [Extensions Guide](references/extensions_guide.md) - Rails, RSpec, Performance extension details
- [Autocorrect Guide](references/autocorrect_guide.md) - Safe vs unsafe corrections explained
- [Custom Cops Guide](references/custom_cops_guide.md) - Creating custom cops for your project