| name | rubocop |
| description | Run RuboCop linting and fix offenses for the redmine_ai_helper plugin |
RuboCop Check and Fix
Run RuboCop on the plugin codebase, auto-fix what is safe, and manually resolve remaining offenses.
Workflow
Step 1: Run RuboCop
rubocop 2>&1
Step 2: Auto-fix safe offenses
rubocop -A --except Rails/ActionControllerTestCase 2>&1
Exclude Rails/ActionControllerTestCase — Redmine plugin tests require ActionController::TestCase. Converting to ActionDispatch::IntegrationTest breaks the tests helper method and other controller-specific APIs.
Step 3: Manually fix remaining offenses
Address any offenses that remain after auto-correction using the guidelines below.
IMPORTANT: Never modify .rubocop.yml thresholds (Max: values) or Exclude: settings without explicit user approval.
If offenses cannot be fixed in the source code, report them to the user and ask how to proceed.
Do not raise Max: values, add new Exclude: entries, or run git checkout -- .rubocop.yml to work around violations.
| Cop | Action |
|---|
Rails/Pluck | If called on a plain Ruby array (not ActiveRecord), add # rubocop:disable Rails/Pluck inline |
Rails/RedundantPresenceValidationOnBelongsTo | If tests assert errors[:foreign_key_id], the explicit validation is needed — add # rubocop:disable inline |
Rails/I18nLocaleAssignment | Rewrite I18n.locale = x as an I18n.with_locale(x) { ... } block |
| Cop disabled project-wide | Add Enabled: false under the cop name in .rubocop.yml — only with user approval |
Step 4: Run tests to verify
bundle exec rake redmine:plugins:test NAME=redmine_ai_helper 2>&1 | tail -20
Confirm 0 failures and 0 errors before finishing.
Common Cases
Rails/ActionControllerTestCase
Already disabled in .rubocop.yml. No changes needed.
Rails/ActionControllerTestCase:
Enabled: false
Rails/RedundantPresenceValidationOnBelongsTo
The implicit belongs_to validation puts errors on :association_name, not :foreign_key_id. If tests check errors[:project_id] or errors[:user_id], keep the explicit validation:
validates :project_id, presence: true
validates :user_id, presence: true
Rails/Pluck
.pluck is an ActiveRecord method and does not work on plain Ruby arrays. Disable inline:
issue_counts = members_workload.map { |m| m[:assigned_issues] }
Rails/I18nLocaleAssignment
original_locale = I18n.locale
I18n.locale = :ja
ensure
I18n.locale = original_locale
I18n.with_locale(:ja) do
end