Skip to content

Instantly share code, notes, and snippets.

@leemour
Last active December 3, 2018 11:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leemour/14694199efecab86e9af7679cd27b58c to your computer and use it in GitHub Desktop.
Save leemour/14694199efecab86e9af7679cd27b58c to your computer and use it in GitHub Desktop.
Rubocop config
# inherit_from: .rubocop_todo.yml
AllCops:
# Default formatter will be used if no `-f/--format` option is given.
DefaultFormatter: fuubar
# Cop names are displayed in offense messages by default. Change behavior
# by overriding DisplayCopNames, or by giving the `--no-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
# When specifying style guide URLs, any paths and/or fragments will be
# evaluated relative to the base URL.
StyleGuideBaseURL: https://github.com/rubocop-hq/ruby-style-guide
# Extra details are not displayed in offense messages by default. Change
# behavior by overriding ExtraDetails, or by giving the
# `-E/--extra-details` option.
ExtraDetails: false
# 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 configured `Enabled: false` in this file are enabled by default.
# Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
# When `DisabledByDefault` is `true`, all cops in the default configuration
# are disabled, 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.
# When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false`
# in this file are enabled by default. Cops can still be disabled in user configuration.
# Note that it is invalid to set both EnabledByDefault and DisabledByDefault
# to true in the same configuration.
EnabledByDefault: false
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. If
# CacheRootDirectory is ~ (nil), which it is by default, the root will be
# taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
# `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
CacheRootDirectory: ~
# It is possible for a malicious user to know the location of RuboCop's cache
# directory by looking at CacheRootDirectory, and create a symlink in its
# place that could cause RuboCop to overwrite unintended files, or read
# malicious input. If you are certain that your cache location is secure from
# this kind of attack, and wish to use a symlinked cache location, set this
# value to "true".
AllowSymlinksInCacheRootDirectory: false
# What MRI 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.)
# If a value is specified for TargetRubyVersion then it is used. Acceptable
# values are specificed as a float (i.e. 2.5); the teeny version of Ruby
# should not be included. If the project specifies a Ruby version in the
# .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine
# the desired version of Ruby by inspecting the .ruby-version file first,
# followed by the Gemfile.lock or gems.locked file. (Although the Ruby version
# is specified in the Gemfile or gems.rb file, RuboCop reads the final value
# from the lock file.) If the Ruby version is still unresolved, RuboCop will
# use the oldest officially supported Ruby version (currently Ruby 2.2).
TargetRubyVersion: ~
# What version of Rails is the inspected code using? If a value is specified
# for TargetRailsVersion then it is used. Acceptable values are specificed
# as a float (i.e. 5.1); the patch version of Rails should not be included.
# If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or
# gems.locked file to find the version of Rails that has been bound to the
# application. If neither of those files exist, RuboCop will use Rails 5.0
# as the default.
TargetRailsVersion: ~
#################### Layout ###########################
Layout/AlignArray:
Description: >-
Align the elements of an array literal if they span more than
one line.
StyleGuide: '#align-multiline-arrays'
Enabled: false
VersionAdded: '0.49'
Layout/AlignHash:
Description: >-
Align the elements of a hash literal if they span more than
one line.
Enabled: true
VersionAdded: '0.49'
# 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
SupportedHashRocketStyles:
- key
- separator
- 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
SupportedColonStyles:
- key
- separator
- 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: ignore_implicit
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: '#no-double-indent'
Enabled: true
VersionAdded: '0.49'
# 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
SupportedStyles:
- with_first_parameter
- with_fixed_indentation
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/BlockAlignment:
Description: 'Align block ends correctly.'
Enabled: true
VersionAdded: '0.53'
# 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
SupportedStylesAlignWith:
- either
- start_of_block
- start_of_line
Layout/CaseIndentation:
Description: 'Indentation of when in a case/when/[else/]end.'
StyleGuide: '#indent-when-to-case'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: end
SupportedStyles:
- case
- end
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: ~
Layout/ClassStructure:
Description: 'Enforces a configured order of definitions within a class body.'
StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes'
Enabled: true
VersionAdded: '0.52'
Categories:
module_inclusion:
- include
- prepend
- extend
attribute:
- attr_accessor
- attr_reader
- attr_writer
association:
- belongs_to
- has_many
- has_one
ExpectedOrder:
- module_inclusion
- constants
- public_class_methods
- initializer
- public_methods
- protected_methods
- private_methods
Layout/EndAlignment:
Description: 'Align ends correctly.'
Enabled: true
VersionAdded: '0.53'
# 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
SupportedStylesAlignWith:
- keyword
- variable
- start_of_line
AutoCorrect: false
Severity: warning
Layout/EndOfLine:
Description: 'Use Unix-style line endings.'
StyleGuide: '#crlf'
Enabled: true
VersionAdded: '0.49'
# 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
# mean LF and CR+LF, respectively.
EnforcedStyle: lf
SupportedStyles:
- native
- lf
- crlf
Layout/FirstMethodArgumentLineBreak:
Description: >-
Checks for a line break before the first argument in a
multi-line method call.
Enabled: true
VersionAdded: '0.49'
Layout/FirstMethodParameterLineBreak:
Description: >-
Checks for a line break before the first parameter in a
multi-line method parameter definition.
Enabled: true
VersionAdded: '0.49'
Layout/FirstParameterIndentation:
Description: 'Checks the indentation of the first parameter in a method call.'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.56'
EnforcedStyle: consistent
SupportedStyles:
# The first parameter should always be indented one step more than the
# preceding line.
- consistent
# The first parameter should always be indented one level relative to the
# parent that is receiving the parameter
- consistent_relative_to_receiver
# 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
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentArray:
Description: >-
Checks the indentation of the first element in an array
literal.
Enabled: true
VersionAdded: '0.49'
# 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: consistent
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: ~
Layout/IndentAssignment:
Description: >-
Checks the indentation of the first line of the
right-hand-side of a multi-line assignment.
Enabled: false
VersionAdded: '0.49'
# 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
VersionAdded: '0.49'
# 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: consistent
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/IndentHeredoc:
Description: 'This cop checks the indentation of the here document bodies.'
StyleGuide: '#squiggly-heredocs'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: squiggly
SupportedStyles:
- auto_detection
- squiggly
- active_support
- powerpack
- unindent
Layout/IndentationConsistency:
Description: 'Keep indentation straight.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
# 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
SupportedStyles:
- normal
- rails
Layout/MultilineAssignmentLayout:
Description: 'Check for a newline after the assignment operator in multi-line assignments.'
StyleGuide: '#indent-conditional-assignment'
Enabled: false
VersionAdded: '0.49'
# The types of assignments which are subject to this rule.
SupportedTypes:
- block
- case
- class
- if
- kwbegin
- module
EnforcedStyle: same_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/MultilineMethodCallIndentation:
Description: >-
Checks indentation of method calls with the dot operator
that span more than one line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: indented
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:
Description: >-
Checks that the closing brace in a method definition is
either on the same line as the last method parameter, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: new_line
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/SpaceInsideHashLiteralBraces:
Description: "Use spaces inside hash literal braces - or don't."
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: 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
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
#################### Metrics ###############################
Metrics/AbcSize:
Description: >-
A calculated magnitude based on number of assignments,
branches, and conditions.
Reference: 'http://c2.com/cgi/wiki?AbcMetric'
Enabled: true
VersionAdded: '0.27'
# The ABC size is a calculated magnitude, so this number can be an Integer or
# a Float.
Max: 15
Metrics/BlockLength:
Description: 'Avoid long blocks with many lines.'
Enabled: true
VersionAdded: '0.44'
VersionChanged: '0.58'
CountComments: false # count full line comments?
Max: 25
ExcludedMethods:
# By default, exclude the `#refine` method, as it tends to have larger
# associated blocks.
- refine
Metrics/BlockNesting:
Description: 'Avoid excessive block nesting'
StyleGuide: '#three-is-the-number-thou-shalt-count'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.47'
CountBlocks: false
Max: 3
Metrics/ClassLength:
Description: 'Avoid classes longer than 100 lines of code.'
Enabled: true
VersionAdded: '0.25'
CountComments: false # count full line comments?
Max: 100
# Avoid complex methods.
Metrics/CyclomaticComplexity:
Description: >-
A complexity metric that is strongly correlated to the number
of test cases needed to validate a method.
Enabled: true
VersionAdded: '0.25'
Max: 6
Metrics/LineLength:
Description: 'Limit lines to 80 characters.'
StyleGuide: '#80-character-limits'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.46'
Max: 80
# 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 IgnoredPatterns 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 ignored by LineLength.
IgnoredPatterns: []
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: '#short-methods'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.59.2'
CountComments: false # count full line comments?
Max: 20
ExcludedMethods: []
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: true
VersionAdded: '0.31'
CountComments: false # count full line comments?
Max: 120
Metrics/ParameterLists:
Description: 'Avoid parameter lists longer than four parameters.'
StyleGuide: '#too-many-params'
Enabled: true
VersionAdded: '0.25'
Max: 4
CountKeywordArgs: false
Metrics/PerceivedComplexity:
Description: >-
A complexity metric geared towards measuring complexity for a
human reader.
Enabled: true
VersionAdded: '0.25'
Max: 7
#################### 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: true
Rails/ActiveSupportAliases:
Description: >-
Avoid ActiveSupport aliases of standard ruby methods:
`String#starts_with?`, `String#ends_with?`,
`Array#append`, `Array#prepend`.
Enabled: false
VersionAdded: '0.48'
Rails/CreateTableWithTimestamps:
Description: >-
Checks the migration for which timestamps are not included
when creating a new table.
Enabled: false
VersionAdded: '0.52'
Include:
- db/migrate/*.rb
Rails/NotNullColumn:
Description: 'Do not add a NOT NULL column without a default value'
Enabled: false
VersionAdded: '0.43'
Include:
- db/migrate/*.rb
#################### Style ###############################
Style/Alias:
Description: 'Use alias instead of alias_method.'
StyleGuide: '#alias-method'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.36'
EnforcedStyle: prefer_alias_method
SupportedStyles:
- prefer_alias
- prefer_alias_method
Style/Documentation:
Description: 'Document classes and non-namespace modules.'
Enabled: false
VersionAdded: '0.9'
Exclude:
- 'spec/**/*'
- 'test/**/*'
Style/DoubleNegation:
Description: 'Checks for uses of double negation (!!).'
StyleGuide: '#no-bang-bang'
Enabled: false
VersionAdded: '0.19'
Style/StringLiterals:
Description: 'Checks if uses of quotes match the configured preference.'
StyleGuide: '#consistent-string-literals'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.36'
EnforcedStyle: double_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/SymbolArray:
Description: 'Use %i or %I for arrays of symbols.'
StyleGuide: '#percent-i'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.49'
EnforcedStyle: percent
MinSize: 4
SupportedStyles:
- percent
- brackets
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment