* Proposing a new feed experiment This commit involves tweaking a few subtle aspects of the challenger: 1) Remove the sort by published date on the relevance score. The articles will now be listed in the order of perceived relevance. 2) Disable a few levers that did little. There really aren't any `articles.featured = true` articles in the database. 3) Gently increase the weight of each comment in a linear manner. 4) Give a little more weight to posts that don't have followed tags. In addition, it involves renaming the conversions to better convey their implementation. This renaming helps create more descriptive labels for the test results at `/admin/abtests`. This commit also adds logic to repurpose the AbExperiment feed_strategy logic; I envision adjusting the weighted feed strategy levers with some frequency. Per discussions, I'm also disabling the "not logged in" feed testing. We'll use the LargeForemExperimental for this. * Flipping attribute name to positive Mentally "not disabled" is harder to parse than "enabled". This change helps with setting an optimistic attribute. * Bump for travis * Bump for travis * Removing file committed by mistake * Extracting method
960 lines
30 KiB
YAML
960 lines
30 KiB
YAML
# TODO: [@thepracticaldev/oss] test cops that are commented out
|
|
|
|
inherit_from: .rubocop_todo.yml
|
|
|
|
require:
|
|
- rubocop-performance
|
|
- rubocop-rails
|
|
- rubocop-rspec
|
|
|
|
AllCops:
|
|
Exclude:
|
|
- bin/**/*
|
|
- db/schema.rb
|
|
- db/migrate/*.rb
|
|
- node_modules/**/*
|
|
- tmp/**/*
|
|
- vendor/**/*
|
|
- .pryrc
|
|
DisplayStyleGuide: true
|
|
ExtraDetails: true
|
|
NewCops: enable # opt-in to new cops by default
|
|
TargetRubyVersion: 3.0
|
|
|
|
#################### Bundler ###########################
|
|
|
|
Bundler/GemVersion:
|
|
Description: 'Requires or forbids specifying gem versions.'
|
|
Enabled: true
|
|
EnforcedStyle: 'required'
|
|
AllowedGems: ['acts_as_follower']
|
|
|
|
Bundler/OrderedGems:
|
|
Description: >-
|
|
Gems within groups in the Gemfile should be alphabetically sorted.
|
|
Enabled: true
|
|
ConsiderPunctuation: true
|
|
|
|
#################### Layout ###########################
|
|
|
|
Gemspec/DateAssignment:
|
|
Description: 'Checks that `date =` is not used in gemspec file, it is set automatically when the gem is packaged.'
|
|
Enabled: true
|
|
|
|
#################### Layout ###########################
|
|
|
|
Lint/AmbiguousAssignment:
|
|
Description: 'Checks for mistyped shorthand assignments.'
|
|
Enabled: true
|
|
|
|
Layout/ClassStructure:
|
|
Description: 'Enforces a configured order of definitions within a class body.'
|
|
StyleGuide: '#consistent-classes'
|
|
Enabled: true
|
|
|
|
Layout/DotPosition:
|
|
Description: 'Checks the position of the dot in multi-line method calls.'
|
|
StyleGuide: '#consistent-multi-line-chains'
|
|
EnforcedStyle: leading
|
|
|
|
Lint/EmptyInPattern:
|
|
Description: 'Checks for the presence of `in` pattern branches without a body.'
|
|
Enabled: true
|
|
|
|
Layout/EmptyLinesAroundAttributeAccessor:
|
|
Description: "Keep blank lines around attribute accessors."
|
|
StyleGuide: '#empty-lines-around-attribute-accessor'
|
|
Enabled: true
|
|
|
|
# Layout/FirstArrayElementLineBreak:
|
|
# Description: >-
|
|
# Checks for a line break before the first element in a
|
|
# multi-line array.
|
|
# Enabled: false
|
|
|
|
# Layout/FirstHashElementLineBreak:
|
|
# Description: >-
|
|
# Checks for a line break before the first element in a
|
|
# multi-line hash.
|
|
# Enabled: false
|
|
|
|
# Layout/FirstMethodArgumentLineBreak:
|
|
# Description: >-
|
|
# Checks for a line break before the first argument in a
|
|
# multi-line method call.
|
|
# Enabled: false
|
|
|
|
# Layout/FirstMethodParameterLineBreak:
|
|
# Description: >-
|
|
# Checks for a line break before the first parameter in a
|
|
# multi-line method parameter definition.
|
|
# Enabled: false
|
|
|
|
# Layout/HeredocArgumentClosingParenthesis:
|
|
# Description: >-
|
|
# Checks for the placement of the closing parenthesis in a
|
|
# method call that passes a HEREDOC string as an argument.
|
|
# Enabled: false
|
|
# StyleGuide: '#heredoc-argument-closing-parentheses'
|
|
|
|
Layout/LineLength:
|
|
Description: 'Checks that line length does not exceed the configured limit.'
|
|
AutoCorrect: true # this is false by default
|
|
Exclude:
|
|
- Gemfile
|
|
- app/lib/constants/site_config.rb
|
|
- spec/workers/users/record_field_test_event_worker_spec.rb
|
|
|
|
# Layout/MultilineArrayLineBreaks:
|
|
# Description: >-
|
|
# Checks that each item in a multi-line array literal
|
|
# starts on a separate line.
|
|
# Enabled: false
|
|
|
|
# Layout/MultilineAssignmentLayout:
|
|
# Description: 'Check for a newline after the assignment operator in multi-line assignments.'
|
|
# StyleGuide: '#indent-conditional-assignment'
|
|
# Enabled: false
|
|
|
|
# Layout/MultilineHashKeyLineBreaks:
|
|
# Description: >-
|
|
# Checks that each item in a multi-line hash literal
|
|
# starts on a separate line.
|
|
# Enabled: false
|
|
|
|
# Layout/MultilineMethodArgumentLineBreaks:
|
|
# Description: >-
|
|
# Checks that each argument in a multi-line method call
|
|
# starts on a separate line.
|
|
# Enabled: false
|
|
|
|
Layout/MultilineOperationIndentation:
|
|
Description: >-
|
|
Checks indentation of binary operations that span more than
|
|
one line.
|
|
Enabled: true
|
|
EnforcedStyle: indented
|
|
|
|
Layout/MultilineMethodCallIndentation:
|
|
Description: >-
|
|
Checks indentation of method calls with the dot operator
|
|
that span more than one line.
|
|
Enabled: true
|
|
EnforcedStyle: indented
|
|
|
|
Layout/SpaceAroundMethodCallOperator:
|
|
Description: 'Checks method call operators to not have spaces around them.'
|
|
Enabled: true
|
|
|
|
Layout/SpaceBeforeBrackets:
|
|
Description: 'Checks for receiver with a space before the opening brackets.'
|
|
StyleGuide: '#space-in-brackets-access'
|
|
Enabled: true
|
|
|
|
#################### Lint ##################################
|
|
|
|
Lint/AmbiguousBlockAssociation:
|
|
Description: >-
|
|
Checks for ambiguous block association with method when param passed without
|
|
parentheses.
|
|
StyleGuide: '#syntax'
|
|
Enabled: true
|
|
Exclude:
|
|
- "spec/**/*"
|
|
|
|
Lint/BinaryOperatorWithIdenticalOperands:
|
|
Description: 'This cop checks for places where binary operator has identical operands.'
|
|
Enabled: true
|
|
|
|
Lint/ConstantResolution:
|
|
Description: 'Check that constants are fully qualified with `::`.'
|
|
Enabled: false
|
|
|
|
Lint/DeprecatedConstants:
|
|
Description: 'Checks for deprecated constants.'
|
|
Enabled: true
|
|
|
|
Lint/DeprecatedOpenSSLConstant:
|
|
Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
|
|
Enabled: true
|
|
|
|
Lint/DuplicateBranch:
|
|
Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.
|
|
Enabled: false
|
|
|
|
Lint/DuplicateElsifCondition:
|
|
Description: 'Do not repeat conditions used in if `elsif`.'
|
|
Enabled: true
|
|
|
|
Lint/DuplicateRegexpCharacterClassElement:
|
|
Description: 'Checks for duplicate elements in Regexp character classes.'
|
|
Enabled: true
|
|
|
|
Lint/DuplicateRescueException:
|
|
Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
|
|
Enabled: true
|
|
|
|
Lint/EmptyConditionalBody:
|
|
Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
|
|
Enabled: true
|
|
|
|
Lint/EmptyBlock:
|
|
Description: 'This cop checks for blocks without a body.'
|
|
Enabled: true
|
|
|
|
Lint/EmptyClass:
|
|
Description: 'Checks for classes and metaclasses without a body.'
|
|
Enabled: true
|
|
|
|
Lint/FloatComparison:
|
|
Description: 'Checks for the presence of precise comparison of floating point numbers.'
|
|
StyleGuide: '#float-comparison'
|
|
Enabled: true
|
|
|
|
# Lint/HeredocMethodCallPosition:
|
|
# Description: >-
|
|
# Checks for the ordering of a method call where
|
|
# the receiver of the call is a HEREDOC.
|
|
# Enabled: false
|
|
|
|
Lint/MissingSuper:
|
|
Description: >-
|
|
This cop checks for the presence of constructors and lifecycle callbacks
|
|
without calls to `super`'.
|
|
Enabled: true
|
|
Exclude:
|
|
- 'app/components/**/*.rb'
|
|
|
|
Lint/MixedRegexpCaptureTypes:
|
|
Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
|
|
Enabled: true
|
|
|
|
Lint/NumberedParameterAssignment:
|
|
Description: 'Checks for uses of numbered parameter assignment.'
|
|
Enabled: true
|
|
|
|
# Lint/NumberConversion:
|
|
# Description: 'Checks unsafe usage of number conversion methods.'
|
|
# Enabled: false
|
|
|
|
Lint/OrAssignmentToConstant:
|
|
Description: 'Checks unintended or-assignment to constant.'
|
|
Enabled: true
|
|
|
|
Lint/OutOfRangeRegexpRef:
|
|
Description: 'Checks for out of range reference for Regexp because it always returns nil.'
|
|
Enabled: true
|
|
|
|
Lint/RaiseException:
|
|
Description: Checks for `raise` or `fail` statements which are raising `Exception` class.
|
|
StyleGuide: '#raise-exception'
|
|
Enabled: true
|
|
|
|
Lint/RedundantDirGlobSort:
|
|
Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
|
|
Enabled: true
|
|
|
|
Lint/SelfAssignment:
|
|
Description: 'Checks for self-assignments.'
|
|
Enabled: true
|
|
|
|
Lint/StructNewOverride:
|
|
Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.'
|
|
Enabled: true
|
|
|
|
Lint/SymbolConversion:
|
|
Description: 'Checks for unnecessary symbol conversions.'
|
|
Enabled: true
|
|
|
|
Lint/ToEnumArguments:
|
|
Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
|
|
Enabled: true
|
|
|
|
Lint/TopLevelReturnWithArgument:
|
|
Description: 'This cop detects top level return statements with argument.'
|
|
Enabled: true
|
|
|
|
Lint/TripleQuotes:
|
|
Description: 'Checks for useless triple quote constructs.'
|
|
Enabled: true
|
|
|
|
Lint/UnexpectedBlockArity:
|
|
Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
|
|
Enabled: true
|
|
|
|
Lint/UnmodifiedReduceAccumulator:
|
|
Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
|
|
Enabled: true
|
|
|
|
Lint/UnreachableLoop:
|
|
Description: 'This cop checks for loops that will have at most one iteration.'
|
|
Enabled: true
|
|
|
|
#################### Metrics ###############################
|
|
|
|
Metrics/AbcSize:
|
|
Description: >-
|
|
A calculated magnitude based on number of assignments,
|
|
branches, and conditions.
|
|
Enabled: false
|
|
|
|
Metrics/BlockLength:
|
|
Description: 'Avoid long blocks with many lines.'
|
|
Enabled: true
|
|
Exclude:
|
|
- 'db/seeds.rb'
|
|
- 'Guardfile'
|
|
- 'spec/**/*'
|
|
|
|
Metrics/ClassLength:
|
|
Description: 'Avoid classes longer than 100 lines of code.'
|
|
Enabled: false
|
|
|
|
Metrics/CyclomaticComplexity:
|
|
Description: >-
|
|
A complexity metric that is strongly correlated to the number
|
|
of test cases needed to validate a method.
|
|
Enabled: true
|
|
Max: 13
|
|
|
|
Metrics/MethodLength:
|
|
Description: 'Avoid methods longer than 10 lines of code.'
|
|
StyleGuide: '#short-methods'
|
|
Enabled: false
|
|
|
|
Metrics/ModuleLength:
|
|
Description: 'Avoid modules longer than 100 lines of code.'
|
|
Enabled: false
|
|
|
|
Metrics/ParameterLists:
|
|
Description: 'Avoid parameter lists longer than three or four parameters.'
|
|
StyleGuide: '#too-many-params'
|
|
Enabled: false
|
|
|
|
Metrics/PerceivedComplexity:
|
|
Description: >-
|
|
A complexity metric geared towards measuring complexity for a
|
|
human reader.
|
|
Enabled: true
|
|
Max: 14
|
|
|
|
#################### Naming ##############################
|
|
|
|
Naming/AccessorMethodName:
|
|
Description: Check the naming of accessor methods for get_/set_.
|
|
StyleGuide: '#accessor_mutator_method_names'
|
|
Enabled: false
|
|
|
|
Naming/InclusiveLanguage:
|
|
Description: 'Recommend the use of inclusive language instead of problematic terms.'
|
|
Enabled: false
|
|
|
|
Naming/PredicateName:
|
|
Description: 'Check the names of predicate methods.'
|
|
StyleGuide: '#bool-methods-qmark'
|
|
Enabled: true
|
|
ForbiddenPrefixes:
|
|
- is_
|
|
Exclude:
|
|
- spec/**/*
|
|
|
|
Naming/VariableNumber:
|
|
Description: 'Use the configured style when numbering symbols, methods and variables.'
|
|
StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
|
|
Enabled: false
|
|
|
|
#################### Style ###############################
|
|
|
|
Style/AsciiComments:
|
|
Description: 'Use only ascii symbols in comments.'
|
|
StyleGuide: '#english-comments'
|
|
Enabled: false
|
|
|
|
Style/AccessorGrouping:
|
|
Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
|
|
Enabled: true
|
|
|
|
Style/ArgumentsForwarding:
|
|
Description: 'Use arguments forwarding.'
|
|
StyleGuide: '#arguments-forwarding'
|
|
Enabled: false
|
|
|
|
Style/ArrayCoercion:
|
|
Description: >-
|
|
Use Array() instead of explicit Array check or [*var], when dealing
|
|
with a variable you want to treat as an Array, but you're not certain it's an array.
|
|
StyleGuide: '#array-coercion'
|
|
Enabled: true
|
|
|
|
# Style/AutoResourceCleanup:
|
|
# Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
|
|
# Enabled: false
|
|
|
|
Style/BisectedAttrAccessor:
|
|
Description: >-
|
|
Checks for places where `attr_reader` and `attr_writer`
|
|
for the same method can be combined into single `attr_accessor`.
|
|
Enabled: true
|
|
|
|
Style/CaseLikeIf:
|
|
Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
|
|
StyleGuide: '#case-vs-if-else'
|
|
Enabled: true
|
|
|
|
Style/ClassAndModuleChildren:
|
|
Description: 'Checks style of children classes and modules.'
|
|
StyleGuide: '#namespace-definition'
|
|
Enabled: true
|
|
SafeAutoCorrect: true
|
|
|
|
Style/CollectionCompact:
|
|
Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
|
|
Enabled: true
|
|
|
|
Style/CollectionMethods:
|
|
Description: 'Preferred collection methods.'
|
|
StyleGuide: '#map-find-select-reduce-include-size'
|
|
Enabled: true
|
|
PreferredMethods:
|
|
find: detect
|
|
|
|
# Style/ConstantVisibility:
|
|
# Description: >-
|
|
# Check that class- and module constants have
|
|
# visibility declarations.
|
|
# Enabled: false
|
|
|
|
# Style/DateTime:
|
|
# Description: 'Use Time over DateTime.'
|
|
# StyleGuide: '#no-datetime'
|
|
# Enabled: false
|
|
|
|
Style/Documentation:
|
|
Description: 'Document classes and non-namespace modules.'
|
|
Enabled: false
|
|
|
|
Style/DocumentDynamicEvalDefinition:
|
|
Description: >-
|
|
When using `class_eval` (or other `eval`) with string interpolation,
|
|
add a comment block showing its appearance if interpolated.
|
|
StyleGuide: '#eval-comment-docs'
|
|
Enabled: true
|
|
|
|
Style/ExplicitBlockArgument:
|
|
Description: >-
|
|
Consider using explicit block argument to avoid writing block literal
|
|
that just passes its arguments to another block.
|
|
StyleGuide: '#block-argument'
|
|
Enabled: true
|
|
|
|
Style/Encoding:
|
|
Description: 'Use UTF-8 as the source file encoding.'
|
|
Enabled: false
|
|
|
|
Style/EndlessMethod:
|
|
Description: 'Avoid the use of multi-lined endless method definitions.'
|
|
StyleGuide: '#endless-methods'
|
|
Enabled: pending
|
|
|
|
Style/ExponentialNotation:
|
|
Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).'
|
|
StyleGuide: '#exponential-notation'
|
|
Enabled: true
|
|
EnforcedStyle: scientific
|
|
|
|
Style/FormatStringToken:
|
|
Description: 'Use a consistent style for format string tokens.'
|
|
Exclude:
|
|
- 'config/routes.rb'
|
|
|
|
Style/FrozenStringLiteralComment:
|
|
Description: >-
|
|
Add the frozen_string_literal comment to the top of files
|
|
to help transition to frozen string literals by default.
|
|
Enabled: true
|
|
EnforcedStyle: never
|
|
|
|
Style/GlobalStdStream:
|
|
Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
|
|
StyleGuide: '#global-stdout'
|
|
Enabled: true
|
|
|
|
Style/HashAsLastArrayItem:
|
|
Description: >-
|
|
Checks for presence or absence of braces around hash literal as a last
|
|
array item depending on configuration.
|
|
StyleGuide: '#hash-literal-as-last-array-item'
|
|
Enabled: true
|
|
EnforcedStyle: braces
|
|
|
|
Style/HashConversion:
|
|
Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
|
|
Enabled: true
|
|
|
|
Style/HashEachMethods:
|
|
Description: 'Use Hash#each_key and Hash#each_value.'
|
|
StyleGuide: '#hash-each'
|
|
Enabled: true
|
|
|
|
Style/HashExcept:
|
|
Description: >-
|
|
Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods
|
|
that can be replaced with `Hash#except` method.
|
|
Enabled: true
|
|
|
|
Style/HashLikeCase:
|
|
Description: >-
|
|
Checks for places where `case-when` represents a simple 1:1
|
|
mapping and can be replaced with a hash lookup.
|
|
Enabled: true
|
|
|
|
Style/HashSyntax:
|
|
Description: >-
|
|
Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
|
|
{ :a => 1, :b => 2 }.
|
|
StyleGuide: '#hash-literals'
|
|
Enabled: true
|
|
EnforcedStyle: ruby19_no_mixed_keys
|
|
|
|
Style/HashTransformKeys:
|
|
Description: 'Prefer `transform_keys` over `each_with_object` and `map`.'
|
|
StyleGuide: '#hash-transform-methods'
|
|
Enabled: true
|
|
|
|
Style/HashTransformValues:
|
|
Description: 'Prefer `transform_values` over `each_with_object` and `map`.'
|
|
StyleGuide: '#hash-transform-methods'
|
|
Enabled: true
|
|
|
|
Style/IfUnlessModifier:
|
|
Description: >-
|
|
Favor modifier if/unless usage when you have a
|
|
single-line body.
|
|
StyleGuide: '#if-as-a-modifier'
|
|
Enabled: false
|
|
|
|
Style/IfWithBooleanLiteralBranches:
|
|
Description: 'Checks for redundant `if` with boolean literal branches.'
|
|
Enabled: true
|
|
|
|
# Style/ImplicitRuntimeError:
|
|
# Description: >-
|
|
# Use `raise` or `fail` with an explicit exception class and
|
|
# message, rather than just a message.
|
|
# Enabled: false
|
|
|
|
# Style/InlineComment:
|
|
# Description: 'Avoid trailing inline comments.'
|
|
# Enabled: false
|
|
|
|
Style/InPatternThen:
|
|
Description: 'Checks for `in;` uses in `case` expressions.'
|
|
StyleGuide: '#no-in-pattern-semicolons'
|
|
Enabled: true
|
|
|
|
# Style/IpAddresses:
|
|
# Description: "Don't include literal IP addresses in code."
|
|
# Enabled: false
|
|
|
|
# Style/MethodCallWithArgsParentheses:
|
|
# Description: 'Use parentheses for method calls with arguments.'
|
|
# StyleGuide: '#method-invocation-parens'
|
|
# Enabled: false
|
|
|
|
# Style/MethodCalledOnDoEndBlock:
|
|
# Description: 'Avoid chaining a method call on a do...end block.'
|
|
# StyleGuide: '#single-line-blocks'
|
|
# Enabled: false
|
|
|
|
Style/MultilineInPatternThen:
|
|
Description: 'Do not use `then` for multi-line `in` statement.'
|
|
Enabled: true
|
|
|
|
Style/NegatedIfElseCondition:
|
|
Description: >-
|
|
This cop checks for uses of `if-else` and ternary operators with a negated condition
|
|
which can be simplified by inverting condition and swapping branches.
|
|
Enabled: true
|
|
|
|
Style/Next:
|
|
Description: 'Use `next` to skip iteration instead of a condition at the end.'
|
|
StyleGuide: '#no-nested-conditionals'
|
|
Enabled: true
|
|
|
|
Style/NilLambda:
|
|
Description: 'Prefer `-> {}` to `-> { nil }`.'
|
|
Enabled: true
|
|
|
|
Style/OptionalBooleanParameter:
|
|
Description: 'Use keyword arguments when defining method with boolean argument.'
|
|
StyleGuide: '#boolean-keyword-arguments'
|
|
Enabled: true
|
|
|
|
Style/OptionHash:
|
|
Description: "Don't use option hashes when you can use keyword arguments."
|
|
Enabled: true
|
|
|
|
Style/QuotedSymbols:
|
|
Description: 'Use a consistent style for quoted symbols.'
|
|
Enabled: true
|
|
|
|
Style/RedundantArgument:
|
|
Description: 'Check for a redundant argument passed to certain methods.'
|
|
Enabled: true
|
|
|
|
Style/RedundantAssignment:
|
|
Description: 'Checks for redundant assignment before returning.'
|
|
Enabled: true
|
|
|
|
Style/RedundantFetchBlock:
|
|
Description: >-
|
|
Use `fetch(key, value)` instead of `fetch(key) { value }`
|
|
when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
|
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
|
|
Enabled: true
|
|
|
|
Style/RedundantFileExtensionInRequire:
|
|
Description: >-
|
|
Checks for the presence of superfluous `.rb` extension in
|
|
the filename provided to `require` and `require_relative`.
|
|
StyleGuide: '#no-explicit-rb-to-require'
|
|
Enabled: true
|
|
|
|
Style/RedundantRegexpCharacterClass:
|
|
Description: 'Checks for unnecessary single-element Regexp character classes.'
|
|
Enabled: true
|
|
|
|
Style/RedundantRegexpEscape:
|
|
Description: 'Checks for redundant escapes in Regexps.'
|
|
Enabled: true
|
|
|
|
Style/ReturnNil:
|
|
Description: 'Use return instead of return nil.'
|
|
Enabled: true
|
|
|
|
Style/Send:
|
|
Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
|
|
StyleGuide: '#prefer-public-send'
|
|
Enabled: true
|
|
|
|
Style/SingleArgumentDig:
|
|
Description: 'Avoid using single argument dig method.'
|
|
Enabled: true
|
|
|
|
Style/SingleLineBlockParams:
|
|
Description: 'Enforces the names of some block params.'
|
|
Enabled: true
|
|
|
|
Style/SlicingWithRange:
|
|
Description: 'Checks array slicing is done with endless ranges when suitable.'
|
|
Enabled: true
|
|
|
|
Style/StringChars:
|
|
Description: 'Checks for uses of `String#split` with empty string or regexp literal argument.'
|
|
Enabled: true
|
|
|
|
Style/StringConcatenation:
|
|
Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
|
|
StyleGuide: '#string-interpolation'
|
|
Enabled: true
|
|
|
|
Style/StringLiterals:
|
|
Description: 'Checks if uses of quotes match the configured preference.'
|
|
StyleGuide: '#consistent-string-literals'
|
|
Enabled: true
|
|
EnforcedStyle: double_quotes
|
|
ConsistentQuotesInMultiline: true
|
|
|
|
Style/SwapValues:
|
|
Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
|
|
StyleGuide: '#values-swapping'
|
|
Enabled: true
|
|
|
|
Style/TopLevelMethodDefinition:
|
|
Description: 'This cop looks for top-level method definitions.'
|
|
Enabled: true
|
|
Exclude:
|
|
- scripts/release
|
|
- scripts/stage_release
|
|
|
|
Style/TrailingCommaInArguments:
|
|
Description: 'Checks for trailing comma in argument lists.'
|
|
StyleGuide: '#no-trailing-params-comma'
|
|
Enabled: true
|
|
EnforcedStyleForMultiline: comma
|
|
|
|
Style/TrailingCommaInArrayLiteral:
|
|
Description: 'Checks for trailing comma in array literals.'
|
|
StyleGuide: '#no-trailing-array-commas'
|
|
Enabled: true
|
|
EnforcedStyleForMultiline: comma
|
|
|
|
Style/TrailingCommaInBlockArgs:
|
|
Description: 'Checks for useless trailing commas in block arguments.'
|
|
Enabled: true
|
|
|
|
Style/UnlessLogicalOperators:
|
|
Description: >-
|
|
Checks for use of logical operators in an unless condition.
|
|
Enabled: false
|
|
|
|
# Performance cops from rubocop-performance
|
|
# https://github.com/rubocop-hq/rubocop-performance/blob/master/config/default.yml
|
|
Performance/AncestorsInclude:
|
|
Description: 'Use `A <= B` instead of `A.ancestors.include?(B)`.'
|
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#ancestorsinclude-vs--code'
|
|
Enabled: true
|
|
|
|
Performance/BigDecimalWithNumericArgument:
|
|
Description: 'Convert numeric argument to string before passing to BigDecimal.'
|
|
Enabled: true
|
|
|
|
Performance/CaseWhenSplat:
|
|
Description: >-
|
|
Reordering `when` conditions with a splat to the end
|
|
of the `when` branches can improve performance.
|
|
Enabled: true
|
|
|
|
Performance/ChainArrayAllocation:
|
|
Description: >-
|
|
Instead of chaining array methods that allocate new arrays, mutate an
|
|
existing array.
|
|
Reference: 'https://twitter.com/schneems/status/1034123879978029057'
|
|
Enabled: false
|
|
|
|
Performance/IoReadlines:
|
|
Description: 'Use `IO.each_line` (`IO#each_line`) instead of `IO.readlines` (`IO#readlines`).'
|
|
Reference: 'https://docs.gitlab.com/ee/development/performance.html#reading-from-files-and-other-data-sources'
|
|
Enabled: true
|
|
|
|
Performance/MapCompact:
|
|
Description: 'Use `filter_map` instead of `collection.map(&:do_something).compact`.'
|
|
Enabled: true
|
|
|
|
Performance/OpenStruct:
|
|
Description: 'Use `Struct` instead of `OpenStruct`.'
|
|
Enabled: true
|
|
|
|
Performance/RedundantEqualityComparisonBlock:
|
|
Description: >-
|
|
Checks for uses `Enumerable#all?`, `Enumerable#any?`, `Enumerable#one?`,
|
|
or `Enumerable#none?` are compared with `===` or similar methods in block.
|
|
Enabled: true
|
|
|
|
Performance/RedundantSortBlock:
|
|
Description: 'Use `sort` instead of `sort { |a, b| a <=> b }`.'
|
|
Enabled: true
|
|
|
|
Performance/RedundantSplitRegexpArgument:
|
|
Description: 'This cop identifies places where `split` argument can be replaced from a deterministic regexp to a string.'
|
|
Enabled: true
|
|
|
|
Performance/RedundantStringChars:
|
|
Description: 'Checks for redundant `String#chars`.'
|
|
Enabled: true
|
|
|
|
Performance/ReverseFirst:
|
|
Description: 'Use `last(n).reverse` instead of `reverse.first(n)`.'
|
|
Enabled: true
|
|
|
|
Performance/SelectMap:
|
|
Description: 'Use `filter_map` instead of `ary.select(&:foo).map(&:bar)`.'
|
|
Enabled: true
|
|
|
|
Performance/SortReverse:
|
|
Description: 'Use `sort.reverse` instead of `sort { |a, b| b <=> a }`.'
|
|
Enabled: true
|
|
|
|
Performance/Squeeze:
|
|
Description: "Use `squeeze('a')` instead of `gsub(/a+/, 'a')`."
|
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#remove-extra-spaces-or-other-contiguous-characters-code'
|
|
Enabled: true
|
|
|
|
Performance/StringInclude:
|
|
Description: 'Use `String#include?` instead of a regex match with literal-only pattern.'
|
|
Enabled: true
|
|
|
|
# Rails cops from rubocop-rails
|
|
# https://github.com/rubocop-hq/rubocop-rails/blob/master/config/default.yml
|
|
# TODO: [@thepracticaldev/oss] enable these Rails cops
|
|
|
|
Rails/ActiveRecordCallbacksOrder:
|
|
Description: 'Order callback declarations in the order in which they will be executed.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#callbacks-order'
|
|
Enabled: true
|
|
|
|
Rails/AddColumnIndex:
|
|
Description: >-
|
|
Rails migrations don't make use of a given `index` key, but also
|
|
doesn't given an error when it's used, so it makes it seem like an
|
|
index might be used.
|
|
Enabled: true
|
|
|
|
Rails/Date:
|
|
Exclude:
|
|
- scripts/release
|
|
- scripts/stage_release
|
|
|
|
Rails/DefaultScope:
|
|
Description: 'Avoid use of `default_scope`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide#avoid-default-scope'
|
|
Enabled: true
|
|
|
|
Rails/EagerEvaluationLogMessage:
|
|
Description: 'Checks that blocks are used for interpolated strings passed to `Rails.logger.debug`.'
|
|
Reference: 'https://guides.rubyonrails.org/debugging_rails_applications.html#impact-of-logs-on-performance'
|
|
Enabled: true
|
|
|
|
Rails/EnvironmentVariableAccess:
|
|
Description: 'Do not access `ENV` directly after initialization.'
|
|
Enabled: false
|
|
|
|
Rails/ExpandedDateRange:
|
|
Description: 'Checks for expanded date range.'
|
|
Enabled: true
|
|
|
|
Rails/FilePath:
|
|
EnforcedStyle: slashes
|
|
|
|
Rails/FindById:
|
|
Description: >-
|
|
Favor the use of `find` over `where.take!`, `find_by!`, and `find_by_id!` when you
|
|
need to retrieve a single record by primary key when you expect it to be found.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#find'
|
|
Enabled: true
|
|
|
|
Rails/I18nLocaleAssignment:
|
|
Description: 'Prefer the usage of `I18n.with_locale` instead of manually updating `I18n.locale` value.'
|
|
Enabled: true
|
|
|
|
Rails/Inquiry:
|
|
Description: "Prefer Ruby's comparison operators over Active Support's `Array#inquiry` and `String#inquiry`."
|
|
StyleGuide: 'https://rails.rubystyle.guide/#inquiry'
|
|
Enabled: true
|
|
|
|
Rails/MailerName:
|
|
Description: 'Mailer should end with `Mailer` suffix.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#mailer-name'
|
|
Enabled: true
|
|
|
|
Rails/MatchRoute:
|
|
Description: >-
|
|
Don't use `match` to define any routes unless there is a need to map multiple request types
|
|
among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option.
|
|
StyleGuide: 'https://rails.rubystyle.guide/#no-match-routes'
|
|
Enabled: true
|
|
|
|
Rails/NegateInclude:
|
|
Description: 'Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.'
|
|
Enabled: true
|
|
|
|
Rails/Pluck:
|
|
Description: 'Prefer `pluck` over `map { ... }`.'
|
|
Enabled: true
|
|
|
|
Rails/PluckId:
|
|
Description: 'Use `ids` instead of `pluck(:id)` or `pluck(primary_key)`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#ids'
|
|
Enabled: true
|
|
|
|
Rails/PluckInWhere:
|
|
Description: 'Use `select` instead of `pluck` in `where` query methods.'
|
|
Enabled: true
|
|
|
|
Rails/RenderInline:
|
|
Description: 'Prefer using a template over inline rendering.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#inline-rendering'
|
|
Enabled: true
|
|
|
|
Rails/RenderPlainText:
|
|
Description: 'Prefer `render plain:` over `render text:`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#plain-text-rendering'
|
|
Enabled: true
|
|
|
|
# TODO: enable this once all loader related deprecations on console/server startup are dealt with
|
|
Rails/RequireDependency:
|
|
Description: 'Do not use `require_dependency` when running in Zeitwerk mode. `require_dependency` is for autoloading in classic mode.'
|
|
Reference: 'https://guides.rubyonrails.org/autoloading_and_reloading_constants.html'
|
|
Enabled: false
|
|
|
|
Rails/ReversibleMigrationMethodDefinition:
|
|
Description: 'Checks whether the migration implements either a `change` method or both an `up` and a `down` method.'
|
|
Enabled: true
|
|
Include:
|
|
- db/migrate/*.rb
|
|
|
|
Rails/ShortI18n:
|
|
Description: 'Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.'
|
|
StyleGuide: 'https://rails.rubystyle.guide/#short-i18n'
|
|
Enabled: true
|
|
|
|
Rails/SkipsModelValidations:
|
|
Description: >-
|
|
Use methods that skips model validations with caution.
|
|
See reference for more information.
|
|
Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
|
|
Enabled: false
|
|
|
|
Rails/SquishedSQLHeredocs:
|
|
Enabled: false
|
|
|
|
Rails/TimeZoneAssignment:
|
|
Description: 'Prefer the usage of `Time.use_zone` instead of manually updating `Time.zone` value.'
|
|
Reference: 'https://thoughtbot.com/blog/its-about-time-zones'
|
|
Enabled: true
|
|
|
|
Rails/UnusedIgnoredColumns:
|
|
Description: 'Remove a column that does not exist from `ignored_columns`.'
|
|
Enabled: true
|
|
|
|
Rails/WhereExists:
|
|
Description: 'Prefer `exists?(...)` over `where(...).exists?`.'
|
|
Enabled: true
|
|
|
|
# RSpec cops from rubocop-rspec
|
|
# https://github.com/rubocop-hq/rubocop-rspec/blob/master/config/default.yml
|
|
RSpec/DescribeClass:
|
|
Description: Check that the first argument to the top level describe is a constant.
|
|
Enabled: true
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/DescribeClass
|
|
Exclude:
|
|
- 'spec/requests/**/*'
|
|
- 'spec/system/**/*'
|
|
- 'spec/tasks/**/*'
|
|
|
|
RSpec/DescribedClassModuleWrapping:
|
|
Description: Avoid opening modules and defining specs within them.
|
|
Enabled: true
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/DescribedClassModuleWrapping
|
|
|
|
RSpec/ExampleLength:
|
|
Description: Checks for long examples.
|
|
Enabled: true
|
|
Max: 15
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ExampleLength
|
|
|
|
RSpec/IdenticalEqualityAssertion:
|
|
Description: Checks for equality assertions with identical expressions on both sides.
|
|
Enabled: true
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IdenticalEqualityAssertion
|
|
|
|
RSpec/MessageExpectation:
|
|
Description: Checks for consistent message expectation style.
|
|
Enabled: true
|
|
EnforcedStyle: allow
|
|
|
|
RSpec/MultipleMemoizedHelpers:
|
|
Description: Checks if example groups contain too many `let` and `subject` calls.
|
|
Enabled: false
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MultipleMemoizedHelpers
|
|
|
|
RSpec/MultipleExpectations:
|
|
Description: Checks if examples contain too many `expect` calls.
|
|
Enabled: true
|
|
Max: 8
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MultipleExpectations
|
|
|
|
RSpec/Rails/AvoidSetupHook:
|
|
Description: Checks that tests use RSpec `before` hook over Rails `setup` method.
|
|
Enabled: true
|
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/AvoidSetupHook
|