inherit_from: .rubocop_todo.yml

AllCops:
  TargetRubyVersion: 2.7
  TargetRailsVersion: 6.1

  NewCops: enable

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

# Enable extensions

require:
  - 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

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/PredicateName:
  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/BulkChangeTable:
  Exclude:
    - 'db/migrate/20120714122200_add_workflows_rule_fields.rb'
    - 'db/migrate/20131214094309_remove_custom_fields_min_max_length_default_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/Pluck:
  Exclude:
  # `pluck` is not available in Gemfile
  - 'Gemfile'

Rails/RootPathnameMethods:
  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/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/FetchEnvVar:
  Enabled: false

Style/EmptyElse:
  EnforcedStyle: empty

Style/FormatString:
  EnforcedStyle: sprintf

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

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

Style/InverseMethods:
  Enabled: false

Style/NegatedIfElseCondition:
  Enabled: false

Style/RaiseArgs:
  Enabled: false

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

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
