require:
  - rubocop-rails
  - rubocop-performance

AllCops:
  NewCops: enable
  Exclude:
    - spec/manageiq/**/*
    - vendor/**/*
  SuggestExtensions: false
  TargetRubyVersion: 3.0
Gemspec/DevelopmentDependencies:
  EnforcedStyle: gemspec
Gemspec/RequiredRubyVersion:
  Enabled: false
Layout/HashAlignment:
  EnforcedHashRocketStyle: table
  EnforcedColonStyle: table
Layout/DefEndAlignment:
  AutoCorrect: true
Layout/EndAlignment:
  AutoCorrect: true
Layout/ExtraSpacing:
  AutoCorrect: true
  Exclude:
    - Gemfile
Layout/LineLength:
  Enabled: false
Layout/SpaceAroundMethodCallOperator:
  Enabled: true
Layout/SpaceBeforeFirstArg:
  Enabled: false
Layout/SpaceInsideHashLiteralBraces:
  EnforcedStyle: no_space
Lint/RaiseException:
  Enabled: true
Lint/StructNewOverride:
  Enabled: true
Metrics/AbcSize:
  Enabled: false
Metrics/BlockLength:
  Enabled: false
Metrics/BlockNesting:
  Enabled: false
Metrics/ClassLength:
  Enabled: false
Metrics/CyclomaticComplexity:
  Enabled: false
Metrics/MethodLength:
  Enabled: false
Metrics/ModuleLength:
  Enabled: false
Metrics/ParameterLists:
  Enabled: false
Metrics/PerceivedComplexity:
  Enabled: false
Naming/MethodParameterName:
  AllowedNames:
    - vm
    - dc
Naming/RescuedExceptionsVariableName:
  Enabled: false
Naming/VariableNumber:
  Enabled: false
Performance/Casecmp:
  Enabled: false
Rails:
  Enabled: true
Rails/FindEach:
  Enabled: false
Rails/HttpStatus:
  Enabled: true
  EnforcedStyle: numeric
Rails/ReadWriteAttribute:
  AutoCorrect: false
Style/AccessModifierDeclarations:
  Enabled: false
Style/ClassAndModuleChildren:
  Enabled: false
Style/ClassCheck:
  EnforcedStyle: kind_of?
Style/CollectionMethods:
  PreferredMethods:
    find: detect
    find_all: select
    map: collect
    reduce: inject
Style/Documentation:
  Enabled: false
Style/DoubleNegation:
  Enabled: false
Style/EmptyMethod:
  Enabled: false
Style/Encoding:
  Enabled: false
Style/ExponentialNotation:
  Enabled: true
Style/FormatString:
  EnforcedStyle: percent
Style/FormatStringToken:
  EnforcedStyle: template
Style/FrozenStringLiteralComment:
  Enabled: false
Style/GuardClause:
  Enabled: false
Style/HashEachMethods:
  Enabled: true
Style/HashSyntax:
  EnforcedStyle: hash_rockets
  Exclude:
    - db/schema.rb
Style/HashTransformKeys:
  Enabled: true
Style/HashTransformValues:
  Enabled: true
Style/IfUnlessModifier:
  Enabled: false
Style/MethodCallWithArgsParentheses:
  Exclude:
    - Gemfile
    - config/routes.rb
    - lib/generators/**/*
    - lib/resource_feeder/**/*
    - lib/tasks/**/*
    - spec/**/*
  Enabled: true
  AllowedMethods:
    # Ruby
    - add_dependency
    - add_development_dependency
    - add_runtime_dependency
    - alias_method
    - attr_accessor
    - attr_reader
    - attr_writer
    - exit
    - extend
    - gem
    - include
    - load
    - module_function
    - pp
    - prepend
    - print
    - private
    - private_class_method
    - private_constant
    - puts
    - raise
    - require
    - sleep
    - throw
    - warn
    - yield
    # Rails
    - accepts_nested_attributes_for
    - add_column
    - add_index
    - add_reference
    - after_action
    - after_commit
    - after_create
    - after_create_commit
    - after_destroy
    - after_destroy
    - after_destroy_commit
    - after_initialize
    - after_save
    - after_save
    - after_update
    - after_update_commit
    - alias_attribute
    - around_destroy
    - autoload
    - before_action
    - before_create
    - before_destroy
    - before_save
    - before_update
    - before_validation
    - belongs_to
    - bigint
    - boolean
    - cattr_accessor
    - cattr_reader
    - cattr_writer
    - change_column
    - change_column_comment
    - change_column_null
    - change_table
    - change_table_comment
    - class_attribute
    - create_table
    - datetime
    - decimal
    - delegate
    - drop_table
    - float
    - has_and_belongs_to_many
    - has_many
    - has_one
    - head
    - identified_by
    - index
    - integer
    - jsonb
    - mattr_accessor
    - references
    - remove_column
    - remove_index
    - remove_reference
    - rename_column
    - render
    - require_dependency
    - require_relative
    - respond_to
    - scope
    - serialize
    - skip_before_action
    - string
    - text
    - uuid
    - validate
    - validates
    # ActsAsTree Gem
    - acts_as_tree
    # Ancestry Gem
    - has_ancestry
    # DefaultValue Gem
    - default_value_for
    - default_values
    # Optimist Gem
    - banner
    - die
    - opt
    # MIQ
    - add_trigger
    - alias_with_relationship_type
    - api_relay_method
    - attr_accessor_that_yamls
    - deprecate_attribute
    - drop_trigger
    - encrypt_column
    - include_concern
    - require_nested
    - signal
    - supports
    - supports_not
    - virtual_aggregate
    - virtual_attribute
    - virtual_belongs_to
    - virtual_belongs_to
    - virtual_column
    - virtual_delegate
    - virtual_has_many
    - virtual_has_one
    - virtual_total
    # Rake
    - desc
    - task
Style/NegatedIf:
  Enabled: false
Style/NegatedIfElseCondition:
  Enabled: false
Style/NumericLiterals:
  AutoCorrect: false
Style/NumericPredicate:
  Enabled: false
Style/PerlBackrefs:
  Enabled: false
Style/ParallelAssignment:
  Enabled: false
Style/QuotedSymbols:
  Enabled: false # disabled because Style/StringLiterals is disabled
Style/RedundantReturn:
  AllowMultipleReturnValues: true
Style/RegexpLiteral:
  Enabled: false
Style/RescueModifier:
  AutoCorrect: false
Style/RescueStandardError:
  EnforcedStyle: implicit
Style/SignalException:
  EnforcedStyle: only_raise
Style/SingleLineBlockParams:
  Enabled: false
Style/SingleLineMethods:
  AllowIfMethodIsEmpty: false
Style/SpecialGlobalVars:
  AutoCorrect: false
Style/StringLiterals:
  Enabled: false # Also see Style/QuotedSymbols
Style/StringLiteralsInInterpolation:
  Enabled: false
Style/SymbolArray:
  Enabled: false
Style/TrailingCommaInArrayLiteral:
  Enabled: false
Style/TrailingCommaInHashLiteral:
  Enabled: false
Style/TrailingUnderscoreVariable:
  Enabled: false
Style/TrivialAccessors:
  AllowPredicates: true
Style/WhileUntilModifier:
  Enabled: false
Style/WordArray:
  Enabled: false