Skip to content
Snippets Groups Projects
.rubocop.yml 6.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Can be removed once all rules are addressed or moved to this file as documented overrides
    
    inherit_from: .rubocop_todo.yml
    
    
    # Used for merging with exclude lists with .rubocop_todo.yml
    
    inherit_mode:
      merge:
        - Exclude
    
    
      - rubocop-rspec
      - rubocop-performance
    
    Matt Jankowski's avatar
    Matt Jankowski committed
    AllCops:
    
      TargetRubyVersion: 3.0 # Set to minimum supported version of CI
    
      DisplayCopNames: true
      DisplayStyleGuide: true
      ExtraDetails: true
      UseCache: true
      CacheRootDirectory: tmp
    
      NewCops: enable # Opt-in to newly added rules
    
    Matt Jankowski's avatar
    Matt Jankowski committed
      Exclude:
    
        - db/schema.rb
    
        - 'bin/*'
        - 'node_modules/**/*'
        - 'Vagrantfile'
        - 'vendor/**/*'
    
        - 'lib/json_ld/*' # Generated files
    
        - 'lib/templates/**/*'
    
    Eugen Rochko's avatar
    Eugen Rochko committed
    
    
    # Reason: Prefer Hashes without extreme indentation
    # https://docs.rubocop.org/rubocop/cops_layout.html#layoutfirsthashelementindentation
    
    Layout/FirstHashElementIndentation:
      EnforcedStyle: consistent
    
    
    # Reason: Currently disabled in .rubocop_todo.yml
    # https://docs.rubocop.org/rubocop/cops_layout.html#layoutlinelength
    
    Layout/LineLength:
      AllowedPatterns:
        # Allow comments to be long lines
        - !ruby/regexp / \# .*$/
        - !ruby/regexp /^\# .*$/
      Exclude:
    
        - db/*migrate/**/*
        - db/seeds/**/*
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_lint.html#lintuselessaccessmodifier
    
    abcang's avatar
    abcang committed
    Lint/UselessAccessModifier:
      ContextCreatingMethods:
        - class_methods
    
    
    ## Disable most Metrics/*Length cops
    # Reason: those are often triggered and force significant refactors when this happend
    #         but the team feel they are not really improving the code quality.
    
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocklength
    Metrics/BlockLength:
      Enabled: false
    
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsclasslength
    Metrics/ClassLength:
      Enabled: false
    
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmethodlength
    Metrics/MethodLength:
      Enabled: false
    
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmodulelength
    Metrics/ModuleLength:
      Enabled: false
    
    ## End Disable Metrics/*Length cops
    
    
    # Reason: Currently disabled in .rubocop_todo.yml
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
    
        - db/*migrate/**/*
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
    
    # Reason: Currently disabled in .rubocop_todo.yml
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
    
        - db/*migrate/**/*
    
    # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists
    Metrics/ParameterLists:
      CountKeywordArgs: false
    
    # Reason: Prevailing style is argument file paths
    # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsfilepath
    Rails/FilePath:
      EnforcedStyle: arguments
    
    
    # Reason: Prevailing style uses numeric status codes, matches RSpec/Rails/HttpStatus
    # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railshttpstatus
    
    Rails/HttpStatus:
      EnforcedStyle: numeric
    
    
    # Reason: Allowed in `tootctl` CLI code and in boot ENV checker
    
    # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
    
    Rails/Exit:
      Exclude:
    
        - 'config/boot.rb'
    
    # Reason: Some single letter camel case files shouldn't be split
    # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
    
    RSpec/FilePath:
      CustomTransform:
    
        ActivityPub: activitypub # Ignore the snake_case due to the amount of files to rename
    
        FetchOEmbedService: fetch_oembed_service
        JsonLdHelper: jsonld_helper
        OEmbedController: oembed_controller
        OStatus: ostatus
        NodeInfoController: nodeinfo_controller # NodeInfo isn't snake_cased for any of the instances
      Exclude:
        - 'spec/config/initializers/rack_attack_spec.rb' # namespaces usually have separate folder
        - 'spec/lib/sanitize_config_spec.rb' # namespaces usually have separate folder
        - 'spec/controllers/concerns/account_controller_concern_spec.rb' # Concerns describe ApplicationController and don't fit naming
        - 'spec/controllers/concerns/export_controller_concern_spec.rb'
        - 'spec/controllers/concerns/localized_spec.rb'
        - 'spec/controllers/concerns/rate_limit_headers_spec.rb'
        - 'spec/controllers/concerns/signature_verification_spec.rb'
        - 'spec/controllers/concerns/user_tracking_concern_spec.rb'
    
    # Reason:
    # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
    RSpec/NamedSubject:
      EnforcedStyle: named_only
    
    # Reason: Prevailing style choice
    # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnottonot
    
    RSpec/NotToNot:
      EnforcedStyle: to_not
    
    
    # Reason: Prevailing style uses numeric status codes, matches Rails/HttpStatus
    # https://docs.rubocop.org/rubocop-rspec/cops_rspec_rails.html#rspecrailshttpstatus
    
    RSpec/Rails/HttpStatus:
      EnforcedStyle: numeric
    
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_style.html#styleclassandmodulechildren
    Style/ClassAndModuleChildren:
      Enabled: false
    
    # Reason: Classes mostly self-document with their names
    # https://docs.rubocop.org/rubocop/cops_style.html#styledocumentation
    Style/Documentation:
      Enabled: false
    
    
    # Reason: Enforce modern Ruby style
    # https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
    
    Rose's avatar
    Rose committed
    Style/HashSyntax:
      EnforcedStyle: ruby19_no_mixed_keys
    
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_style.html#stylenumericliterals
    
    Style/NumericLiterals:
      AllowedPatterns:
        - \d{4}_\d{2}_\d{2}_\d{6} # For DB migration date version number readability
    
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_style.html#stylepercentliteraldelimiters
    
    Style/PercentLiteralDelimiters:
      PreferredDelimiters:
        '%i': '()'
        '%w': '()'
    
    
    # Reason: Prefer less indentation in conditional assignments
    # https://docs.rubocop.org/rubocop/cops_style.html#styleredundantbegin
    Style/RedundantBegin:
      Enabled: false
    
    # Reason: Overridden to reduce implicit StandardError rescues
    # https://docs.rubocop.org/rubocop/cops_style.html#stylerescuestandarderror
    
    Style/RescueStandardError:
      EnforcedStyle: implicit
    
    
    # Reason: Simplify some spec layouts
    # https://docs.rubocop.org/rubocop/cops_style.html#stylesemicolon
    Style/Semicolon:
      AllowAsExpressionSeparator: true
    
    
    # Reason: Originally disabled for CodeClimate, and no config consensus has been found
    # https://docs.rubocop.org/rubocop/cops_style.html#stylesymbolarray
    Style/SymbolArray:
      Enabled: false
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_style.html#styletrailingcommainarrayliteral
    
    Style/TrailingCommaInArrayLiteral:
      EnforcedStyleForMultiline: 'comma'
    
    
    # Reason:
    # https://docs.rubocop.org/rubocop/cops_style.html#styletrailingcommainhashliteral
    
    Style/TrailingCommaInHashLiteral:
    
    Matt Jankowski's avatar
    Matt Jankowski committed
      EnforcedStyleForMultiline: 'comma'