Skip to content

Instantly share code, notes, and snippets.

@samzhab
Forked from pdxwolfy/rubocop.yml
Last active March 17, 2021 03:03
Show Gist options
  • Save samzhab/28dedda2b9e8888913fc2c09b96f7e19 to your computer and use it in GitHub Desktop.
Save samzhab/28dedda2b9e8888913fc2c09b96f7e19 to your computer and use it in GitHub Desktop.
# Common configuration.
AllCops:
# Include common Ruby source files.
Include:
- '**/*.gemspec'
- '**/*.podspec'
- '**/*.jbuilder'
- '**/*.rake'
- '**/*.opal'
- '**/config.ru'
- '**/Gemfile'
- '**/Rakefile'
- '**/Capfile'
- '**/Guardfile'
- '**/Podfile'
- '**/Thorfile'
- '**/Vagrantfile'
- '**/Berksfile'
- '**/Cheffile'
- '**/Vagabondfile'
Exclude:
- 'vendor/**/*'
# Default formatter will be used if no -f/--format option is given.
DefaultFormatter: progress
# Cop names are not displayed in offense messages by default. Change behavior
# by overriding DisplayCopNames, or by giving the -D/--display-cop-names
# option.
DisplayCopNames: true
# Style guide URLs are not displayed in offense messages by default. Change
# behavior by overriding DisplayStyleGuide, or by giving the
# -S/--display-style-guide option.
DisplayStyleGuide: true
# Extra details are not displayed in offense messages by default. Change
# behavior by overriding ExtraDetails, or by giving the
# -E/--extra-details option.
ExtraDetails: true
# Additional cops that do not reference a style guide rule may be enabled by
# default. Change behavior by overriding StyleGuideCopsOnly, or by giving
# the --only-guide-cops option.
StyleGuideCopsOnly: false
# All cops except the ones in disabled.yml are enabled by default. Change
# this behavior by overriding DisabledByDefault. When DisabledByDefault is
# true, all cops in the default configuration are disabled, and and only cops
# in user configuration are enabled. This makes cops opt-in instead of
# opt-out. Note that when DisabledByDefault is true, cops in user
# configuration will be enabled even if they don't set the Enabled parameter.
DisabledByDefault: false
# Enables the result cache if true. Can be overridden by the --cache command
# line option.
UseCache: true
# Threshold for how many files can be stored in the result cache before some
# of the files are automatically removed.
MaxFilesInCache: 20000
# The cache will be stored in "rubocop_cache" under this directory. The name
# "/tmp" is special and will be converted to the system temporary directory,
# which is "/tmp" on Unix-like systems, but could be something else on other
# systems.
CacheRootDirectory: /tmp
# What version of the Ruby interpreter is the inspected code intended to
# run on? (If there is more than one, set this to the lowest version.)
TargetRubyVersion: 2.3
Layout/AccessModifierIndentation:
Description: Check indentation of private/protected visibility modifiers.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#indent-public-private-protected'
SupportedStyles:
- outdent
- indent
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Enabled: true
Naming/AccessorMethodName:
Description: Check the naming of accessor methods for get_/set_.
Enabled: true
Style/Alias:
Description: 'Use alias_method instead of alias.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#alias-method'
Enabled: true
SupportedStyles:
- prefer_alias
- prefer_alias_method
Layout/AlignArray:
Description: >-
Align the elements of an array literal if they span more than
one line.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#align-multiline-arrays'
Enabled: true
Layout/AlignHash:
Description: >-
Align the elements of a hash literal if they span more than
one line.
Enabled: true
# Alignment of entries using hash rocket as separator. Valid values are:
#
# key - left alignment of keys
# 'a' => 2
# 'bb' => 3
# separator - alignment of hash rockets, keys are right aligned
# 'a' => 2
# 'bb' => 3
# table - left alignment of keys, hash rockets, and values
# 'a' => 2
# 'bb' => 3
EnforcedHashRocketStyle: table
# 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: table
# 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: always_inspect
SupportedLastArgumentHashStyles:
- always_inspect
- always_ignore
- ignore_implicit
- ignore_explicit
Layout/AlignParameters:
Description: >-
Align the parameters of a method call if they span more
than one line.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-double-indent'
Enabled: true
# 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)
SupportedStyles:
- with_first_parameter
- with_fixed_indentation
Style/AndOr:
Description: 'Use &&/|| instead of and/or.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-and-or-or'
Enabled: true
# Whether `and` and `or` are banned only in conditionals (conditionals)
# or completely (always).
SupportedStyles:
- always
- conditionals
Style/ArrayJoin:
Description: 'Use Array#join instead of Array#*.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#array-join'
Enabled: true
Style/AsciiComments:
Description: 'Use only ascii symbols in comments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#english-comments'
Enabled: true
Naming/AsciiIdentifiers:
Description: 'Use only ascii symbols in identifiers.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#english-identifiers'
Enabled: true
Style/Attr:
Description: 'Checks for uses of Module#attr.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#attr'
Enabled: true
Style/AutoResourceCleanup:
Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
Enabled: true
Style/BarePercentLiterals:
Description: 'Checks if usage of %() or %Q() matches configuration.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-q-shorthand'
Enabled: true
SupportedStyles:
- percent_q
- bare_percent
Style/BeginBlock:
Description: 'Avoid the use of BEGIN blocks.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-BEGIN-blocks'
Enabled: true
Style/BlockComments:
Description: 'Do not use block comments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-block-comments'
Enabled: true
Style/BlockDelimiters:
Description: >-
Avoid using {...} for multi-line blocks (multiline chaining is
always ugly).
Prefer {...} over do...end for single-line blocks.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#single-line-blocks'
Enabled: true
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
IgnoredMethods:
# 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
Layout/BlockEndNewline:
Description: 'Put end statement of multiline block on its own line.'
Enabled: true
Style/BracesAroundHashParameters:
Description: 'Enforce braces style around hash parameters.'
Enabled: true
Style/CaseEquality:
Description: 'Avoid explicit use of the case equality operator(===).'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-case-equality'
Enabled: true
Layout/CaseIndentation:
Description: 'Indentation of when in a case/when/[else/]end.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#indent-when-to-case'
Enabled: true
EnforcedStyle: case
IndentOneStep: false
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
# This only matters if IndentOneStep is true
IndentationWidth: ~
Style/CharacterLiteral:
Description: 'Checks for uses of character literals.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-character-literals'
Enabled: true
Naming/ClassAndModuleCamelCase:
Description: 'Use CamelCase for classes and modules.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#camelcase-classes'
Enabled: true
Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.'
Enabled: true
# 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 / modules with one child.
Style/ClassCheck:
Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.'
Enabled: true
Style/ClassMethods:
Description: 'Use self when defining module/class methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#def-self-class-methods'
Enabled: true
Style/ClassVars:
Description: 'Avoid the use of class variables.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-class-vars'
Enabled: true
Layout/ClosingParenthesisIndentation:
Description: 'Checks the indentation of hanging closing parentheses.'
Enabled: true
Style/CollectionMethods:
Description: 'Preferred collection methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#map-find-select-reduce-size'
Enabled: true
# Mapping from undesired method to desired_method
# e.g. to use `detect` over `find`:
#
# CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
detect: 'find'
find_all: 'select'
inject: 'reduce'
length: 'size'
Style/ColonMethodCall:
Description: 'Do not use :: for method call.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#double-colons'
Enabled: true
Style/CommandLiteral:
Description: 'Use `` or %x around command literals.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-x'
Enabled: true
# backticks: Always use backticks.
# percent_x: Always use %x.
# mixed: Use backticks on single-line commands, and %x on multi-line commands.
AllowInnerBackticks: false
Style/CommentAnnotation:
Description: >-
Checks formatting of special comments
(TODO, FIXME, OPTIMIZE, HACK, REVIEW).
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#annotate-keywords'
Enabled: true
Keywords:
- TODO
- FIXME
- OPTIMIZE
- HACK
- REVIEW
Layout/CommentIndentation:
Description: 'Indentation of comments.'
Enabled: true
Style/ConditionalAssignment:
Description: >-
Use the return value of `if` and `case` statements for
assignment to a variable and variable comparison instead
of assigning that variable inside of each branch.
Enabled: true
SingleLineConditionsOnly: true
# Whether the cop should register offenses for conditionals whose branches
# contain more than one statement a piece
Naming/ConstantName:
Description: 'Constants should use SCREAMING_SNAKE_CASE.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#screaming-snake-case'
Enabled: 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:
Description: 'Include a copyright notice in each file before any code.'
Enabled: true
Notice: '(Copyright \(c\) 20\d\d .+|Unknown Copyright)'
AutocorrectNotice: '# Copyright (c) 2016 Pete Hanson'
Style/DefWithParentheses:
Description: 'Use def with parentheses when there are arguments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#method-parens'
Enabled: false
Style/Documentation:
Description: 'Document classes and non-namespace modules.'
Enabled: false
Exclude:
- 'spec/**/*'
- 'test/**/*'
- 'test_*'
Style/DocumentationMethod:
Enabled: false
RequireForNonPublicMethods: false
Layout/DotPosition:
Description: 'Checks the position of the dot in multi-line method calls.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#consistent-multi-line-chains'
Enabled: true
Style/DoubleNegation:
Description: 'Checks for uses of double negation (!!).'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-bang-bang'
Enabled: true
Style/EachForSimpleLoop:
Description: >-
Use `Integer#times` for a simple loop which iterates a fixed
number of times.
Enabled: true
Style/EachWithObject:
Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
Enabled: true
Layout/ElseAlignment:
Description: 'Align elses and elsifs correctly.'
Enabled: true
Style/EmptyElse:
Description: 'Avoid empty else-clauses.'
Enabled: true
# 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
Layout/EmptyLineBetweenDefs:
Enabled: true
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#empty-lines-between-methods'
# If true, this parameter means that single line method definitions don't
# need an empty line between them.
AllowAdjacentOneLineDefs: true
Layout/EmptyLines:
Description: "Don't use several empty lines in a row."
Enabled: true
Layout/EmptyLinesAroundAccessModifier:
Description: "Keep blank lines around access modifiers."
Enabled: true
Layout/EmptyLinesAroundBlockBody:
Description: "Keeps track of empty lines around block bodies."
Enabled: true
Layout/EmptyLinesAroundClassBody:
Description: "Keeps track of empty lines around class bodies."
Enabled: true
Layout/EmptyLinesAroundModuleBody:
Description: "Keeps track of empty lines around module bodies."
Enabled: true
Layout/EmptyLinesAroundMethodBody:
Description: "Keeps track of empty lines around method bodies."
Enabled: true
Style/EmptyLiteral:
Description: 'Prefer literals to Array.new/Hash.new/String.new.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#literal-array-hash'
Enabled: true
# Checks whether the source file has a utf-8 encoding comment or not
Style/Encoding:
Description: 'Use UTF-8 as the source file encoding.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#utf-8'
Enabled: true
Style/EndBlock:
Description: 'Avoid the use of END blocks.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-END-blocks'
Enabled: true
Layout/EndOfLine:
Description: 'Use Unix-style line endings.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#crlf'
Enabled: true
Style/EvenOdd:
Description: 'Favor the use of Integer#even? && Integer#odd?'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#predicate-methods'
Enabled: true
Layout/ExtraSpacing:
Description: 'Do not use unnecessary spacing.'
Enabled: true
# 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
# Disables checks for snake_case file names. This is needed within Sublime Text
# thanks to the use of temporary files.
Naming/FileName:
Description: 'Use snake_case for source file names.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#snake-case-files'
Enabled: true
# File names listed in AllCops:Include are excluded by default. Add extra
# excludes here.
Exclude: []
# 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
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/FirstParameterIndentation:
Description: 'Checks the indentation of the first parameter in a method call.'
Enabled: true
IndentationWidth: ~
Style/FlipFlop:
Description: 'Checks for flip flops'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-flip-flops'
Enabled: true
Style/For:
Description: 'Checks use of for or each in multiline loops.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-for-loops'
Enabled: true
Style/FormatString:
Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#sprintf'
Enabled: true
Style/FrozenStringLiteralComment:
Description: >-
Add the frozen_string_literal comment to the top of files
to help transition from Ruby 2.3.0 to Ruby 3.0.
Enabled: true
Style/GlobalVars:
Description: 'Do not introduce global variables.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#instance-vars'
Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html'
Enabled: true
AllowedVariables: []
Style/GuardClause:
Description: 'Check for conditionals that can be replaced with guard clauses'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-nested-conditionals'
Enabled: true
# `MinBodyLength` defines the number of lines of the a body of an if / unless
# needs to have to trigger this cop
MinBodyLength: 1
Style/HashSyntax:
Description: >-
Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
{ :a => 1, :b => 2 }.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#hash-literals'
Enabled: true
UseHashRocketsWithSymbolValues: false
# Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
PreferHashRocketsForNonAlnumEndingSymbols: false
Style/IfInsideElse:
Description: 'Finds if nodes inside else, which can be converted to elsif.'
Enabled: true
Style/IfUnlessModifier:
Description: >-
Favor modifier if/unless usage when you have a
single-line body.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#if-as-a-modifier'
Enabled: true
MaxLineLength: 80
Style/IfUnlessModifierOfIfUnless:
Description: >-
Avoid modifier if/unless usage on conditionals.
Enabled: true
Style/IfWithSemicolon:
Description: 'Do not use if x; .... Use the ternary operator instead.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-semicolon-ifs'
Enabled: true
Layout/IndentationConsistency:
Description: 'Keep indentation straight.'
Enabled: true
# 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.
Layout/IndentationWidth:
Description: 'Use 2 spaces for indentation.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-indentation'
Enabled: true
# Number of spaces for each indentation level.
Width: 2
Style/IdenticalConditionalBranches:
Description: >-
Checks that conditional statements do not have an identical
line at the end of each branch, which can validly be moved
out of the conditional.
Enabled: true
Style/ImplicitRuntimeError:
Description: >-
Use `raise` or `fail` with an explicit exception class and
message, rather than just a message.
Enabled: true
Layout/IndentArray:
Description: >-
Checks the indentation of the first element in an array
literal.
Enabled: true
# 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.
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentAssignment:
Description: >-
Checks the indentation of the first line of the
right-hand-side of a multi-line assignment.
Enabled: true
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentHash:
Description: 'Checks the indentation of the first key in a hash literal.'
Enabled: true
# 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.
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Style/InfiniteLoop:
Description: 'Use Kernel#loop for infinite loops.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#infinite-loop'
Enabled: true
Layout/InitialIndentation:
Description: >-
Checks the indentation of the first non-blank non-comment line in a file.
Enabled: true
Style/InlineComment:
Description: 'Avoid trailing inline comments.'
Enabled: false
Style/Lambda:
Description: 'Use the new lambda literal syntax for single-line blocks.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#lambda-multi-line'
Enabled: true
Style/LambdaCall:
Description: 'Use lambda.call(...) instead of lambda.(...).'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#proc-call'
Enabled: true
Layout/LeadingCommentSpace:
Description: 'Comments should start with a space.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#hash-space'
Enabled: true
Style/LineEndConcatenation:
Description: >-
Use \ instead of + or << to concatenate two string literals at
line end.
Enabled: true
Style/MethodCalledOnDoEndBlock:
Description: 'Avoid chaining a method call on a do...end block.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#single-line-blocks'
Enabled: true
Style/MethodCallWithoutArgsParentheses:
Description: 'Do not use parentheses for method calls with no arguments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#method-invocation-parens'
Enabled: true
Style/MethodDefParentheses:
Description: >-
Checks if the method definitions have or don't have
parentheses.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#method-parens'
Enabled: true
SupportedStyles:
- require_parentheses
- require_no_parentheses
- require_no_parentheses_except_multiline
Style/MethodMissing:
Description: 'Avoid using `method_missing`.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-method-missing'
Enabled: true
Naming/MethodName:
Description: 'Use the configured style when naming methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#snake-case-symbols-methods-vars'
Enabled: true
SupportedStyles:
- snake_case
- camelCase
Style/ModuleFunction:
SupportedStyles:
- module_function
- extend_self
Style/MissingElse:
Description: >-
Require if/case expressions to have an else branches.
If enabled, it is recommended that
Style/UnlessElse and Style/EmptyElse be enabled.
This will conflict with Style/EmptyElse if
Style/EmptyElse is configured to style "both"
Enabled: false
SupportedStyles:
# if - warn when an if expression is missing an else branch
# case - warn when a case expression is misisng an else branch
# both - warn when an if or case expression is missing an else branch
- if
- case
- both
Style/ModuleFunction:
Description: 'Checks for usage of `extend self` in modules.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#module-function'
Enabled: true
Layout/MultilineArrayBraceLayout:
Description: >-
Checks that the closing brace in an array literal is
symmetrical with respect to the opening brace and the
array elements.
Enabled: true
Layout/MultilineAssignmentLayout:
Description: 'Check for a newline after the assignment operator in multi-line assignments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#indent-conditional-assignment'
Enabled: true
# The types of assignments which are subject to this rule.
SupportedTypes:
- case
- class
- if
- kwbegin
- module
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
Style/MultilineBlockChain:
Description: 'Avoid multi-line chains of blocks.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#single-line-blocks'
Enabled: true
Layout/MultilineBlockLayout:
Description: 'Ensures newlines after multiline block do statements.'
Enabled: true
Style/MultilineIfThen:
Description: 'Do not use then for multi-line if/unless.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-then'
Enabled: true
Layout/MultilineMethodCallIndentation:
Description: >-
Checks indentation of method calls with the dot operator
that span more than one line.
Enabled: true
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/MultilineOperationIndentation:
Description: >-
Checks indentation of binary operations that span more than
one line.
Enabled: true
SupportedStyles:
- aligned
- indented
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Style/MultilineTernaryOperator:
Description: >-
Avoid multi-line ?: (the ternary operator);
use if/unless instead.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-multiline-ternary'
Enabled: true
Style/MutableConstant:
Description: 'Do not assign mutable objects to constants.'
Enabled: true
Style/NegatedIf:
Description: >-
Favor unless over if for negative conditions
(or control flow or).
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#unless-for-negatives'
Enabled: true
Style/NegatedWhile:
Description: 'Favor until over while for negative conditions.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#until-for-negatives'
Enabled: true
Style/NestedModifier:
Description: 'Avoid using nested modifiers.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-nested-modifiers'
Enabled: true
Style/NestedParenthesizedCalls:
Description: >-
Parenthesize method calls which are nested inside the
argument list of another parenthesized method call.
Enabled: true
Style/NestedTernaryOperator:
Description: 'Use one expression per branch in a ternary operator.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-nested-ternary'
Enabled: true
Style/Next:
Description: 'Use `next` to skip iteration instead of a condition at the end.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-nested-conditionals'
Enabled: true
# 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 }
# `MinBodyLength` defines the number of lines of the a body of an if / unless
# needs to have to trigger this cop
MinBodyLength: 3
SupportedStyles:
- skip_modifier_ifs
- always
Style/NilComparison:
Description: 'Prefer x.nil? to x == nil.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#predicate-methods'
Enabled: true
Style/NonNilCheck:
Enabled: true
Description: 'Checks for redundant nil checks.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-non-nil-checks'
# 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: true
Style/Not:
Description: 'Use ! instead of not.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#bang-not-not'
Enabled: true
Style/NumericLiterals:
Description: >-
Add underscores to large numeric literals to improve their
readability.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#underscores-in-numerics'
Enabled: true
MinDigits: 5
Style/NumericLiteralPrefix:
Enabled: true
EnforcedOctalStyle: zero_with_o
SupportedOctalStyles:
- zero_with_o
- zero_only
Style/NumericPredicate:
Description: >-
Checks for the use of predicate- or comparison methods for
numeric comparisons.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#predicate-methods'
Enabled: true
SupportedStyles:
- predicate
- comparison
# Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
# false positives.
Exclude:
- 'spec/**/*'
Style/OneLineConditional:
Description: >-
Favor the ternary operator(?:) over
if/then/else/end constructs.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#ternary-operator'
Enabled: true
Naming/BinaryOperatorParameterName:
Description: 'When defining binary operators, name the argument other.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#other-arg'
Enabled: true
Style/OptionalArguments:
Description: >-
Checks for optional arguments that do not appear at the end
of the argument list
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#optional-arguments'
Enabled: true
Style/OptionHash:
Description: "Don't use option hashes when you can use keyword arguments."
Enabled: true
# A list of parameter names that will be flagged by this cop.
SuspiciousParamNames:
- options
- opts
- args
- params
- parameters
Style/ParallelAssignment:
Description: >-
Check for simple usages of parallel assignment.
It will only warn when the number of variables
matches on both sides of the assignment.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#parallel-assignment'
Enabled: true
Style/ParenthesesAroundCondition:
Description: >-
Don't use parentheses around the condition of an
if/unless/while.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-parens-if'
Enabled: true
AllowSafeAssignment: false
Style/PercentLiteralDelimiters:
Description: 'Use `%`-literal delimiters consistently'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-literal-braces'
Enabled: true
PreferredDelimiters:
'%': ()
'%i': ()
'%q': ()
'%Q': ()
'%r': '{}'
'%s': ()
'%w': ()
'%W': ()
'%x': ()
Style/PercentQLiterals:
Description: 'Checks if uses of %Q/%q match the configured preference.'
Enabled: true
SupportedStyles:
- lower_case_q # Use %q when possible, %Q when necessary
- upper_case_q # Always use %Q
Style/PerlBackrefs:
Description: 'Avoid Perl-style regex back references.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-perl-regexp-last-matchers'
Enabled: true
Naming/PredicateName:
Description: 'Check the names of predicate methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#bool-methods-qmark'
Enabled: true
# Predicate name prefixes.
NamePrefix:
- is_
- has_
- have_
# Predicate name prefixes that should be removed.
NamePrefixBlacklist:
- is_
- has_
- have_
# Predicate names which, despite having a blacklisted prefix, or no ?,
# should still be accepted
NameWhitelist:
- is_a?
Style/Proc:
Description: 'Use proc instead of Proc.new.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#proc'
Enabled: true
Style/RaiseArgs:
Description: 'Checks the arguments passed to raise/fail.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#exception-class-messages'
Enabled: true
SupportedStyles:
- compact # raise Exception.new(msg)
- exploded # raise Exception, msg
Style/RedundantBegin:
Description: "Don't use begin blocks when they are not needed."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#begin-implicit'
Enabled: true
Style/RedundantException:
Description: "Checks for an obsolete RuntimeException argument in raise/fail."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-explicit-runtimeerror'
Enabled: true
Style/RedundantFreeze:
Description: "Checks usages of Object#freeze on immutable objects."
Enabled: true
Style/RedundantParentheses:
Description: "Checks for parentheses that seem not to serve any purpose."
Enabled: true
Style/RedundantReturn:
Description: "Don't use return where it's not required."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-explicit-return'
Enabled: true
# When true allows code like `return x, y`.
AllowMultipleReturnValues: false
Style/RedundantSelf:
Description: "Don't use self where it's not needed."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-self-unless-required'
Enabled: true
Style/RegexpLiteral:
Description: 'Use / or %r around regular expressions.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-r'
Enabled: true
# 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
# If false, the cop will always recommend using %r if one or more slashes
# are found in the regexp string.
AllowInnerSlashes: false
Layout/RescueEnsureAlignment:
Description: 'Align rescues and ensures correctly.'
Enabled: true
Style/RescueModifier:
Description: 'Avoid using rescue in its modifier form.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-rescue-modifiers'
Enabled: true
Style/SafeNavigation:
Description: >-
This cop transforms usages of a method call safeguarded by
a check for the existance of the object to
safe navigation (`&.`).
Enabled: true
Style/SelfAssignment:
Description: >-
Checks for places where self-assignment shorthand should have
been used.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#self-assignment'
Enabled: true
Style/Semicolon:
Description: "Don't use semicolons to terminate expressions."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-semicolon'
Enabled: true
# Allow ; to separate several expressions on the same line.
AllowAsExpressionSeparator: false
Style/Send:
Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#prefer-public-send'
Enabled: true
Style/SignalException:
Description: 'Checks for proper usage of fail and raise.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#fail-method'
Enabled: true
SupportedStyles:
- only_raise
- only_fail
- semantic
Style/SingleLineBlockParams:
Description: Enforces the names of some block params.
StyleGuide: https://github.com/samzhab/ruby-style-guide#reduce-blocks
Enabled: false
Methods:
- reduce:
- a
- e
- inject:
- a
- e
Style/SingleLineMethods:
Description: 'Avoid single-line methods.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-single-line-methods'
Enabled: true
AllowIfMethodIsEmpty: true
Layout/SpaceAfterColon:
Description: 'Use spaces after colons.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-operators'
Enabled: true
Layout/SpaceAfterComma:
Description: 'Use spaces after commas.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-operators'
Enabled: true
Layout/SpaceAfterMethodName:
Description: >-
Do not put a space between a method name and the opening
parenthesis in a method definition.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#parens-no-spaces'
Enabled: true
Layout/SpaceAfterNot:
Description: Tracks redundant space after the ! operator.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-space-bang'
Enabled: true
Layout/SpaceAfterSemicolon:
Description: 'Use spaces after semicolons.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-operators'
Enabled: true
Layout/SpaceAroundBlockParameters:
Description: 'Checks the spacing inside and after block parameters pipes.'
Enabled: true
EnforcedStyleInsidePipes: no_space
Layout/SpaceAroundEqualsInParameterDefault:
Description: >-
Checks that the equals signs in parameter default assignments
have or don't have surrounding space depending on
configuration.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-around-equals'
Enabled: true
Layout/SpaceAroundKeyword:
Description: 'Use spaces around keywords.'
Enabled: true
Layout/SpaceAroundOperators:
Description: 'Use a single space around operators.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-operators'
Enabled: true
# 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/SpaceInsideArrayPercentLiteral:
Description: 'No unnecessary additional spaces between elements in %i/%w literals.'
Enabled: true
Layout/SpaceInsidePercentLiteralDelimiters:
Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.'
Enabled: true
Layout/SpaceBeforeBlockBraces:
Description: >-
Checks that the left block brace has or doesn't have space
before it.
Enabled: true
SupportedStyles:
- space
- no_space
Layout/SpaceBeforeComma:
Description: 'No spaces before commas.'
Enabled: true
Layout/SpaceBeforeComment:
Description: >-
Checks for missing space between code and a comment on the
same line.
Enabled: true
Layout/SpaceBeforeFirstArg:
Description: >-
Checks that exactly one space is used between a method name
and the first argument for method calls without parentheses.
Enabled: true
# 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/SpaceBeforeSemicolon:
Description: 'No spaces before semicolons.'
Enabled: true
Layout/SpaceInsideBlockBraces:
Description: >-
Checks that block braces have or don't have surrounding space.
For blocks taking parameters, checks that the left brace has
or doesn't have trailing space.
Enabled: true
SupportedStyles:
- space
- no_space
# Valid values are: space, no_space
EnforcedStyleForEmptyBraces: no_space
# Space between { and |. Overrides EnforcedStyle if there is a conflict.
SpaceBeforeBlockParameters: true
Layout/SpaceInsideBrackets:
Description: 'No spaces after [ or before ].'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-spaces-braces'
Enabled: true
Layout/SpaceInsideHashLiteralBraces:
Description: "Use spaces inside hash literal braces - or don't."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-operators'
Enabled: true
EnforcedStyleForEmptyBraces: no_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
Layout/SpaceInsideParens:
Description: 'No spaces after ( or before ).'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-spaces-braces'
Enabled: true
Layout/SpaceInsideRangeLiteral:
Description: 'No spaces inside range literals.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-space-inside-range-literals'
Enabled: true
Layout/SpaceInsideStringInterpolation:
Description: 'Checks for padding/surrounding spaces inside string interpolation.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#string-interpolation'
Enabled: true
SupportedStyles:
- space
- no_space
Style/SpecialGlobalVars:
Description: 'Avoid Perl-style global variables.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-cryptic-perlisms'
Enabled: true
SupportedStyles:
- use_perl_names
- use_english_names
Style/StabbyLambdaParentheses:
Description: 'Check for the usage of parentheses around stabby lambda arguments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#stabby-lambda-with-args'
Enabled: true
SupportedStyles:
- require_parentheses
- require_no_parentheses
Style/StringLiterals:
Description: 'Checks if uses of quotes match the configured preference.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#consistent-string-literals'
Enabled: true
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:
Description: >-
Checks if uses of quotes inside expressions in interpolated
strings match the configured preference.
Enabled: true
SupportedStyles:
- single_quotes
- double_quotes
Style/StringMethods:
Description: 'Checks if configured preferred methods are used over non-preferred.'
Enabled: true
# 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/StructInheritance:
Description: 'Checks for inheritance from Struct.new.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-extend-struct-new'
Enabled: true
Style/SymbolArray:
Description: 'Use %i or %I for arrays of symbols.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-i'
Enabled: true
SupportedStyles:
- percent
- brackets
Style/SymbolLiteral:
Description: 'Use plain symbols instead of string symbols when possible.'
Enabled: true
Style/SymbolProc:
Description: 'Use symbols as procs instead of blocks when possible.'
Enabled: true
# A list of method names to be ignored by the check.
# The names should be fairly unique, otherwise you'll end up ignoring lots of code.
IgnoredMethods:
- respond_to
Layout/Tab:
Description: 'No hard tabs.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#spaces-indentation'
Enabled: true
Style/TernaryParentheses:
Description: 'Checks for use of parentheses around ternary conditions.'
Enabled: false
SupportedStyles:
- require_parentheses
- require_no_parentheses
AllowSafeAssignment: false
Layout/TrailingBlankLines:
Description: 'Checks trailing blank lines and final newline.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#newline-eof'
Enabled: true
SupportedStyles:
- final_newline
- final_blank_line
Layout/TrailingWhitespace:
Description: 'Avoid trailing whitespace.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-trailing-whitespace'
Enabled: true
# TrivialAccessors requires exact name matches and doesn't allow
# predicated methods by default.
Style/TrivialAccessors:
Description: 'Prefer attr_* methods to trivial readers/writers.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#attr_family'
Enabled: true
# 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: false
AllowPredicates: false
# 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
Whitelist:
- 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
Style/UnlessElse:
Description: >-
Do not use unless with else. Rewrite these with the positive
case first.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-else-with-unless'
Enabled: true
Style/UnneededCapitalW:
Description: 'Checks for %W when interpolation is not needed.'
Enabled: true
Style/UnneededInterpolation:
Description: 'Checks for strings that are just an interpolated expression.'
Enabled: true
Style/UnneededPercentQ:
Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-q'
Enabled: true
Style/TrailingUnderscoreVariable:
Description: >-
Checks for the usage of unneeded trailing underscores at the
end of parallel variable assignment.
AllowNamedUnderscoreVariables: true
Enabled: true
Style/VariableInterpolation:
Description: >-
Don't interpolate global, instance and class variables
directly in strings.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#curlies-interpolate'
Enabled: true
Naming/VariableName:
Description: 'Use the configured style when naming variables.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#snake-case-symbols-methods-vars'
Enabled: true
SupportedStyles:
- snake_case
- camelCase
Naming/VariableNumber:
Description: 'Use the configured style when numbering variables.'
Enabled: true
SupportedStyles:
- snake_case
- normalcase
- non_integer
Style/WhenThen:
Description: 'Use when x then ... for one-line cases.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#one-line-cases'
Enabled: true
Style/WhileUntilDo:
Description: 'Checks for redundant do after while or until.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-multiline-while-do'
Enabled: true
Style/WhileUntilModifier:
Description: >-
Favor modifier while/until usage when you have a
single-line body.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#while-as-a-modifier'
Enabled: true
MaxLineLength: 80
Style/WordArray:
Description: 'Use %w or %W for arrays of words.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#percent-w'
Enabled: true
SupportedStyles:
- percent
- brackets
MinSize: 0
# The regular expression WordRegex decides what is considered a word.
WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
##################### Metrics ##################################
Metrics/AbcSize:
# The ABC size is a calculated magnitude, so this number can be an Integer or
# a Float.
Description: >-
A calculated magnitude based on number of assignments,
branches, and conditions.
Reference: 'http://c2.com/cgi/wiki?AbcMetric'
Enabled: true
Max: 18
Metrics/BlockNesting:
Description: 'Avoid excessive block nesting'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#three-is-the-number-thou-shalt-count'
Enabled: true
Max: 3
Metrics/ClassLength:
Description: 'Avoid classes longer than 100 lines of code.'
Enabled: true
CountComments: false # count full line comments?
Max: 130
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: true
CountComments: false # count full line comments?
Max: 100
Metrics/CyclomaticComplexity:
Description: >-
A complexity metric that is strongly correlated to the number
of test cases needed to validate a method.
Enabled: true
Max: 6
Metrics/LineLength:
Description: 'Limit lines to 100 characters.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#80-character-limits'
Enabled: true
Max: 100
# To make it possible to copy or click on URIs in the code, we allow lines
# contaning a URI to be longer than Max.
AllowURI: true
URISchemes:
- http
- https
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#short-methods'
Enabled: true
CountComments: false # count full line comments?
Max: 20
Metrics/ParameterLists:
Description: 'Avoid parameter lists longer than three or four parameters.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#too-many-params'
Enabled: true
Max: 5
CountKeywordArgs: true
Metrics/PerceivedComplexity:
Description: >-
A complexity metric geared towards measuring complexity for a
human reader.
Enabled: true
Max: 7
##################### Lint ##################################
Lint/AmbiguousOperator:
Description: >-
Checks for ambiguous operators in the first argument of a
method invocation without parentheses.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#method-invocation-parens'
Enabled: true
Lint/AmbiguousRegexpLiteral:
Description: >-
Checks for ambiguous regexp literals in the first argument of
a method invocation without parentheses.
Enabled: true
# Allow safe assignment in conditions.
Lint/AssignmentInCondition:
Description: "Don't use assignment in conditions."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#safe-assignment-in-condition'
AllowSafeAssignment: false
Lint/BlockAlignment:
Description: 'Align block ends correctly.'
Enabled: true
Lint/CircularArgumentReference:
Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
Enabled: true
Lint/ConditionPosition:
Description: >-
Checks for condition placed in a confusing position relative to
the keyword.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#same-line-condition'
Enabled: true
Lint/Debugger:
Description: 'Check for debugger calls.'
Enabled: true
Lint/InheritException:
# The default base class in favour of `Exception`.
Enabled: true
SupportedStyles:
- runtime_error
- standard_error
Lint/DeprecatedClassMethods:
Description: 'Check for deprecated class method calls.'
Enabled: true
Lint/DuplicateMethods:
Description: 'Check for duplicate method definitions.'
Enabled: true
Lint/DuplicatedKey:
Description: 'Check for duplicate keys in hash literals.'
Enabled: true
Lint/EachWithObjectArgument:
Description: 'Check for immutable argument given to each_with_object.'
Enabled: true
Lint/ElseLayout:
Description: 'Check for odd code arrangement in an else block.'
Enabled: true
Lint/EmptyEnsure:
Description: 'Checks for empty ensure block.'
Enabled: true
Lint/EmptyInterpolation:
Description: 'Checks for empty string interpolation.'
Enabled: true
Lint/EnsureReturn:
Description: 'Do not use return in an ensure block.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-return-ensure'
Enabled: true
Security/Eval:
Description: 'The use of eval represents a serious security risk.'
Enabled: true
Lint/FloatOutOfRange:
Description: >-
Catches floating-point literals too large or small for Ruby to
represent.
Enabled: true
Lint/FormatParameterMismatch:
Description: 'The number of parameters to format/sprint must match the fields.'
Enabled: true
Lint/HandleExceptions:
Description: "Don't suppress exception."
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#dont-hide-exceptions'
Enabled: true
Lint/ImplicitStringConcatenation:
Description: >-
Checks for adjacent string literals on the same line, which
could better be represented as a single string literal.
Enabled: true
Lint/IneffectiveAccessModifier:
Description: >-
Checks for attempts to use `private` or `protected` to set
the visibility of a class method, which does not work.
Enabled: true
Lint/LiteralInInterpolation:
Description: 'Avoid interpolating literals in strings'
AutoCorrect: false
Lint/Loop:
Description: >-
Use Kernel#loop with break rather than begin/end/until or
begin/end/while for post-loop tests.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#loop-with-break'
Enabled: true
Lint/NestedMethodDefinition:
Description: 'Do not use nested method definitions.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-nested-methods'
Enabled: true
Lint/NextWithoutAccumulator:
Description: >-
Do not omit the accumulator when calling `next`
in a `reduce`/`inject` block.
Enabled: true
Lint/NonLocalExitFromIterator:
Description: 'Do not use return in iterator to cause non-local exit.'
Enabled: true
Lint/ParenthesesAsGroupedExpression:
Description: >-
Checks for method calls with a space before the opening
parenthesis.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#parens-no-spaces'
Enabled: true
Lint/PercentStringArray:
Description: >-
Checks for unwanted commas and quotes in %w/%W literals.
Enabled: true
Lint/PercentSymbolArray:
Description: >-
Checks for unwanted commas and colons in %i/%I literals.
Enabled: true
Lint/RandOne:
Description: >-
Checks for `rand(1)` calls. Such calls always return `0`
and most likely a mistake.
Enabled: true
Lint/RequireParentheses:
Description: >-
Use parentheses in the method call to avoid confusion
about precedence.
Enabled: true
Lint/RescueException:
Description: 'Avoid rescuing the Exception class.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-blind-rescues'
Enabled: true
Lint/ShadowedException:
Description: >-
Avoid rescuing a higher level exception
before a lower level exception.
Enabled: true
Lint/ShadowingOuterLocalVariable:
Description: >-
Do not use the same name as outer local variable
for block arguments or block local variables.
Enabled: true
Lint/StringConversionInInterpolation:
Description: 'Checks for Object#to_s usage in string interpolation.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#no-to-s'
Enabled: true
Lint/UnderscorePrefixedVariableName:
Description: 'Do not use prefix `_` for a variable that is used.'
Enabled: true
Lint/UnifiedInteger:
Description: 'Use Integer instead of Fixnum or Bignum'
Enabled: true
Lint/UnneededDisable:
Description: >-
Checks for rubocop:disable comments that can be removed.
Note: this cop is not disabled when disabling all cops.
It must be explicitly disabled.
Enabled: true
Lint/UnneededSplatExpansion:
Description: 'Checks for splat unnecessarily being called on literals'
Enabled: true
Lint/UnusedBlockArgument:
Description: 'Checks for unused block arguments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#underscore-unused-vars'
Enabled: true
AllowUnusedKeywordArguments: false
Lint/UnusedMethodArgument:
Description: 'Checks for unused method arguments.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#underscore-unused-vars'
AllowUnusedKeywordArguments: false
IgnoreEmptyMethods: true
Enabled: true
Lint/UnreachableCode:
Description: 'Unreachable code.'
Enabled: true
Lint/UselessAccessModifier:
Description: 'Checks for useless access modifiers.'
Enabled: true
ContextCreatingMethods: []
Lint/UselessAssignment:
Description: 'Checks for useless assignment to a local variable.'
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#underscore-unused-vars'
Enabled: true
Lint/UselessComparison:
Description: 'Checks for comparison of something with itself.'
Enabled: true
Lint/UselessElseWithoutRescue:
Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
Enabled: true
Lint/UselessSetterCall:
Description: 'Checks for useless setter call to a local variable.'
Enabled: true
Lint/Void:
Description: 'Possible use of operator/literal/variable in void context.'
Enabled: true
##################### Performance ##################################
Performance/Casecmp:
Description: 'Use `casecmp` rather than `downcase ==`.'
Reference: 'https://github.com/samzhab/fast-ruby#stringcasecmp-vs-stringdowncase---code'
Enabled: false
Performance/CaseWhenSplat:
Description: >-
Place `when` conditions that use splat at the end
of the list of `when` branches.
Enabled: true
Performance/Count:
Description: >-
Use `count` instead of `select...size`, `reject...size`,
`select...count`, `reject...count`, `select...length`,
and `reject...length`.
# This cop has known compatibility issues with `ActiveRecord` and other
# frameworks. ActiveRecord's `count` ignores the block that is passed to it.
# For more information, see the documentation in the cop itself.
# If you understand the known risk, you can disable `SafeMode`.
SafeMode: true
Enabled: true
Performance/Detect:
Description: >-
Use `detect` instead of `select.first`, `find_all.first`,
`select.last`, and `find_all.last`.
Reference: 'https://github.com/samzhab/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code'
Enabled: true
Performance/DoubleStartEndWith:
Description: >-
Use `str.{start,end}_with?(x, ..., y, ...)`
instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
Enabled: true
Performance/EndWith:
Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.'
Reference: 'https://github.com/samzhab/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
Enabled: true
Performance/FixedSize:
Description: 'Do not compute the size of statically sized objects except in constants'
Enabled: true
Performance/FlatMap:
Description: >-
Use `Enumerable#flat_map`
instead of `Enumerable#map...Array#flatten(1)`
or `Enumberable#collect..Array#flatten(1)`
Reference: 'https://github.com/samzhab/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code'
Enabled: true
EnabledForFlattenWithoutParams: false
# If enabled, this cop will warn about usages of
# `flatten` being called without any parameters.
# This can be dangerous since `flat_map` will only flatten 1 level, and
# `flatten` without any parameters can flatten multiple levels.
Performance/HashEachMethods:
Description: >-
Use `Hash#each_key` and `Hash#each_value` instead of
`Hash#keys.each` and `Hash#values.each`.
StyleGuide: 'https://github.com/samzhab/ruby-style-guide#hash-each'
Enabled: true
AutoCorrect: false
Performance/LstripRstrip:
Description: 'Use `strip` instead of `lstrip.rstrip`.'
Enabled: true
Performance/RangeInclude:
Description: 'Use `Range#cover?` instead of `Range#include?`.'
Reference: 'https://github.com/samzhab/fast-ruby#cover-vs-include-code'
Enabled: true
Performance/RedundantBlockCall:
Description: 'Use `yield` instead of `block.call`.'
Reference: 'https://github.com/samzhab/fast-ruby#proccall-vs-yield-code'
Enabled: true
Performance/RedundantMatch:
Description: >-
Use `=~` instead of `String#match` or `Regexp#match` in a context where the
returned `MatchData` is not needed.
Enabled: true
Performance/RedundantMerge:
Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.'
Reference: 'https://github.com/samzhab/fast-ruby#hashmerge-vs-hash-code'
Enabled: true
Performance/RedundantSortBy:
Description: 'Use `sort` instead of `sort_by { |x| x }`.'
Enabled: true
Performance/ReverseEach:
Description: 'Use `reverse_each` instead of `reverse.each`.'
Reference: 'https://github.com/samzhab/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code'
Enabled: true
Performance/Sample:
Description: >-
Use `sample` instead of `shuffle.first`,
`shuffle.last`, and `shuffle[Integer]`.
Reference: 'https://github.com/samzhab/fast-ruby#arrayshufflefirst-vs-arraysample-code'
Enabled: true
Performance/Size:
Description: >-
Use `size` instead of `count` for counting
the number of elements in `Array` and `Hash`.
Reference: 'https://github.com/samzhab/fast-ruby#arraycount-vs-arraysize-code'
Enabled: true
Performance/StartWith:
Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.'
Reference: 'https://github.com/samzhab/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
Enabled: true
Performance/StringReplacement:
Description: >-
Use `tr` instead of `gsub` when you are replacing the same
number of characters. Use `delete` instead of `gsub` when
you are deleting characters.
Reference: 'https://github.com/samzhab/fast-ruby#stringgsub-vs-stringtr-code'
Enabled: true
Performance/TimesMap:
Description: 'Checks for .times.map calls.'
Enabled: true
##################### Rails ##################################
# By default, the rails cops are not run. Override in project or home
# directory .rubocop.yml files, or by giving the -R/--rails option.
Rails:
Enabled: false
Rails/ActionFilter:
Description: 'Enforces consistent use of action filter methods.'
Enabled: true
SupportedStyles:
- action
- filter
Include:
- app/controllers/**/*.rb
Rails/Date:
Description: >-
Checks the correct usage of date aware methods,
such as Date.today, Date.current etc.
Enabled: true
# The value `strict` disallows usage of `Date.today`, `Date.current`,
# `Date#to_time` etc.
# The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
# (but not `Date.today`) which are overriden by ActiveSupport to handle current
# time zone.
SupportedStyles:
- strict
- flexible
Rails/Delegate:
Description: 'Prefer delegate method for delegations.'
Enabled: true
Rails/Exit:
Description: >-
Favor `fail`, `break`, `return`, etc. over `exit` in
application or library code outside of Rake files to avoid
exits during unit testing or running in production.
Enabled: true
Include:
- app/**/*.rb
- config/**/*.rb
- lib/**/*.rb
Exclude:
- lib/**/*.rake
Rails/FindBy:
Description: 'Prefer find_by over where.first.'
StyleGuide: 'https://github.com/samzhab/rails-style-guide#find_by'
Enabled: true
Include:
- app/models/**/*.rb
Rails/FindEach:
Description: 'Prefer all.find_each over all.find.'
StyleGuide: 'https://github.com/samzhab/rails-style-guide#find-each'
Enabled: true
Include:
- app/models/**/*.rb
Rails/HasAndBelongsToMany:
Description: 'Prefer has_many :through to has_and_belongs_to_many.'
StyleGuide: 'https://github.com/samzhab/rails-style-guide#has-many-through'
Enabled: true
Include:
- app/models/**/*.rb
Rails/NotNullColumn:
Description: 'Do not add a NOT NULL column without a default value'
Enabled: true
Include:
- db/migrate/*.rb
Rails/Output:
Description: 'Checks for calls to puts, print, etc.'
Enabled: true
Include:
- app/**/*.rb
- config/**/*.rb
- db/**/*.rb
- lib/**/*.rb
Rails/OutputSafety:
Description: 'The use of `html_safe` or `raw` may be a security risk.'
Enabled: true
Rails/PluralizationGrammar:
Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
Enabled: true
Rails/ReadWriteAttribute:
Description: >-
Checks for read_attribute(:attr) and
write_attribute(:attr, val).
StyleGuide: 'https://github.com/samzhab/rails-style-guide#read-attribute'
Enabled: true
Include:
- app/models/**/*.rb
Rails/RequestReferer:
SupportedStyles:
- referer
- referrer
Description: 'Use consistent syntax for request.referer.'
Enabled: true
Rails/SafeNavigation:
Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`"
Enabled: true
# This will convert usages of `try` to use safe navigation as well as `try!`.
# `try` and `try!` work slighly differently. `try!` and safe navigation will
# both raise a `NoMethodError` if the receiver of the method call does not
# implement the intended method. `try` will not raise an exception for this.
ConvertTry: false
Rails/SaveBang:
Description: 'Identifies possible cases where Active Record save! or related should be used.'
StyleGuide: 'https://github.com/samzhab/rails-style-guide#save-bang'
Enabled: true
Rails/ScopeArgs:
Description: 'Checks the arguments of ActiveRecord scopes.'
Enabled: true
Include:
- app/models/**/*.rb
Rails/TimeZone:
Description: 'Checks the correct usage of time zone aware methods.'
StyleGuide: 'https://github.com/samzhab/rails-style-guide#time'
Reference: 'http://danilenko.org/2012/7/6/rails_timezones'
Enabled: true
# The value `strict` means that `Time` should be used with `zone`.
# The value `flexible` allows usage of `in_time_zone` instead of `zone`.
SupportedStyles:
- strict
- flexible
Rails/Validation:
Description: 'Use validates :attribute, hash of validations.'
Enabled: true
Include:
- app/models/**/*.rb
Security/JSONLoad:
Description : 'Prefer usage of JSON.parse'
Enabled: true
@samzhab
Copy link
Author

samzhab commented Mar 17, 2021

update to ruby 3.0.0 and used params fitting project needs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment