inherit_from: .rubocop_todo.yml

inherit_mode:
  merge:
    - Exclude

plugins:
  - rubocop-performance
  - rubocop-rails
  - rubocop-rspec
  - rubocop-factory_bot

require:
  - ./rubocop/use_from_email.rb
  - ./rubocop/custom_cop_location.rb
  - ./rubocop/attachment_download.rb
  - ./rubocop/one_class_per_file.rb

Layout/LineLength:
  Max: 150

Metrics/ClassLength:
  Max: 175
  Exclude:
    - 'app/models/message.rb'
    - 'app/models/conversation.rb'

Metrics/MethodLength:
  Max: 19
  Exclude:
    - 'enterprise/lib/captain/agent.rb'
    - 'enterprise/app/services/captain/llm/system_prompts_service.rb'

RSpec/ExampleLength:
  Max: 50

Style/Documentation:
  Enabled: false

Style/ExponentialNotation:
  Enabled: false

Style/FrozenStringLiteralComment:
  Enabled: false

Style/SymbolArray:
  Enabled: false

Style/OpenStructUse:
  Enabled: false

Chatwoot/AttachmentDownload:
  Enabled: true
  Exclude:
    - 'spec/**/*'
    - 'test/**/*'

Style/OptionalBooleanParameter:
  Exclude:
    - 'app/services/email_templates/db_resolver_service.rb'
    - 'app/dispatchers/dispatcher.rb'

Style/GlobalVars:
  Exclude:
    - 'config/initializers/01_redis.rb'
    - 'config/initializers/rack_attack.rb'
    - 'lib/redis/alfred.rb'
    - 'lib/global_config.rb'

Style/ClassVars:
  Exclude:
    - 'app/services/email_templates/db_resolver_service.rb'

Lint/MissingSuper:
  Exclude:
    - 'app/drops/base_drop.rb'

Lint/SymbolConversion:
  Enabled: false

Lint/EmptyBlock:
  Exclude:
    - 'app/views/api/v1/accounts/conversations/toggle_status.json.jbuilder'

Lint/OrAssignmentToConstant:
  Exclude:
    - 'lib/redis/config.rb'

Metrics/BlockLength:
  Max: 30
  Exclude:
    - spec/**/*
    - '**/routes.rb'
    - 'config/environments/*'
    - db/schema.rb

Metrics/ModuleLength:
  Exclude:
    - lib/seeders/message_seeder.rb
    - spec/support/slack_stubs.rb

Rails/HelperInstanceVariable:
  Exclude:
    - enterprise/app/helpers/captain/chat_helper.rb
    - enterprise/app/helpers/captain/chat_response_helper.rb
Rails/ApplicationController:
  Exclude:
    - 'app/controllers/api/v1/widget/messages_controller.rb'
    - 'app/controllers/dashboard_controller.rb'
    - 'app/controllers/widget_tests_controller.rb'
    - 'app/controllers/widgets_controller.rb'
    - 'app/controllers/platform_controller.rb'
    - 'app/controllers/public_controller.rb'
    - 'app/controllers/survey/responses_controller.rb'

Rails/FindEach:
  Enabled: true
  Include:
    - 'app/**/*.rb'

Rails/CompactBlank:
  Enabled: false

Rails/EnvironmentVariableAccess:
  Enabled: false

Rails/TimeZoneAssignment:
  Enabled: false

Rails/RedundantPresenceValidationOnBelongsTo:
  Enabled: false

Rails/InverseOf:
  Exclude:
    - enterprise/app/models/captain/assistant.rb

Rails/UniqueValidationWithoutIndex:
  Exclude:
    - app/models/canned_response.rb
    - app/models/telegram_bot.rb
    - enterprise/app/models/captain_inbox.rb
    - 'app/models/channel/twitter_profile.rb'
    - 'app/models/webhook.rb'
    - 'app/models/contact.rb'

Style/ClassAndModuleChildren:
  EnforcedStyle: compact
  Exclude:
    - 'config/application.rb'
    - 'config/initializers/monkey_patches/*'

Style/MapToHash:
  Enabled: false

Style/HashSyntax:
  Enabled: true
  EnforcedStyle: no_mixed_keys
  EnforcedShorthandSyntax: never

RSpec/NestedGroups:
  Enabled: true
  Max: 4

RSpec/MessageSpies:
  Enabled: false

RSpec/StubbedMock:
  Enabled: false

Naming/VariableNumber:
  Enabled: false

Naming/MemoizedInstanceVariableName:
  Exclude:
    - 'app/models/message.rb'

Style/GuardClause:
  Exclude:
    - 'app/builders/account_builder.rb'
    - 'app/models/attachment.rb'
    - 'app/models/message.rb'

Metrics/AbcSize:
  Max: 26
  Exclude:
    - 'app/controllers/concerns/auth_helper.rb'

    - 'app/models/integrations/hook.rb'
    - 'app/models/canned_response.rb'
    - 'app/models/telegram_bot.rb'

Rails/RenderInline:
  Exclude:
    - 'app/controllers/swagger_controller.rb'

Rails/ThreeStateBooleanColumn:
  Exclude:
    - 'db/migrate/20230503101201_create_sla_policies.rb'

RSpec/IndexedLet:
  Enabled: false

RSpec/NamedSubject:
  Enabled: false

# we should bring this down
RSpec/MultipleExpectations:
  Max: 7

RSpec/MultipleMemoizedHelpers:
  Max: 14

# custom rules
UseFromEmail:
  Enabled: true
  Exclude:
    - 'app/models/user.rb'
    - 'app/models/contact.rb'

CustomCopLocation:
  Enabled: true

Style/OneClassPerFile:
  Enabled: true

AllCops:
  NewCops: enable
  Exclude:
    - 'bin/**/*'
    - 'db/schema.rb'
    - 'public/**/*'
    - 'config/initializers/bot.rb'
    - 'vendor/**/*'
    - 'node_modules/**/*'
    - 'lib/tasks/auto_annotate_models.rake'
    - 'config/environments/**/*'
    - 'tmp/**/*'
    - 'storage/**/*'
    - 'db/migrate/20230426130150_init_schema.rb'
    - 'reference_chatwoot/**/*'

FactoryBot/SyntaxMethods:
  Enabled: false

# Disable new rules causing errors
Layout/LeadingCommentSpace:
  Enabled: false

Style/ReturnNilInPredicateMethodDefinition:
  Enabled: false

Style/RedundantParentheses:
  Enabled: false

Performance/StringIdentifierArgument:
  Enabled: false

Layout/EmptyLinesAroundExceptionHandlingKeywords:
  Enabled: false

Lint/LiteralAsCondition:
  Enabled: false

Style/RedundantReturn:
  Enabled: false

Layout/SpaceAroundOperators:
  Enabled: false

Rails/EnvLocal:
  Enabled: false

Rails/WhereRange:
  Enabled: false

Lint/UselessConstantScoping:
  Enabled: false

Style/MultipleComparison:
  Enabled: false

Bundler/OrderedGems:
  Enabled: false

RSpec/ExampleWording:
  Enabled: false

RSpec/ReceiveMessages:
  Enabled: false

FactoryBot/AssociationStyle:
  Enabled: false

Rails/EnumSyntax:
  Enabled: false

Lint/RedundantTypeConversion:
  Enabled: false

# Additional rules to disable
Rails/RedundantActiveRecordAllMethod:
  Enabled: false

Layout/TrailingEmptyLines:
  Enabled: true

Style/SafeNavigationChainLength:
  Enabled: false

Lint/SafeNavigationConsistency:
  Enabled: false

Lint/CopDirectiveSyntax:
  Enabled: false

# Final set of rules to disable
FactoryBot/ExcessiveCreateList:
  Enabled: false

RSpec/MissingExpectationTargetMethod:
  Enabled: false

Performance/InefficientHashSearch:
  Enabled: false

Style/RedundantSelfAssignmentBranch:
  Enabled: false

Style/YAMLFileRead:
  Enabled: false

Layout/ExtraSpacing:
  Enabled: false

Style/RedundantFilterChain:
  Enabled: false

Performance/MapMethodChain:
  Enabled: false

Rails/RootPathnameMethods:
  Enabled: false

Style/SuperArguments:
  Enabled: false

# Final remaining rules to disable
Rails/Delegate:
  Enabled: false

Style/CaseLikeIf:
  Enabled: false

FactoryBot/RedundantFactoryOption:
  Enabled: false

FactoryBot/FactoryAssociationWithStrategy:
  Enabled: false
