A bit of history in order to understand this change. A year ago we introduced Hound so it would review our pull requests and warn contributors when they weren't following our coding style. However, back then we had many rules we hadn't reviewed yet, and we weren't sure we wanted to ask contributors to follow them. So we decided to split these files: .rubocop_basic.yml would contain rules we had already agreed on and wanted contributors to respect, and .rubocop.yml would contain rules we still had to review. Now we've finally gone through all these rules. We've removed some of them, kept some of them, added new ones, and applied them. Now all rules with a severity level of "convention" or higher return no offenses. The rules with "severity: refactor" return some offenses, though: * Metrics/LineLenght can only be properly accomplished when we define better multi-line indentation standards, while in some cases long lines indicate we need to refactor the code * Rails/DynamicFindBy returns a few false positives * Rails/HasManyOrHasOneDependent should by all means be implemented, although it will not be a trivial task * Rails/SaveBang returns a few false positives and there are a couple of places where we skip it on purpose There are also rules excluding some files: * Rails/InverseOf returns a false positive * Rails/OutputSafety is ignored on purpose when we add auto-links to a text we trust * RSpec/InstanceVariable returns false positives in two files Other than that, everything works as expected.
369 lines
5.5 KiB
YAML
369 lines
5.5 KiB
YAML
require:
|
|
- rubocop-performance
|
|
- rubocop-rails
|
|
- rubocop-rspec
|
|
|
|
AllCops:
|
|
DisplayCopNames: true
|
|
DisplayStyleGuide: true
|
|
Exclude:
|
|
- "db/schema.rb"
|
|
DisabledByDefault: true
|
|
|
|
Bundler/DuplicatedGem:
|
|
Enabled: true
|
|
|
|
Bundler/OrderedGems:
|
|
Enabled: true
|
|
|
|
Capybara/CurrentPathExpectation:
|
|
Enabled: true
|
|
|
|
Capybara/FeatureMethods:
|
|
Enabled: true
|
|
EnabledMethods:
|
|
- scenario
|
|
- xscenario
|
|
|
|
FactoryBot/AttributeDefinedStatically:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLineAfterGuardClause:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLineBetweenDefs:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLines:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundAccessModifier:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundBlockBody:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundClassBody:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundMethodBody:
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundModuleBody:
|
|
Enabled: true
|
|
|
|
Layout/EndOfLine:
|
|
EnforcedStyle: lf
|
|
|
|
Layout/ExtraSpacing:
|
|
Enabled: true
|
|
|
|
Layout/IndentationConsistency:
|
|
EnforcedStyle: indented_internal_methods
|
|
|
|
Layout/IndentationWidth:
|
|
Enabled: true
|
|
|
|
Layout/MultilineBlockLayout:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAfterColon:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAfterComma:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAfterMethodName:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAfterNot:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAfterSemicolon:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAroundBlockParameters:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAroundEqualsInParameterDefault:
|
|
Enabled: true
|
|
|
|
Layout/SpaceAroundOperators:
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeBlockBraces:
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeComma:
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeComment:
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeFirstArg:
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeSemicolon:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideArrayLiteralBrackets:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideArrayPercentLiteral:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideBlockBraces:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideHashLiteralBraces:
|
|
Enabled: true
|
|
EnforcedStyle: compact
|
|
|
|
Layout/SpaceInsideParens:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsidePercentLiteralDelimiters:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideRangeLiteral:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideReferenceBrackets:
|
|
Enabled: true
|
|
|
|
Layout/SpaceInsideStringInterpolation:
|
|
Enabled: true
|
|
|
|
Layout/Tab:
|
|
Enabled: true
|
|
|
|
Layout/TrailingBlankLines:
|
|
Enabled: true
|
|
|
|
Layout/TrailingWhitespace:
|
|
Enabled: true
|
|
|
|
Lint/AmbiguousRegexpLiteral:
|
|
Enabled: true
|
|
|
|
Lint/DuplicateMethods:
|
|
Enabled: true
|
|
|
|
Lint/LiteralAsCondition:
|
|
Enabled: true
|
|
|
|
Lint/ParenthesesAsGroupedExpression:
|
|
Enabled: true
|
|
|
|
Lint/ShadowingOuterLocalVariable:
|
|
Enabled: true
|
|
|
|
Lint/StringConversionInInterpolation:
|
|
Enabled: true
|
|
|
|
Lint/UselessAssignment:
|
|
Enabled: true
|
|
|
|
Metrics/LineLength:
|
|
Max: 110
|
|
Severity: refactor
|
|
|
|
Performance/CompareWithBlock:
|
|
Enabled: true
|
|
|
|
Performance/Detect:
|
|
Enabled: true
|
|
|
|
Performance/DoubleStartEndWith:
|
|
Enabled: true
|
|
|
|
Performance/EndWith:
|
|
Enabled: true
|
|
|
|
Performance/StartWith:
|
|
Enabled: true
|
|
|
|
Rails/ActionFilter:
|
|
Enabled: true
|
|
|
|
Rails/ApplicationJob:
|
|
Enabled: true
|
|
|
|
Rails/ApplicationRecord:
|
|
Enabled: true
|
|
|
|
Rails/CreateTableWithTimestamps:
|
|
Enabled: true
|
|
Exclude:
|
|
- "db/migrate/201[5-8]*"
|
|
|
|
Rails/Date:
|
|
Enabled: true
|
|
|
|
Rails/DynamicFindBy:
|
|
Enabled: true
|
|
Severity: refactor
|
|
|
|
Rails/EnumUniqueness:
|
|
Enabled: true
|
|
|
|
Rails/EnvironmentComparison:
|
|
Enabled: true
|
|
|
|
Rails/FindBy:
|
|
Enabled: true
|
|
|
|
Rails/FindEach:
|
|
Enabled: true
|
|
|
|
Rails/HasAndBelongsToMany:
|
|
Enabled: true
|
|
|
|
Rails/HasManyOrHasOneDependent:
|
|
Enabled: true
|
|
Severity: refactor
|
|
|
|
Rails/HttpPositionalArguments:
|
|
Enabled: true
|
|
|
|
Rails/InverseOf:
|
|
Enabled: true
|
|
Exclude:
|
|
- "app/models/related_content.rb"
|
|
|
|
Rails/NotNullColumn:
|
|
Enabled: true
|
|
Exclude:
|
|
- "db/migrate/201[5-7]*"
|
|
|
|
Rails/OutputSafety:
|
|
Enabled: true
|
|
Severity: warning
|
|
Exclude:
|
|
- app/helpers/text_with_links_helper.rb
|
|
|
|
Rails/PluralizationGrammar:
|
|
Enabled: true
|
|
|
|
Rails/Presence:
|
|
Enabled: true
|
|
|
|
Rails/RelativeDateConstant:
|
|
Enabled: true
|
|
|
|
Rails/RequestReferer:
|
|
Enabled: true
|
|
|
|
Rails/ReversibleMigration:
|
|
Enabled: true
|
|
|
|
Rails/SafeNavigation:
|
|
Enabled: true
|
|
ConvertTry: true
|
|
|
|
Rails/SaveBang:
|
|
Enabled: true
|
|
Severity: refactor
|
|
|
|
Rails/SkipsModelValidations:
|
|
Enabled: true
|
|
Blacklist:
|
|
- update_attribute
|
|
Exclude:
|
|
- lib/acts_as_paranoid_aliases.rb
|
|
|
|
Rails/TimeZone:
|
|
Enabled: true
|
|
|
|
Rails/UnknownEnv:
|
|
Enabled: true
|
|
Environments:
|
|
- development
|
|
- test
|
|
- production
|
|
- preproduction
|
|
- staging
|
|
|
|
Rails/Validation:
|
|
Enabled: true
|
|
|
|
RSpec/AroundBlock:
|
|
Enabled: true
|
|
|
|
RSpec/BeforeAfterAll:
|
|
Enabled: true
|
|
|
|
RSpec/DescribedClass:
|
|
Enabled: true
|
|
EnforcedStyle: explicit
|
|
|
|
RSpec/EmptyExampleGroup:
|
|
Enabled: true
|
|
Exclude:
|
|
- spec/factories/**/*
|
|
|
|
RSpec/EmptyLineAfterExampleGroup:
|
|
Enabled: true
|
|
Exclude:
|
|
- spec/factories/**/*
|
|
|
|
RSpec/ExampleWording:
|
|
Enabled: true
|
|
|
|
RSpec/Focus:
|
|
Enabled: true
|
|
|
|
RSpec/HookArgument:
|
|
Enabled: true
|
|
|
|
RSpec/InstanceVariable:
|
|
Enabled: true
|
|
Exclude:
|
|
- spec/controllers/concerns/has_filters_spec.rb
|
|
- spec/controllers/concerns/has_orders_spec.rb
|
|
|
|
RSpec/LetBeforeExamples:
|
|
Enabled: true
|
|
|
|
RSpec/LetSetup:
|
|
Enabled: true
|
|
|
|
RSpec/NotToNot:
|
|
Enabled: true
|
|
|
|
RSpec/OverwritingSetup:
|
|
Enabled: true
|
|
|
|
RSpec/RepeatedExample:
|
|
Enabled: true
|
|
|
|
RSpec/ScatteredLet:
|
|
Enabled: true
|
|
|
|
RSpec/ScatteredSetup:
|
|
Enabled: true
|
|
|
|
RSpec/VoidExpect:
|
|
Enabled: true
|
|
|
|
Security/Eval:
|
|
Enabled: true
|
|
|
|
Security/JSONLoad:
|
|
Enabled: true
|
|
|
|
Security/YAMLLoad:
|
|
Enabled: true
|
|
|
|
Style/BlockDelimiters:
|
|
Enabled: true
|
|
|
|
Style/PercentLiteralDelimiters:
|
|
Enabled: true
|
|
|
|
Style/SafeNavigation:
|
|
Enabled: true
|
|
|
|
Style/StringLiterals:
|
|
EnforcedStyle: double_quotes
|