* Prepare: relocate user suggestions * Prepare: relocate users suggestion service -> query * Organization query for orgs with above-average scores * Rubocop * Limit to last 3 weeks * Tweak recent scope, limit to 5 orgs * Onboarding routes are also always JSON * Divide by zero makes NaN means * Add Orgs suggester into suggestions * Rubocop * select distinct orgs * Fix for weird edge-case with bad local data * Include type_identifier in JSON payload * Update follows API to allow org_ids as input * Update onboarding front-end to distinguish users/orgs * Fix: i18n issues * Fix: type_identifier in json output * Fix: distinct is weird * Fix: JS linter * Continue tweaking front-end * Audit import order * Cleanup @todo note * Try renaming controller action * Move Article average calculation to postgres and fix math * Refactor decorated type_identifier * Refactor SuggestProminent, return more orgs, fix spec math * Use FeatureFlag for organization suggestions * This might fix the jest
978 lines
30 KiB
YAML
978 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
|
|
- rubocop-capybara
|
|
|
|
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/DeprecatedAttributeAssignment:
|
|
Description: 'Checks that deprecated attribute attributes (like date) are not set in a gemspec file.'
|
|
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: false
|
|
# We're disabling it for the time being until a new version of rubocop
|
|
# (> 1.31.2) is released with a fix for false positives that are coming up.
|
|
# These files below were the original files excluded from this rule.
|
|
# 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/LexicallyScopedActionFilter:
|
|
Exclude:
|
|
- app/controllers/api/**/*
|
|
|
|
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/features/**/*'
|
|
- '**/spec/requests/**/*'
|
|
- '**/spec/routing/**/*'
|
|
- '**/spec/system/**/*'
|
|
- '**/spec/views/**/*'
|
|
|
|
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: false
|
|
|
|
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
|
|
|
|
RSpec/NoExpectationExample:
|
|
Enabled: false
|
|
AllowedPatterns:
|
|
- ^expect_
|
|
- ^assert_
|
|
- sidekiq_assert_
|
|
|
|
RSpec/IndexedLet:
|
|
Enabled: false
|