123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- # 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
- require:
- - rubocop-rails
- - rubocop-rspec
- - rubocop-rspec_rails
- - rubocop-performance
- - rubocop-capybara
- - ./lib/linter/rubocop_middle_dot
- AllCops:
- TargetRubyVersion: 3.1 # 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
- Exclude:
- - db/schema.rb
- - 'bin/*'
- - 'node_modules/**/*'
- - 'Vagrantfile'
- - 'vendor/**/*'
- - 'config/initializers/json_ld*' # Generated files
- - 'lib/mastodon/migration_helpers.rb' # Vendored from GitLab
- - 'lib/templates/**/*'
- # 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:
- Max: 300 # Default of 120 causes a duplicate entry in generated todo file
- ## 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
- Metrics/AbcSize:
- Exclude:
- - 'lib/mastodon/cli/*.rb'
- # Reason: Currently disabled in .rubocop_todo.yml
- # https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
- Metrics/CyclomaticComplexity:
- Exclude:
- - lib/mastodon/cli/*.rb
- # Reason:
- # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists
- Metrics/ParameterLists:
- CountKeywordArgs: false
- # Reason: Prefer seeing a variable name
- # https://docs.rubocop.org/rubocop/cops_naming.html#namingblockforwarding
- Naming/BlockForwarding:
- EnforcedStyle: explicit
- # 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: Conflicts with `Lint/UselessMethodDefinition` for inherited controller actions
- # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railslexicallyscopedactionfilter
- Rails/LexicallyScopedActionFilter:
- Exclude:
- - 'app/controllers/auth/*'
- # Reason: These tasks are doing local work which do not need full env loaded
- # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrakeenvironment
- Rails/RakeEnvironment:
- Exclude:
- - 'lib/tasks/auto_annotate_models.rake'
- - 'lib/tasks/emojis.rake'
- - 'lib/tasks/mastodon.rake'
- - 'lib/tasks/repo.rake'
- - 'lib/tasks/statistics.rake'
- # Reason: There are appropriate times to use these features
- # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsskipsmodelvalidations
- Rails/SkipsModelValidations:
- Enabled: false
- # Reason: We want to preserve the ability to migrate from arbitrary old versions,
- # and cannot guarantee that every installation has run every migration as they upgrade.
- # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunusedignoredcolumns
- Rails/UnusedIgnoredColumns:
- Enabled: false
- # Reason: Prevailing style choice
- # https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsnegateinclude
- Rails/NegateInclude:
- Enabled: false
- # Reason: Enforce default limit, but allow some elements to span lines
- # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecexamplelength
- RSpec/ExampleLength:
- CountAsOne: ['array', 'heredoc', 'method_call']
- # Reason: Deprecated cop, will be removed in 3.0, replaced by SpecFilePathFormat
- # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
- RSpec/FilePath:
- Enabled: false
- # 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: Match overrides from Rspec/FilePath rule above
- # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecspecfilepathformat
- RSpec/SpecFilePathFormat:
- CustomTransform:
- ActivityPub: activitypub
- DeepL: deepl
- FetchOEmbedService: fetch_oembed_service
- OEmbedController: oembed_controller
- OStatus: ostatus
- # Reason: Prevailing style uses numeric status codes, matches Rails/HttpStatus
- # https://docs.rubocop.org/rubocop-rspec/cops_rspec_rails.html#rspecrailshttpstatus
- RSpecRails/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: Route redirects are not token-formatted and must be skipped
- # https://docs.rubocop.org/rubocop/cops_style.html#styleformatstringtoken
- Style/FormatStringToken:
- inherit_mode:
- merge:
- - AllowedMethods # The rubocop-rails config adds `redirect`
- AllowedMethods:
- - redirect_with_vary
- # Reason: Prevailing style choice
- # https://docs.rubocop.org/rubocop/cops_style.html#stylehashaslastarrayitem
- Style/HashAsLastArrayItem:
- Enabled: false
- # Reason: Enforce modern Ruby style
- # https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
- Style/HashSyntax:
- EnforcedStyle: ruby19_no_mixed_keys
- EnforcedShorthandSyntax: either
- # 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: Prevailing style choice
- # https://docs.rubocop.org/rubocop/cops_style.html#styleredundantfetchblock
- Style/RedundantFetchBlock:
- Enabled: false
- # Reason: Overridden to reduce implicit StandardError rescues
- # https://docs.rubocop.org/rubocop/cops_style.html#stylerescuestandarderror
- Style/RescueStandardError:
- EnforcedStyle: implicit
- # 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:
- EnforcedStyleForMultiline: 'comma'
- Style/MiddleDot:
- Enabled: true
|