require: - rubocop-rspec inherit_from: .rubocop_todo.yml # Please: # # - Comment any deviations from the Ruby Style Guide # - Alphabetize cops # - Only include permanent config; temporary goes in .rubocop_todo.yml AllCops: Exclude: - gemfiles/vendor/bundle/**/* # This dir only shows up on travis ¯\_(ツ)_/¯ - spec/dummy_app/db/schema.rb # Generated, out of our control # Set to lowest supported version TargetRubyVersion: 2.2 Layout/AlignParameters: EnforcedStyle: with_fixed_indentation Layout/DotPosition: EnforcedStyle: trailing Layout/IndentHeredoc: Exclude: - paper_trail.gemspec Layout/MultilineMethodCallIndentation: EnforcedStyle: indented Layout/MultilineOperationIndentation: EnforcedStyle: indented # Use exactly one space on each side of an operator. Do not align operators # because it makes the code harder to edit, and makes lines unnecessarily long. Layout/SpaceAroundOperators: AllowForAlignment: false # Migrations often contain long up/down methods, and extracting smaller methods # from these is of questionable value. Metrics/AbcSize: Exclude: - 'spec/dummy_app/db/migrate/*' # Not a useful metric compared to, e.g. `AbcSize`. Metrics/BlockLength: Enabled: false # Not a useful metric compared to, e.g. `AbcSize`. Metrics/ClassLength: Enabled: false # The Ruby Style Guide recommends to "Limit lines to 80 characters." # (https://github.com/bbatsov/ruby-style-guide#80-character-limits) # but 100 is also reasonable. Metrics/LineLength: Max: 100 # The number of lines in a method is not a useful metric compared to `AbcSize`. # It's common to have very long methods (> 50 lines) which are quite simple. For # example, a method that returns a long string with only a few interpolations. Metrics/MethodLength: Enabled: false # Not a useful metric compared to, e.g. `AbcSize`. Metrics/ModuleLength: Enabled: false Naming/FileName: Exclude: - Appraisals # It is a decades-old convention to use EOS as a heredoc delimiter. There is # not enough value in changinge this convention. SQL should still be used as # a delimiter when appropriate. Naming/HeredocDelimiterNaming: Enabled: false Naming/PredicateName: NameWhitelist: has_paper_trail # In 0.50.0, this cop has a bug https://github.com/bbatsov/rubocop/issues/4732 Performance/HashEachMethods: Enabled: false # In an ideal world, each example has a single expectation. In the real world, # sometimes setup is a pain and you don't want to duplicate setup in multiple # examples, or make the specs more confusing with many nested `context`s, and # the practical thing is to have multiple expectations. RSpec/MultipleExpectations: Enabled: false # Yes, ideally examples would be short. Is it possible to pick a limit and say, # "no example will ever be longer than this"? Hard to say. Sometimes they're # quite long. RSpec/ExampleLength: Enabled: false # Please use semantic style, e.g. `do` when there's a side-effect, else `{}`. # The semantic style is too nuanced to lint, so the cop is disabled. Style/BlockDelimiters: Enabled: false # Use double negation wherever it would otherwise be impractical to convert # a value to an actual boolean. Style/DoubleNegation: Enabled: false # The decision of when to use a guard clause to improve readability is subtle, # and it's not clear that it can be linted. Certainly, the default # `MinBodyLength` of 1 can actually hurt readability. Style/GuardClause: Enabled: false # Use postfix (modifier) conditionals for one-liners, unless doing so would # exceed 60 characters. Style/IfUnlessModifier: MaxLineLength: 60 # The Ruby Style Guide says: # # > Use \ instead of + or << to concatenate two string literals at line end. # # but in my experience the `\` style is rarely used and less readable. Please # concatenate multiline strings with `+` or use a HEREDOC. Style/LineEndConcatenation: Enabled: false # Using `module_function` instead of `extend self` would make the instance # methods in these modules private. That would be a breaking change, so these # modules are excluded. See discussion in: # - https://github.com/airblade/paper_trail/pull/756 # - https://github.com/bbatsov/ruby-style-guide/issues/556 Style/ModuleFunction: Exclude: - 'lib/paper_trail/serializers/json.rb' - 'lib/paper_trail/serializers/yaml.rb' # The Ruby Style Guide does not prescribe a particular quote character, only # that a project should pick one and be consistent. The decision has no # performance implications. Double quotes are slightly easier to read. Style/StringLiterals: EnforcedStyle: double_quotes