224 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# 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-performance
 | 
						|
  - rubocop-capybara
 | 
						|
  - ./lib/linter/rubocop_middle_dot
 | 
						|
 | 
						|
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
 | 
						|
  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: 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: Enforce modern Ruby style
 | 
						|
# https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
 | 
						|
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: 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
 |