# 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/*' - 'Rakefile' - 'node_modules/**/*' - 'Vagrantfile' - 'vendor/**/*' - 'lib/json_ld/*' # Generated files - '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: AllowedPatterns: # Allow comments to be long lines - !ruby/regexp / \# .*$/ - !ruby/regexp /^\# .*$/ Exclude: - 'lib/mastodon/cli/*.rb' - db/*migrate/**/* - db/seeds/**/* # Reason: # https://docs.rubocop.org/rubocop/cops_lint.html#lintuselessaccessmodifier 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 Metrics/AbcSize: Exclude: - 'lib/mastodon/cli/*.rb' - db/*migrate/**/* # Reason: # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting Metrics/BlockNesting: 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 - db/*migrate/**/* # 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: 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' - 'lib/mastodon/cli/*.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 DeepL: deepl 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 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