inherit_from: .rubocop_todo.yml

AllCops:
  TargetRubyVersion: 3.2
  TargetRailsVersion: 7.2

  NewCops: enable

  Exclude:
    - '**/vendor/**/*'
    - '**/tmp/**/*'
    - '**/bin/**/*'
    - '**/plugins/**/*'
    - '**/extra/**/*'
    - '**/lib/generators/**/templates/*'
    - '**/lib/tasks/**/*'
    - '**/files/**/*'
    - 'db/schema.rb'

plugins:
  - rubocop-performance
  - rubocop-rails

# Rules for Redmine

Bundler/OrderedGems:
  Enabled: false

Layout/CaseIndentation:
  Exclude:
    - 'config/initializers/10-patches.rb'

Layout/ClosingParenthesisIndentation:
  Exclude:
    - 'lib/redmine/wiki_formatting/textile/redcloth3.rb'

Layout/EmptyLinesAroundAccessModifier:
  Exclude:
    - 'config/initializers/10-patches.rb'

Layout/EmptyLineBetweenDefs:
  AllowAdjacentOneLineDefs: true

Layout/FirstHashElementIndentation:
  Exclude:
    - 'lib/redmine/wiki_formatting/textile/redcloth3.rb'

Layout/LineLength:
  AllowedPatterns: ['\A\s+test \".+\" do\z', '\A\s*\#']
  Exclude:
    - 'db/migrate/0*.rb'
    - 'db/migrate/1*.rb'
    - 'db/migrate/201*.rb'
    - 'db/migrate/20200*.rb'
    - 'lib/redmine/wiki_formatting/textile/redcloth3.rb'

Layout/RescueEnsureAlignment:
  Exclude:
    - 'db/migrate/085_add_role_tracker_old_status_index_to_workflows.rb'

Layout/SpaceAroundEqualsInParameterDefault:
  Enabled: false

Layout/SpaceBeforeSemicolon:
  Exclude:
    - 'config/initializers/10-patches.rb'

Layout/SpaceBeforeBlockBraces:
  # "space" is used more than "no_space".
  # But "no_space" is more natural in one liner.
  #   str = path.to_s.split(%r{[/\\]}).select{|p| !p.blank?}.join("/")
  Enabled: false

Layout/SpaceBeforeFirstArg:
  Enabled: false

Layout/SpaceInsideBlockBraces:
  Enabled: false

Layout/SpaceInsideHashLiteralBraces:
  Enabled: false

Lint/MissingSuper:
  Exclude:
    - 'lib/redmine/views/builders/structure.rb'

Lint/SuppressedException:
  AllowComments: true

Lint/UselessConstantScoping:
  Exclude:
    - 'app/controllers/repositories_controller.rb'
    - 'app/models/mail_handler.rb'
    - 'lib/redmine/acts/mentionable.rb'
    - 'lib/redmine/asset_path.rb'
    - 'lib/redmine/wiki_formatting/textile/redcloth3.rb'

Layout/LineContinuationLeadingSpace:
  Enabled: false

Layout/TrailingWhitespace:
  AllowInHeredoc: true

Metrics:
  Enabled: false

Naming/AccessorMethodName:
  Enabled: false

Naming/VariableNumber:
  CheckMethodNames: false
  CheckSymbols: false

Naming/BinaryOperatorParameterName:
  Enabled: false

Naming/PredicateMethod:
  Enabled: false

Naming/PredicatePrefix:
  Enabled: false

Performance/CollectionLiteralInLoop:
  MinSize: 4

Rails/ActionControllerFlashBeforeRender:
  # False positive in actions where `redirect_to_referer_or` is used
  Enabled: false

Rails/ActionControllerTestCase:
  Enabled: false

Rails/ActionOrder:
  Enabled: false

Rails/ActiveSupportOnLoad:
  Exclude:
    # TODO: Need to check the impact on plugins. Disable for now.
    - 'lib/redmine/preparation.rb'

Rails/ApplicationRecord:
  Exclude:
    - 'db/migrate/0*.rb'

Rails/BulkChangeTable:
  Exclude:
    - 'db/migrate/20120714122200_add_workflows_rule_fields.rb'
    - 'db/migrate/20130217094251_remove_issues_default_fk_values.rb'
    - 'db/migrate/20131214094309_remove_custom_fields_min_max_length_default_values.rb'
    - 'db/migrate/20190510070108_add_unique_id_to_import_items.rb'
    - 'db/migrate/20200826153402_add_totp_to_user.rb'
    - 'db/migrate/20221012135202_add_index_to_custom_values.rb'

Rails/CompactBlank:
  Enabled: false

Rails/Delegate:
  Enabled: false

Rails/EnvironmentVariableAccess:
  Enabled: false

Rails/FilePath:
  Enabled: false

Rails/FindEach:
  Enabled: false

Rails/HelperInstanceVariable:
  Enabled: false

Rails/Output:
  Exclude:
    - 'config/routes.rb'
    - 'lib/redmine/diff.rb'
    - 'lib/redmine/diff_table.rb'
    - 'test/unit/lib/redmine/scm/adapters/*.rb'

Rails/Pluck:
  Exclude:
  # `pluck` is not available in Gemfile
  - 'Gemfile'

Rails/RootPathnameMethods:
  Enabled: false

Rails/SkipsModelValidations:
  Enabled: false

Rails/SquishedSQLHeredocs:
  Enabled: false

Rails/ThreeStateBooleanColumn:
  Exclude:
    - 'db/migrate/009_add_hide_mail_pref.rb'
    - 'db/migrate/059_add_roles_assignable.rb'
    - 'db/migrate/082_add_messages_locked.rb'
    - 'db/migrate/086_add_custom_fields_searchable.rb'
    - 'db/migrate/102_add_custom_fields_editable.rb'
    - 'db/migrate/20120115143100_add_repositories_is_default.rb'
    - 'db/migrate/20120127174243_add_custom_fields_multiple.rb'
    - 'db/migrate/20210704125704_add_twofa_required_to_groups.rb'

Rails/WhereExists:
  Enabled: false

Style/AsciiComments:
  Exclude:
    # Copyright credit has non ascii character.
    # We can not change nor remove it.
    - 'app/models/repository/git.rb'

Style/BarePercentLiterals:
  Enabled: false

Style/BlockComments:
  Exclude:
    - 'lib/redmine/string_array_diff/diff.rb'
    - 'lib/redmine/string_array_diff/diffable.rb'

Style/BlockDelimiters:
  Exclude:
    - 'db/migrate/007_create_journals.rb'
    - 'lib/redmine/string_array_diff/diff.rb'
    - 'lib/redmine/string_array_diff/diffable.rb'

Style/EmptyStringInsideInterpolation:
  Enabled: false

Style/FetchEnvVar:
  Enabled: false

Style/EmptyElse:
  EnforcedStyle: empty

Style/FormatString:
  Enabled: false

Style/FormatStringToken:
  Enabled: false

Style/FrozenStringLiteralComment:
  EnforcedStyle: always
  Exclude:
    - 'db/**/*.rb'
    - 'Gemfile'
    - 'Rakefile'
    - 'config.ru'
    - 'config/additional_environment.rb'

Style/GlobalStdStream:
  Enabled: false

Style/HashSyntax:
  EnforcedStyle: no_mixed_keys
  EnforcedShorthandSyntax: either

Style/HashEachMethods:
  Exclude:
    - 'db/migrate/072_add_enumerations_position.rb'
    - 'db/migrate/078_add_custom_fields_position.rb'

Style/IdenticalConditionalBranches:
  Exclude:
    - 'config/initializers/10-patches.rb'
    - 'lib/redmine/wiki_formatting/textile/redcloth3.rb'

Style/InverseMethods:
  Enabled: false

Style/MultipleComparison:
  Enabled: true
  ComparisonsThreshold: 3

Style/NegatedIfElseCondition:
  Enabled: false

Style/NumericPredicate:
  Enabled: false

Style/PerlBackrefs:
  Enabled: false

Style/RaiseArgs:
  Enabled: false

Style/RedundantCondition:
  Enabled: false

Style/RedundantConstantBase:
  Exclude:
    - 'config/environments/production.rb'

Style/RedundantParentheses:
  Enabled: false

Style/Semicolon:
  Enabled: false

Style/SlicingWithRange:
  Enabled: false

Style/SoleNestedConditional:
  Enabled: false

Style/StringLiteralsInInterpolation:
  Enabled: false

Style/TernaryParentheses:
  Enabled: false

Style/TrailingCommaInArrayLiteral:
  Enabled: false

Style/TrailingCommaInHashLiteral:
  Enabled: false

Style/YodaExpression:
  Enabled: false
