majesticlabs-dev/majestic-marketplace

rubocop-fixer

Use when fixing Rubocop violations.

Voir la source
Document Skill original

Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.

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:

bash
# Check for config file
cat .rubocop.yml

# Check inherited configs
cat .rubocop_todo.yml 2>/dev/null

2. Run Rubocop

bash
# 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:

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

Common Violations & Fixes

Style/StringLiterals

ruby
# 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

ruby
# Add at top of file
# frozen_string_literal: true

class User
  # ...
end

Layout/LineLength

ruby
# 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

ruby
# 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

ruby
# 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

ruby
# 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

ruby
# Before
has_many :posts

# After
has_many :posts, dependent: :destroy
# or
has_many :posts, dependent: :nullify

Rails/InverseOf

ruby
# 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:

ruby
# 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:

bash
# 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
du même dépôt

Autres Skills

Tous les Skills