AllCops: Exclude: - 'vendor/**/*' - 'db/*' - 'db/migrate/*' - 'db/fixtures/**/*' - 'tmp/**/*' - 'builds/**/*' - 'Gemfile' - 'config/environments/*' - 'config/puma.rb' - 'test/application_system_test_case.rb' - 'test/test_helper.rb' - 'config/initializers/*.rb' - 'Guardfile' - 'node_modules/**/*' - 'Capfile' - 'config/deploy.rb' - 'config/deploy/**/*' # Commonly used screens these days easily fit more than 80 characters. Metrics/LineLength: Max: 100 # Too short methods lead to extraction of single-use methods, which can make # the code easier to read (by naming things), but can also clutter the class Metrics/MethodLength: Max: 20 # The guiding principle of classes is SRP, SRP can't be accurately measured by LoC Metrics/ClassLength: Max: 1500 # No space makes the method definition shorter and differentiates # from a regular assignment. Layout/SpaceAroundEqualsInParameterDefault: EnforcedStyle: no_space # We do not need to support Ruby 1.9, so this is good to use. Style/SymbolArray: Enabled: true # Most readable form. Layout/AlignHash: EnforcedHashRocketStyle: table EnforcedColonStyle: table # Mixing the styles looks just silly. Style/HashSyntax: EnforcedStyle: ruby19_no_mixed_keys # has_key? and has_value? are far more readable than key? and value? Style/PreferredHashMethods: Enabled: false # String#% is by far the least verbose and only object oriented variant. Style/FormatString: EnforcedStyle: percent Style/CollectionMethods: Enabled: true PreferredMethods: # inject seems more common in the community. reduce: inject # Either allow this style or don't. Marking it as safe with parenthesis # is silly. Let's try to live without them for now. Style/ParenthesesAroundCondition: AllowSafeAssignment: false Lint/AssignmentInCondition: AllowSafeAssignment: false # A specialized exception class will take one or more arguments and construct the message from it. # So both variants make sense. Style/RaiseArgs: Enabled: false # Indenting the chained dots beneath each other is not supported by this cop, # see https://github.com/bbatsov/rubocop/issues/1633 Layout/MultilineOperationIndentation: Enabled: false # Fail is an alias of raise. Avoid aliases, it's more cognitive load for no gain. # The argument that fail should be used to abort the program is wrong too, # there's Kernel#abort for that. Style/SignalException: EnforcedStyle: only_raise # Suppressing exceptions can be perfectly fine, and be it to avoid to # explicitly type nil into the rescue since that's what you want to return, # or suppressing LoadError for optional dependencies Lint/HandleExceptions: Enabled: false # { ... } for multi-line blocks is okay, follow Weirichs rule instead: # https://web.archive.org/web/20140221124509/http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc Style/BlockDelimiters: Enabled: false # do / end blocks should be used for side effects, # methods that run a block for side effects and have # a useful return value are rare, assign the return # value to a local variable for those cases. Style/MethodCalledOnDoEndBlock: Enabled: true # Enforcing the names of variables? To single letter ones? Just no. Style/SingleLineBlockParams: Enabled: false # Shadowing outer local variables with block parameters is often useful # to not reinvent a new name for the same thing, it highlights the relation # between the outer variable and the parameter. The cases where it's actually # confusing are rare, and usually bad for other reasons already, for example # because the method is too long. Lint/ShadowingOuterLocalVariable: Enabled: false # Check with yard instead. Style/Documentation: Enabled: false # This is just silly. Calling the argument `other` in all cases makes no sense. Naming/BinaryOperatorParameterName: Enabled: false # There are valid cases, for example debugging Cucumber steps, # also they'll fail CI anyway Lint/Debugger: Enabled: false # Style preference Style/MethodDefParentheses: Enabled: false # Disable frozen string Style/FrozenStringLiteralComment: Enabled: false # Disable No ASCII char in comments Style/AsciiComments: Enabled: false # Disable ordered Gems By ascii Bundler/OrderedGems: Enabled: false # Change ABC max value Metrics/AbcSize: Max: 20 # Disable empty method in one line Style/EmptyMethod: EnforcedStyle: expanded # Disable max height block Metrics/BlockLength: Enabled: true Exclude: - 'spec/**/*.rb' - 'lib/**/*' - 'config/routes.rb' Layout/EmptyLinesAroundClassBody: EnforcedStyle: empty_lines Exclude: - 'app/channels/*/*' - 'config/*' - 'app/controllers/application_controller.rb' - 'app/mailers/application_mailer.rb' - 'app/models/application_record.rb' - 'test/*/*' Layout/EmptyLinesAroundModuleBody: EnforcedStyle: no_empty_lines Exclude: - 'app/channels/*/*' - 'config/*' - 'app/helpers/application_helper.rb' Style/PercentLiteralDelimiters: PreferredDelimiters: default: '()' '%i': '[]' '%I': '[]' '%r': '{}' '%w': '[]' '%W': '[]' Rails/Output: Exclude: - 'config/deploy.rb' Style/UnneededPercentQ: Enabled: false Layout/SpaceInLambdaLiteral: EnforcedStyle: require_space