mcpField
R
rubocop-fixer

rubocop-fixer

github.com/majesticlabs-devTesting & quality5062 installsUpdated 7w ago
Repository

About rubocop-fixer

rubocop-fixer is a skill for resolving Rubocop violations in Rails projects while following each project's configuration. It covers checking cops, applying common fixes, handling intentional exceptions, and verifying the results.

Key features

  1. 01Inspect Rubocop configuration
  2. 02Run checks on projects or files
  3. 03Explain violations using cop documentation
  4. 04Apply common Ruby and Rails fixes
  5. 05Generate TODO files for legacy violations
  6. 06Verify and report remaining issues

Use cases

  1. 01Fix style violations in a Rails project
  2. 02Check a specific file or cop
  3. 03Triage large sets of legacy violations

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill rubocop-fixer

After installing, type/rubocop-fixerin Claude Code to confirm it loaded.

Details

From the project README

Rubocop Fixer

You fix Rubocop violations in Rails projects while respecting project-specific configurations.

Process

1. Check Configuration

First, understand the project's Rubocop setup:

# Check for config file
cat .rubocop.yml

# Check inherited configs
cat .rubocop_todo.yml 2>/dev/null
2. Run Rubocop
# All violations
bundle exec rubocop

# Specific file
bundle exec rubocop app/models/user.rb

# Specific cop
bundle exec rubocop --only Style/StringLiterals

# Auto-correct safe violations
bundle exec rubocop -a

# Auto-correct all (including unsafe)
bundle exec rubocop -A
3. Understand the Violation

Before fixing, understand why the cop exists:

# Show cop documentation
bundle exec rubocop --show-cops Style/StringLiterals

Common Violations & Fixes

Style/StringLiterals
# Before (violation)
name = "hello"

# After (if configured for single quotes)
name = 'hello'

# Note: Use double quotes when interpolation or escapes needed
name = "hello #{user}"
Style/FrozenStringLiteralComment
# Add at top of file
# frozen_string_literal: true

class User
  # ...
end
Layout/LineLength
# Before (too long)
def very_long_method_name(first_parameter, second_parameter, third_parameter, fourth_parameter)

# After
def very_long_method_name(
  first_parameter,
  second_parameter,
  third_parameter,
  fourth_parameter
)
Style/Documentation
# Before (missing documentation)
class UserService
end

# After
# Handles user-related business logic including registration
# and profile management.
class UserService
end

# Or disable for specific class
class UserService # rubocop:disable Style/Documentation
end
Metrics/MethodLength
# Before (too long)
def process_order
  validate_items
  calculate_subtotal
  apply_discounts
  calculate_tax
  calculate_shipping
  finalize_total
  create_invoice
  send_confirmation
  update_inventory
  notify_warehouse
end

# After (extract methods)
def process_order
  prepare_order
  complete_order
  post_order_tasks
end

private

def prepare_order
  validate_items
  calculate_totals
end

def calculate_totals
  calculate_subtotal
  apply_discounts
  calculate_tax
  calculate_shipping
  finalize_total
end

def complete_order
  create_invoice
  send_confirmation
end

def post_order_tasks
  update_inventory
  notify_warehouse
end
Metrics/AbcSize

ABC = Assignments, Branches, Conditions

# Before (high ABC)
def process(user)
  if user.active?
    user.name = params[:name]
    user.email = params[:email]
    user.role = params[:role]
    user.save!
    notify(user)
  end
end

# After (lower ABC)
def process(user)
  return unless user.active?

  update_user_attributes(user)
  user.save!
  notify(user)
end

def update_user_attributes(user)
  user.assign_attributes(user_params)
end

def user_params
  params.slice(:name, :email, :role)
end
Rails/HasManyOrHasOneDependent
# Before
has_many :posts

# After
has_many :posts, dependent: :destroy
# or
has_many :posts, dependent: :nullify
Rails/InverseOf
# Before
has_many :posts
belongs_to :user

# After
has_many :posts, inverse_of: :user
belongs_to :user, inverse_of: :posts

Inline Disabling

When a violation is intentional:

# Disable for line
some_code # rubocop:disable Style/SomeCop

# Disable for block
# rubocop:disable Style/SomeCop
some_code
more_code
# rubocop:enable Style/SomeCop

# Disable for file (at top)
# rubocop:disable Style/SomeCop

Generating TODO File

For legacy codebases with many violations:

# Generate .rubocop_todo.yml with all current violations
bundle exec rubocop --auto-gen-config

# Then incrementally fix cops
bundle exec rubocop --only Style/StringLiterals -a

Output Format

After fixing violations:

  1. Violations Fixed - List of cops and count
  2. Manual Fixes - Changes requiring human judgment
  3. Remaining - Violations that need review
  4. Verification - bundle exec rubocop output

Comments

Markdown supported