.rubocop.yml
# This is the default configuration file. Enabling and disabling is configured
# in separate files. This file adds all other parameters apart from Enabled.
inherit_from:
- .rubocop.enabled.yml
- .rubocop.disabled.yml
# Common configuration.
AllCops:
Exclude:
- '.bundle/**/*'
- '.git/**/*'
- '.yardoc/**/*'
- 'assets/**/*'
- 'doc/**/*'
- 'coverage/**/*'
- 'pkg/**/*'
- 'reports/**/*'
- 'tmp/**/*'
- 'vendor/**/*'
TargetRubyVersion: 2.7.0
#################### Layout ###########################
# Indent private/protected/public as deep as method definitions
Layout/AccessModifierIndentation:
EnforcedStyle: indent
Layout/ArgumentAlignment:
EnforcedStyle: with_fixed_indentation
# checks whether the end keywords are aligned properly for `do` `end` blocks.
Layout/BlockAlignment:
# The value `start_of_block` means that the `end` should be aligned with line
# where the `do` keyword appears.
# The value `start_of_line` means it should be aligned with the whole
# expression's starting line.
# The value `either` means both are allowed.
EnforcedStyleAlignWith: start_of_line
Layout/DefEndAlignment:
# The value `def` means that `end` should be aligned with the def keyword.
# The value `start_of_line` means that `end` should be aligned with method
# calls like `private`, `public`, etc, if present in front of the `def`
# keyword on the same line.
EnforcedStyleAlignWith: start_of_line
# AutoCorrect: false
Severity: warning
# Align ends correctly.
Layout/EndAlignment:
# The value `keyword` means that `end` should be aligned with the matching
# keyword (`if`, `while`, etc.).
# The value `variable` means that in assignments, `end` should be aligned
# with the start of the variable on the left hand side of `=`. In all other
# situations, `end` should still be aligned with the keyword.
# The value `start_of_line` means that `end` should be aligned with the start
# of the line which the matching keyword appears on.
EnforcedStyleAlignWith: start_of_line
# AutoCorrect: false
Severity: warning
# Align the elements of a hash literal if they span more than one line.
Layout/HashAlignment:
# Alignment of entries using colon as separator. Valid values are:
#
# key - left alignment of keys
# a: 0
# bb: 1
# separator - alignment of colons, keys are right aligned
# a: 0
# bb: 1
# table - left alignment of keys and values
# a: 0
# bb: 1
EnforcedColonStyle: key
# Select whether hashes that are the last argument in a method call should be
# inspected? Valid values are:
#
# always_inspect - Inspect both implicit and explicit hashes.
# Registers an offense for:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# always_ignore - Ignore both implicit and explicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Accepts:
# function({a: 1,
# b: 2})
# ignore_implicit - Ignore only implicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# ignore_explicit - Ignore only explicit hashes.
# Accepts:
# function({a: 1,
# b: 2})
# Registers an offense for:
# function(a: 1,
# b: 2)
EnforcedLastArgumentHashStyle: ignore_implicit
Layout/LineLength:
Max: 120
# To make it possible to copy or click on URIs in the code, we allow lines
# containing a URI to be longer than Max.
AllowHeredoc: true
AllowURI: true
URISchemes:
- http
- https
# The IgnoreCopDirectives option causes the LineLength rule to ignore cop
# directives like '# rubocop: enable ...' when calculating a line's length.
IgnoreCopDirectives: false
# The AllowedPatterns option is a list of !ruby/regexp and/or string
# elements. Strings will be converted to Regexp objects. A line that matches
# any regular expression listed in this option will be allowed by LineLength.
AllowedPatterns: []
Layout/ParameterAlignment:
# Alignment of parameters in multi-line method calls.
#
# The `with_first_parameter` style aligns the following lines along the same
# column as the first parameter.
#
# method_call(a,
# b)
#
# The `with_fixed_indentation` style aligns the following lines with one
# level of indentation relative to the start of the line with the method call.
#
# method_call(a,
# b)
EnforcedStyle: with_fixed_indentation
# Indentation of `when`.
Layout/CaseIndentation:
# SupportedStyles:
# - case
# - end
EnforcedStyle: case
IndentOneStep: false
# Multi-line method chaining should be done with leading dots.
Layout/DotPosition:
# SupportedStyles:
# - leading
# - trailing
EnforcedStyle: leading
# Layout/EmptyComment:
# AllowBorderComment: true
# AllowMarginComment: true
# Use empty lines between defs.
Layout/EmptyLineBetweenDefs:
# If `true`, this parameter means that single line method definitions don't
# need an empty line between them.
AllowAdjacentOneLineDefs: false
# Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
NumberOfEmptyLines: 1
Layout/EmptyLinesAroundBlockBody:
# SupportedStyles:
# - empty_lines
# - no_empty_lines
EnforcedStyle: no_empty_lines
Layout/EmptyLinesAroundClassBody:
# SupportedStyles:
# - empty_lines
# - empty_lines_except_namespace
# - empty_lines_special
# - no_empty_lines
# - beginning_only
# - ending_only
EnforcedStyle: no_empty_lines
Layout/EmptyLinesAroundModuleBody:
# SupportedStyles:
# - empty_lines
# - empty_lines_except_namespace
# - empty_lines_special
# - no_empty_lines
EnforcedStyle: no_empty_lines
Layout/EndOfLine:
# The `native` style means that CR+LF (Carriage Return + Line Feed) is
# enforced on Windows, and LF is enforced on other platforms. The other
# styles (`lf` and `crlf`) mean LF and CR+LF, respectively.
EnforcedStyle: lf
Layout/ExtraSpacing:
# When true, allows most uses of extra spacing if the intent is to align
# things with the previous or next line, not counting empty lines or comment
# lines.
AllowForAlignment: true
# When true, forces the alignment of `=` in assignments on consecutive lines.
ForceEqualSignAlignment: false
Layout/FirstParameterIndentation:
#SupportedStyles:
# # The first parameter should always be indented one step more than the
# # preceding line.
# - consistent
# # The first parameter should normally be indented one step more than the
# # preceding line, but if it's a parameter for a method call that is itself
# # a parameter in a method call, then the inner parameter should be indented
# # relative to the inner method.
# - special_for_inner_method_call
# # Same as `special_for_inner_method_call` except that the special rule only
# # applies if the outer method call encloses its arguments in parentheses.
# - special_for_inner_method_call_in_parentheses
EnforcedStyle: consistent
Layout/IndentationConsistency:
# The difference between `rails` and `normal` is that the `rails` style
# prescribes that in classes and modules the `protected` and `private`
# modifier keywords shall be indented the same as public methods and that
# protected and private members shall be indented one step more than the
# modifiers. Other than that, both styles mean that entities on the same
# logical depth shall have the same indentation.
EnforcedStyle: normal
Layout/IndentationWidth:
# Number of spaces for each indentation level.
Width: 2
AllowedPatterns: []
# Checks the indentation of the first element in an array literal.
Layout/FirstArrayElementIndentation:
# The value `special_inside_parentheses` means that array literals with
# brackets that have their opening bracket on the same line as a surrounding
# opening round parenthesis, shall have their first element indented relative
# to the first position inside the parenthesis.
#
# The value `consistent` means that the indentation of the first element shall
# always be relative to the first position of the line where the opening
# bracket is.
#
# The value `align_brackets` means that the indentation of the first element
# shall always be relative to the position of the opening bracket.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_brackets
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
# Checks the indentation of assignment RHS, when on a different line from LHS
Layout/AssignmentIndentation:
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
# Checks the indentation of the first key in a hash literal.
Layout/FirstHashElementIndentation:
# The value `special_inside_parentheses` means that hash literals with braces
# that have their opening brace on the same line as a surrounding opening
# round parenthesis, shall have their first key indented relative to the
# first position inside the parenthesis.
#
# The value `consistent` means that the indentation of the first key shall
# always be relative to the first position of the line where the opening
# brace is.
#
# The value `align_braces` means that the indentation of the first key shall
# always be relative to the position of the opening brace.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_braces
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/HeredocIndentation:
Enabled: true
# EnforcedStyle: auto_detection
# SupportedStyles:
# - auto_detection
# - squiggly
# - active_support
# - powerpack
# - unindent
Layout/SpaceInLambdaLiteral:
EnforcedStyle: require_no_space
SupportedStyles:
- require_no_space
- require_space
Layout/MultilineArrayBraceLayout:
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last element
- symmetrical
- new_line
- same_line
Layout/MultilineAssignmentLayout:
# The types of assignments which are subject to this rule.
SupportedTypes:
- block
- case
- class
- if
- kwbegin
- module
EnforcedStyle: new_line
SupportedStyles:
# Ensures that the assignment operator and the rhs are on the same line for
# the set of supported types.
- same_line
# Ensures that the assignment operator and the rhs are on separate lines
# for the set of supported types.
- new_line
Layout/MultilineHashBraceLayout:
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on same line as last element
- symmetrical
- new_line
- same_line
Layout/MultilineMethodCallBraceLayout:
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last argument
- symmetrical
- new_line
- same_line
Layout/MultilineMethodCallIndentation:
EnforcedStyle: aligned
SupportedStyles:
- aligned
- indented
- indented_relative_to_receiver
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/MultilineMethodDefinitionBraceLayout:
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last parameter
- symmetrical
- new_line
- same_line
Layout/MultilineOperationIndentation:
EnforcedStyle: aligned
SupportedStyles:
- aligned
- indented
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/SpaceAroundBlockParameters:
EnforcedStyleInsidePipes: no_space
SupportedStylesInsidePipes:
- space
- no_space
Layout/SpaceAroundEqualsInParameterDefault:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
Layout/SpaceAroundOperators:
# When `true`, allows most uses of extra spacing if the intent is to align
# with an operator on the previous or next line, not counting empty lines
# or comment lines.
AllowForAlignment: true
Layout/SpaceBeforeBlockBraces:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBraces: space
SupportedStylesForEmptyBraces:
- space
- no_space
Layout/SpaceBeforeFirstArg:
# When `true`, allows most uses of extra spacing if the intent is to align
# things with the previous or next line, not counting empty lines or comment
# lines.
AllowForAlignment: true
Layout/SpaceInsideArrayLiteralBrackets:
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside the brackets, with the exception
# that successive left brackets or right brackets are collapsed together
- compact
EnforcedStyleForEmptyBrackets: no_space
SupportedStylesForEmptyBrackets:
- space
- no_space
Layout/SpaceInsideBlockBraces:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
# Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
SpaceBeforeBlockParameters: true
Layout/SpaceInsideHashLiteralBraces:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside hash braces, with the exception
# that successive left braces or right braces are collapsed together
- compact
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
Layout/SpaceInsideReferenceBrackets:
EnforcedStyle: no_space
# SupportedStyles:
# - space
# - no_space
# EnforcedStyleForEmptyBrackets: no_space
# SupportedStylesForEmptyBrackets:
# - space
# - no_space
Layout/SpaceInsideStringInterpolation:
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
Layout/ClassStructure:
Categories:
module_inclusion:
- include
- prepend
- extend
ExpectedOrder:
- module_inclusion
- constants
- public_class_methods
- initializer
- public_methods
- protected_methods
- private_methods
Layout/IndentationStyle:
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
# It is used during auto-correction to determine how many spaces should
# replace each tab.
IndentationWidth: ~
Layout/TrailingEmptyLines:
EnforcedStyle: final_newline
SupportedStyles:
- final_newline
- final_blank_line
#################### Naming ##########################
Naming/FileName:
# File names listed in `AllCops:Include` are excluded by default. Add extra
# excludes here.
Exclude:
- 'lib/rambling-trie.rb'
# When `true`, requires that each source file should define a class or module
# with a name which matches the file name (converted to ... case).
# It further expects it to be nested inside modules which match the names
# of subdirectories in its path.
ExpectMatchingDefinition: false
# If non-`nil`, expect all source file names to match the following regex.
# Only the file name itself is matched, not the entire file path.
# Use anchors as necessary if you want to match the entire name rather than
# just a part of it.
Regex: ~
# With `IgnoreExecutableScripts` set to `true`, this cop does not
# report offending filenames for executable scripts (i.e. source
# files with a shebang in the first line).
IgnoreExecutableScripts: true
AllowedAcronyms:
- CLI
- DSL
- ACL
- API
- ASCII
- CPU
- CSS
- DNS
- EOF
- GUID
- HTML
- HTTP
- HTTPS
- ID
- IP
- JSON
- LHS
- QPS
- RAM
- RHS
- RPC
- SLA
- SMTP
- SQL
- SSH
- TCP
- TLS
- TTL
- UDP
- UI
- UID
- UUID
- URI
- URL
- UTF8
- VM
- XML
- XMPP
- XSRF
- XSS
Naming/HeredocDelimiterNaming:
ForbiddenDelimiters:
- END
- !ruby/regexp '/EO[A-Z]{1}/'
Naming/HeredocDelimiterCase:
EnforcedStyle: uppercase
SupportedStyles:
- lowercase
- uppercase
Naming/MethodName:
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Naming/PredicateName:
# Predicate name prefixes.
NamePrefix:
- is_
- has_
- have_
# Predicate name prefixes that should be removed.
ForbiddenPrefixes:
- is_
- has_
- have_
# Predicate names which, despite having a blacklisted prefix, or no `?`,
# should still be accepted
AllowedMethods:
- is_a?
# Method definition macros for dynamically generated methods.
MethodDefinitionMacros:
- define_method
- define_singleton_method
# Exclude Rspec specs because there is a strong convention to write spec
# helpers in the form of `have_something` or `be_something`.
Exclude:
- 'spec/**/*'
# Naming/UncommunicativeBlockParamName:
# # Parameter names may be equal to or greater than this value
# MinNameLength: 1
# AllowNamesEndingInNumbers: true
# AllowedNames: []
# ForbiddenNames: []
#
# Naming/UncommunicativeMethodParamName:
# # Parameter names may be equal to or greater than this value
# MinNameLength: 3
# AllowNamesEndingInNumbers: true
# AllowedNames:
# - io
# - id
# ForbiddenNames: []
Naming/VariableName:
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Naming/VariableNumber:
EnforcedStyle: normalcase
SupportedStyles:
- snake_case
- normalcase
- non_integer
#################### Style ###########################
Style/Alias:
# SupportedStyles:
# - prefer_alias
# - prefer_alias_method
EnforcedStyle: prefer_alias_method
Exclude:
- 'tasks/ips.rb'
Style/AndOr:
# Whether `and` and `or` are banned only in conditionals (conditionals)
# or completely (always).
EnforcedStyle: always
SupportedStyles:
- always
- conditionals
Style/AsciiComments:
AllowedChars: []
# Checks if usage of `%()` or `%Q()` matches configuration.
Style/BarePercentLiterals:
EnforcedStyle: bare_percent
SupportedStyles:
- percent_q
- bare_percent
Style/BlockDelimiters:
EnforcedStyle: line_count_based
SupportedStyles:
# The `line_count_based` style enforces braces around single line blocks and
# do..end around multi-line blocks.
- line_count_based
# The `semantic` style enforces braces around functional blocks, where the
# primary purpose of the block is to return a value and do..end for
# procedural blocks, where the primary purpose of the block is its
# side-effects.
#
# This looks at the usage of a block's method to determine its type (e.g. is
# the result of a `map` assigned to a variable or passed to another
# method) but exceptions are permitted in the `ProceduralMethods`,
# `FunctionalMethods` and `IgnoredMethods` sections below.
- semantic
# The `braces_for_chaining` style enforces braces around single line blocks
# and do..end around multi-line blocks, except for multi-line blocks whose
# return value is being chained with another method (in which case braces
# are enforced).
- braces_for_chaining
ProceduralMethods:
# Methods that are known to be procedural in nature but look functional from
# their usage, e.g.
#
# time = Benchmark.realtime do
# foo.bar
# end
#
# Here, the return value of the block is discarded but the return value of
# `Benchmark.realtime` is used.
- benchmark
- bm
- bmbm
- create
- each_with_object
- measure
- new
- realtime
- tap
- with_object
FunctionalMethods:
# Methods that are known to be functional in nature but look procedural from
# their usage, e.g.
#
# let(:foo) { Foo.new }
#
# Here, the return value of `Foo.new` is used to define a `foo` helper but
# doesn't appear to be used from the return value of `let`.
- let
- let!
- subject
- watch
AllowedPatterns:
# Methods that can be either procedural or functional and cannot be
# categorised from their usage alone, e.g.
#
# foo = lambda do |x|
# puts "Hello, #{x}"
# end
#
# foo = lambda do |x|
# x * 100
# end
#
# Here, it is impossible to tell from the return value of `lambda` whether
# the inner block's return value is significant.
- lambda
- proc
- it
Style/ClassAndModuleChildren:
# Checks the style of children definitions at classes and modules.
#
# Basically there are two different styles:
#
# `nested` - have each child on a separate line
# class Foo
# class Bar
# end
# end
#
# `compact` - combine definitions as much as possible
# class Foo::Bar
# end
#
# The compact style is only forced, for classes or modules with one child.
EnforcedStyle: nested
SupportedStyles:
- nested
- compact
Style/ClassCheck:
EnforcedStyle: is_a?
SupportedStyles:
- is_a?
- kind_of?
# Align with the style guide.
Style/CollectionMethods:
# Mapping from undesired method to desired_method
# e.g. to use `detect` over `find`:
#
# CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
# Use '`' or '%x' around command literals.
Style/CommandLiteral:
EnforcedStyle: backticks
# backticks: Always use backticks.
# percent_x: Always use `%x`.
# mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
SupportedStyles:
- backticks
- percent_x
- mixed
# If `false`, the cop will always recommend using `%x` if one or more backticks
# are found in the command string.
AllowInnerBackticks: false
# Checks formatting of special comments
Style/CommentAnnotation:
Keywords:
- TODO
- FIXME
- OPTIMIZE
- HACK
- REVIEW
Style/ConditionalAssignment:
EnforcedStyle: assign_to_condition
SupportedStyles:
- assign_to_condition
- assign_inside_condition
# When configured to `assign_to_condition`, `SingleLineConditionsOnly`
# will only register an offense when all branches of a condition are
# a single line.
# When configured to `assign_inside_condition`, `SingleLineConditionsOnly`
# will only register an offense for assignment to a condition that has
# at least one multiline branch.
SingleLineConditionsOnly: true
IncludeTernaryExpressions: true
# Checks that you have put a copyright in a comment before any code.
#
# You can override the default Notice in your .rubocop.yml file.
#
# In order to use autocorrect, you must supply a value for the
# `AutocorrectNotice` key that matches the regexp Notice. A blank
# `AutocorrectNotice` will cause an error during autocorrect.
#
# Autocorrect will add a copyright notice in a comment at the top
# of the file immediately after any shebang or encoding comments.
#
# Example rubocop.yml:
#
# Style/Copyright:
# Enabled: true
# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc'
# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.'
#
Style/Copyright:
Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
AutocorrectNotice: ''
Style/Documentation:
Exclude:
- 'spec/**/*'
- 'test/**/*'
- 'tasks/**/*'
Style/DocumentationMethod:
RequireForNonPublicMethods: false
# Warn on empty else statements
# empty - warn only on empty `else`
# nil - warn on `else` with nil in it
# both - warn on empty `else` and `else` with `nil` in it
Style/EmptyElse:
EnforcedStyle: both
SupportedStyles:
- empty
- nil
- both
Style/EmptyMethod:
EnforcedStyle: compact
SupportedStyles:
- compact
- expanded
# Disable explicit block argument as it has a significant effect on performance
Style/ExplicitBlockArgument:
Enabled: false
# Checks use of for or each in multiline loops.
Style/For:
EnforcedStyle: each
SupportedStyles:
- each
- for
# Enforce the method used for string formatting.
Style/FormatString:
EnforcedStyle: format
SupportedStyles:
- format
- sprintf
- percent
# Enforce using either `%<token>s` or `%{token}`
Style/FormatStringToken:
EnforcedStyle: annotated
SupportedStyles:
# Prefer tokens which contain a sprintf like type annotation like
# `%<name>s`, `%<age>d`, `%<score>f`
- annotated
# Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
- template
- unannotated
Style/FrozenStringLiteralComment:
EnforcedStyle: always_true
# Built-in global variables are allowed by default.
Style/GlobalVars:
AllowedVariables: []
# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
# needs to have to trigger this cop
Style/GuardClause:
MinBodyLength: 1
Style/HashSyntax:
EnforcedStyle: ruby19
SupportedStyles:
# checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
- ruby19
# checks for hash rocket syntax for all hashes
- hash_rockets
# forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
- no_mixed_keys
# enforces both ruby19 and no_mixed_keys styles
- ruby19_no_mixed_keys
# Force hashes that have a symbol value to use hash rockets
UseHashRocketsWithSymbolValues: false
# Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
PreferHashRocketsForNonAlnumEndingSymbols: false
Style/InverseMethods:
# `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
# The relationship of inverse methods only needs to be defined in one direction.
# Keys and values both need to be defined as symbols.
InverseMethods:
:any?: :none?
:even?: :odd?
:==: :!=
:=~: :!~
:<: :>=
:>: :<=
# `ActiveSupport` defines some common inverse methods. They are listed below,
# and not enabled by default.
#:present?: :blank?,
#:include?: :exclude?
# `InverseBlocks` are methods that are inverted by inverting the return
# of the block that is passed to the method
InverseBlocks:
:select: :reject
:select!: :reject!
Style/Lambda:
EnforcedStyle: line_count_dependent
SupportedStyles:
- line_count_dependent
- lambda
- literal
Style/LambdaCall:
EnforcedStyle: call
SupportedStyles:
- call
- braces
Style/MethodCallWithArgsParentheses:
IgnoreMacros: true
AllowedPatterns: []
Style/MethodDefParentheses:
# SupportedStyles:
# - require_parentheses
# - require_no_parentheses
# - require_no_parentheses_except_multiline
EnforcedStyle: require_no_parentheses_except_multiline
Style/MissingElse:
EnforcedStyle: both
SupportedStyles:
# if - warn when an if expression is missing an else branch
# case - warn when a case expression is missing an else branch
# both - warn when an if or case expression is missing an else branch
- if
- case
- both
# Checks the grouping of mixins (`include`, `extend`, `prepend`) in `class` and
# `module` bodies.
Style/MixinGrouping:
EnforcedStyle: separated
SupportedStyles:
# separated: each mixed in module goes in a separate statement.
# grouped: mixed in modules are grouped into a single statement.
- separated
- grouped
Style/ModuleFunction:
EnforcedStyle: module_function
SupportedStyles:
- module_function
- extend_self
Style/MultilineMemoization:
EnforcedStyle: keyword
SupportedStyles:
- keyword
- braces
Style/NegatedIf:
EnforcedStyle: both
SupportedStyles:
# both: prefix and postfix negated `if` should both use `unless`
# prefix: only use `unless` for negated `if` statements positioned before the body of the statement
# postfix: only use `unless` for negated `if` statements positioned after the body of the statement
- both
- prefix
- postfix
Style/Next:
# With `always` all conditions at the end of an iteration needs to be
# replaced by next - with `skip_modifier_ifs` the modifier if like this one
# are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
EnforcedStyle: skip_modifier_ifs
# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
# needs to have to trigger this cop
MinBodyLength: 3
SupportedStyles:
- skip_modifier_ifs
- always
Style/NonNilCheck:
# With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
# `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
# **usually** OK, but might change behavior.
#
# With `IncludeSemanticChanges` set to `false`, this cop does not report
# offenses for `!x.nil?` and does no changes that might change behavior.
IncludeSemanticChanges: false
Style/NumericLiterals:
MinDigits: 5
Strict: false
Style/NumericLiteralPrefix:
EnforcedOctalStyle: zero_with_o
SupportedOctalStyles:
- zero_with_o
- zero_only
Style/NumericPredicate:
EnforcedStyle: predicate
SupportedStyles:
- predicate
- comparison
# Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
# false positives.
Exclude:
- 'spec/**/*'
Style/OptionHash:
# A list of parameter names that will be flagged by this cop.
SuspiciousParamNames:
- options
- opts
- args
- params
- parameters
# Allow safe assignment in conditions.
Style/ParenthesesAroundCondition:
AllowSafeAssignment: true
Style/PercentLiteralDelimiters:
# Specify the default preferred delimiter for all types with the 'default' key
# Override individual delimiters (even with default specified) by specifying
# an individual key
PreferredDelimiters:
default: ()
'%i': '()'
'%I': '()'
'%r': '{}'
'%w': '()'
'%W': '()'
Style/PercentQLiterals:
EnforcedStyle: lower_case_q
SupportedStyles:
- lower_case_q # Use `%q` when possible, `%Q` when necessary
- upper_case_q # Always use `%Q`
Style/PreferredHashMethods:
EnforcedStyle: short
SupportedStyles:
- short
- verbose
Exclude:
- 'tasks/**/*'
- 'spec/lib/rambling/trie/container_spec.rb'
- 'spec/support/shared_examples/a_trie_node.rb'
Style/RaiseArgs:
EnforcedStyle: exploded
SupportedStyles:
- compact # raise Exception.new(msg)
- exploded # raise Exception, msg
Style/RedundantReturn:
# When `true` allows code like `return x, y`.
AllowMultipleReturnValues: false
# Use `/` or `%r` around regular expressions.
Style/RegexpLiteral:
# slashes: Always use slashes.
# percent_r: Always use `%r`.
# mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
# SupportedStyles:
# - slashes
# - percent_r
# - mixed
EnforcedStyle: percent_r
# If `false`, the cop will always recommend using `%r` if one or more slashes
# are found in the regexp string.
AllowInnerSlashes: false
Style/RescueStandardError:
EnforcedStyle: explicit
# implicit: Do not include the error class, `rescue`
# explicit: Require an error class `rescue StandardError`
SupportedStyles:
- implicit
- explicit
Style/ReturnNil:
EnforcedStyle: return
SupportedStyles:
- return
- return_nil
Style/SafeNavigation:
# Safe navigation may cause a statement to start returning `nil` in addition
# to whatever it used to return.
ConvertCodeThatCanStartToReturnNil: false
Style/Semicolon:
# Allow `;` to separate several expressions on the same line.
AllowAsExpressionSeparator: false
Style/SignalException:
EnforcedStyle: only_raise
SupportedStyles:
- only_raise
- only_fail
- semantic
Style/SingleLineBlockParams:
Methods:
- reduce:
- acc
- elem
- inject:
- acc
- elem
Style/SingleLineMethods:
AllowIfMethodIsEmpty: true
Style/SpecialGlobalVars:
EnforcedStyle: use_english_names
SupportedStyles:
- use_perl_names
- use_english_names
Style/StabbyLambdaParentheses:
EnforcedStyle: require_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
Style/StringLiterals:
EnforcedStyle: single_quotes
SupportedStyles:
- single_quotes
- double_quotes
# If `true`, strings which span multiple lines using `\` for continuation must
# use the same type of quotes on each line.
ConsistentQuotesInMultiline: false
Style/StringLiteralsInInterpolation:
EnforcedStyle: single_quotes
SupportedStyles:
- single_quotes
- double_quotes
Style/StringMethods:
# Mapping from undesired method to desired_method
# e.g. to use `to_sym` over `intern`:
#
# StringMethods:
# PreferredMethods:
# intern: to_sym
PreferredMethods:
intern: to_sym
Style/SymbolArray:
EnforcedStyle: percent
MinSize: 0
SupportedStyles:
- percent
- brackets
Style/SymbolProc:
# A list of method names to be allowed by the check.
# The names should be fairly unique, otherwise you'll end up ignoring lots of code.
AllowedMethods:
- respond_to
- define_method
Style/TernaryParentheses:
EnforcedStyle: require_no_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
- require_parentheses_when_complex
AllowSafeAssignment: true
Style/TrailingCommaInArguments:
# SupportedStylesForMultiline:
# - comma
# - consistent_comma
# - no_comma
# If `comma`, the cop requires a comma after the last argument, but only for
# parenthesized method calls where each argument is on its own line.
# If `consistent_comma`, the cop requires a comma after the last argument,
# for all parenthesized method calls with arguments.
EnforcedStyleForMultiline: comma
Style/TrailingCommaInArrayLiteral:
# # SupportedStylesForMultiline:
# # - comma
# # - consistent_comma
# # - no_comma
# # If `comma`, the cop requires a comma after the last item in an array,
# # but only when each item is on its own line.
# # If `consistent_comma`, the cop requires a comma after the last item of all
# # non-empty array literals.
EnforcedStyleForMultiline: comma
Style/TrailingCommaInHashLiteral:
# # SupportedStylesForMultiline:
# # - comma
# # - consistent_comma
# # - no_comma
# # If `comma`, the cop requires a comma after the last item in an array,
# # but only when each item is on its own line.
# # If `consistent_comma`, the cop requires a comma after the last item of all
# # non-empty array literals.
EnforcedStyleForMultiline: comma
# Style/TrailingCommaInArrayLiteral:
# # SupportedStylesForMultiline:
# # - comma
# # - consistent_comma
# # - no_comma
# # If `comma`, the cop requires a comma after the last item in an array,
# # but only when each item is on its own line.
# # If `consistent_comma`, the cop requires a comma after the last item of all
# # non-empty array literals.
# EnforcedStyleForMultiline: comma
#
# Style/TrailingCommaInHashLiteral:
# # SupportedStylesForMultiline:
# # - comma
# # - consistent_comma
# # - no_comma
# # If `comma`, the cop requires a comma after the last item in a hash,
# # but only when each item is on its own line.
# # If `consistent_comma`, the cop requires a comma after the last item of all
# # non-empty hash literals.
# EnforcedStyleForMultiline: comma
# `TrivialAccessors` requires exact name matches and doesn't allow
# predicated methods by default.
Style/TrivialAccessors:
# When set to `false` the cop will suggest the use of accessor methods
# in situations like:
#
# def name
# @other_name
# end
#
# This way you can uncover "hidden" attributes in your code.
ExactNameMatch: true
AllowPredicates: true
# Allows trivial writers that don't end in an equal sign. e.g.
#
# def on_exception(action)
# @on_exception=action
# end
# on_exception :restart
#
# Commonly used in DSLs
AllowDSLWriters: false
IgnoreClassMethods: false
AllowedMethods:
- to_ary
- to_a
- to_c
- to_enum
- to_h
- to_hash
- to_i
- to_int
- to_io
- to_open
- to_path
- to_proc
- to_r
- to_regexp
- to_str
- to_s
- to_sym
Exclude:
- 'tasks/**/*'
# `WordArray` enforces how array literals of word-like strings should be expressed.
Style/WordArray:
EnforcedStyle: percent
SupportedStyles:
# percent style: %w(word1 word2)
- percent
# bracket style: ['word1', 'word2']
- brackets
# The `MinSize` option causes the `WordArray` rule to be ignored for arrays
# smaller than a certain size. The rule is only applied to arrays
# whose element count is greater than or equal to `MinSize`.
MinSize: 0
# The regular expression `WordRegex` decides what is considered a word.
WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
Style/YodaCondition:
EnforcedStyle: require_for_all_comparison_operators
#################### Metrics ###############################
Metrics/AbcSize:
# The ABC size is a calculated magnitude, so this number can be an Integer or
# a Float.
Max: 20
Exclude:
- 'tasks/*.rb'
Metrics/BlockLength:
CountComments: false # count full line comments?
Max: 25
AllowedMethods: []
Exclude:
- 'test/**/*'
- 'spec/**/*'
- 'tasks/ips.rb'
Metrics/BlockNesting:
CountBlocks: false
Max: 3
Metrics/ClassLength:
CountComments: false # count full line comments?
Max: 100
Exclude:
- 'lib/rambling/trie/container.rb'
- 'tasks/performance/configuration.rb'
# Avoid complex methods.
Metrics/CyclomaticComplexity:
Max: 6
Metrics/MethodLength:
CountComments: false # count full line comments?
Max: 20
Metrics/ModuleLength:
CountComments: false # count full line comments?
Max: 100
Metrics/ParameterLists:
Max: 5
MaxOptionalParameters: 5
CountKeywordArgs: true
Metrics/PerceivedComplexity:
Max: 7
#################### Lint ##################################
# Allow safe assignment in conditions.
Lint/AssignmentInCondition:
AllowSafeAssignment: true
Lint/SuppressedException:
Exclude:
- 'spec/**/*'
Lint/InheritException:
# The default base class in favour of `Exception`.
EnforcedStyle: runtime_error
SupportedStyles:
- runtime_error
- standard_error
Lint/MissingCopEnableDirective:
# Maximum number of consecutive lines the cop can be disabled for.
# 0 allows only single-line disables
# 1 would mean the maximum allowed is the following:
# # rubocop:disable SomeCop
# a = 1
# # rubocop:enable SomeCop
# .inf for any size
MaximumRangeSize: .inf
Lint/SafeNavigationChain:
AllowedMethods:
- present?
- blank?
- presence
- try
# Checks for shadowed arguments
Lint/ShadowedArgument:
IgnoreImplicitReferences: false
# Checks for unused block arguments
Lint/UnusedBlockArgument:
IgnoreEmptyBlocks: true
AllowUnusedKeywordArguments: false
# Checks for unused method arguments.
Lint/UnusedMethodArgument:
AllowUnusedKeywordArguments: false
IgnoreEmptyMethods: true
# Lint/Void:
# CheckForMethodsWithNoSideEffects: false
#################### RSpec #################################
RSpec/MultipleMemoizedHelpers:
Max: 10
RSpec/NestedGroups:
Max: 5
#################### Performance ###########################
Performance/DoubleStartEndWith:
# Used to check for `starts_with?` and `ends_with?`.
# These methods are defined by `ActiveSupport`.
IncludeActiveSupportAliases: false
Performance/RedundantMerge:
# Max number of key-value pairs to consider an offense
MaxKeyValuePairs: 2
Bundler/OrderedGems:
TreatCommentsAsGroupSeparators: true
Gemspec/OrderedDependencies:
TreatCommentsAsGroupSeparators: true
#################### Security ##############################
Security/MarshalLoad:
Exclude:
- 'lib/rambling/trie/serializers/marshal.rb'