diff --git a/.rubocop.yml b/.rubocop.yml index 7413d6d2..74f4a968 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,8 @@ AllCops: - TargetRubyVersion: 2.3 + TargetRubyVersion: 2.2 + # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop + # to ignore them, so only the ones explicitly set in this file are enabled. + DisabledByDefault: true Exclude: - !ruby/regexp /(vendor|bundle|bin|db|tmp)\/.*/ DisplayCopNames: true @@ -9,60 +12,117 @@ AllCops: UseCache: true CacheRootDirectory: tmp -Rails: +# Prefer &&/|| over and/or. +Style/AndOr: Enabled: true -Style/Alias: - EnforcedStyle: prefer_alias +# Do not use braces for hash literals when they are the last argument of a +# method call. +Style/BracesAroundHashParameters: + Enabled: true +# Align `when` with `case`. +Style/CaseIndentation: + Enabled: true + +# Align comments with method definitions. +Style/CommentIndentation: + Enabled: true + +# No extra empty lines. +Style/EmptyLines: + Enabled: true + +# In a regular class definition, no empty lines around the body. +Style/EmptyLinesAroundClassBody: + Enabled: true + +# In a regular method definition, no empty lines around the body. +Style/EmptyLinesAroundMethodBody: + Enabled: true + +# In a regular module definition, no empty lines around the body. +Style/EmptyLinesAroundModuleBody: + Enabled: true + +# Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }. +Style/HashSyntax: + Enabled: true + +# Method definitions after `private` or `protected` isolated calls need one +# extra level of indentation. +Style/IndentationConsistency: + Enabled: true + EnforcedStyle: rails + +# Two spaces, no tabs (for indentation). +Style/IndentationWidth: + Enabled: true + +Style/SpaceAfterColon: + Enabled: true + +Style/SpaceAfterComma: + Enabled: true + +Style/SpaceAroundEqualsInParameterDefault: + Enabled: true + +Style/SpaceAroundKeyword: + Enabled: true + +Style/SpaceAroundOperators: + Enabled: true + +Style/SpaceBeforeFirstArg: + Enabled: true + +# Defining a method with parameters needs parentheses. +Style/MethodDefParentheses: + Enabled: true + +# Use `foo {}` not `foo{}`. +Style/SpaceBeforeBlockBraces: + Enabled: true + +# Use `foo { bar }` not `foo {bar}`. +Style/SpaceInsideBlockBraces: + Enabled: true + +# Use `{ a: 1 }` not `{a:1}`. +Style/SpaceInsideHashLiteralBraces: + Enabled: true + +Style/SpaceInsideParens: + Enabled: true + +# Check quotes usage according to lint rule below. Style/StringLiterals: - EnforcedStyle: single_quotes - -Metrics/AbcSize: - Max: 15 - -Metrics/ClassLength: - Max: 100 - Exclude: - - test/**/*.rb - -Metrics/CyclomaticComplexity: - Max: 6 - -Metrics/LineLength: - Max: 100 - -Metrics/MethodLength: - Max: 10 - -Metrics/PerceivedComplexity: - Max: 7 - -Style/AlignParameters: - EnforcedStyle: with_fixed_indentation - -Style/ClassAndModuleChildren: - EnforcedStyle: nested - -Style/MissingElse: Enabled: true - EnforcedStyle: case + EnforcedStyle: double_quotes -Style/EmptyElse: - EnforcedStyle: empty - -Style/MultilineOperationIndentation: - EnforcedStyle: indented - -Style/BlockDelimiters: +# Detect hard tabs, no hard tabs. +Style/Tab: Enabled: true - EnforcedStyle: line_count_based -Style/SignalException: - EnforcedStyle: semantic +# Blank lines should not have any spaces. +Style/TrailingBlankLines: + Enabled: true -Style/TrailingCommaInLiteral: - EnforcedStyleForMultiline: no_comma +# No trailing whitespace. +Style/TrailingWhitespace: + Enabled: true -Style/DotPosition: - EnforcedStyle: leading +# Use quotes for string literals when they are enough. +Style/UnneededPercentQ: + Enabled: true + +# Align `end` with the matching keyword or starting expression except for +# assignments, where it should be aligned with the LHS. +Lint/EndAlignment: + Enabled: true + EnforcedStyleAlignWith: variable + +# Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg. +Lint/RequireParentheses: + Enabled: true diff --git a/Gemfile b/Gemfile index 47128757..38cd8ea6 100644 --- a/Gemfile +++ b/Gemfile @@ -9,6 +9,6 @@ group :test do end group :development, :test do - gem 'rubocop', '~> 0.40.0', require: false + gem 'rubocop', '>= 0.47', require: false gem 'yard', require: false end diff --git a/bin/rubocop b/bin/rubocop index 04559bb4..a12f1423 100755 --- a/bin/rubocop +++ b/bin/rubocop @@ -5,11 +5,12 @@ # bin/rubocop [file or path] [cli options] # # Options: -# Autocorrect -A -# AutoGenConfig -t -# Usage -h,--help,help +# -A Autocorrect +# -t AutoGenConfig +# --update-config Update config from Rails +# -h,--help,help Usage -set -e +set -eou pipefail case $1 in -A) @@ -26,6 +27,15 @@ case $1 in sed -ne '/^#/!q;s/.\{1,2\}//;1d;p' < "$0" ;; + --update-config) + curl -X GET https://raw.githubusercontent.com/rails/rails/master/.rubocop.yml -o .rubocop.yml + bundle check || bundle install --local || bundle install + echo "Current rubocop version is:" + bundle show rubocop + echo "Rails rubocop version is:" + curl -X GET https://raw.githubusercontent.com/rails/rails/master/Gemfile | grep rubocop + ;; + *) # with no args, run vanilla rubocop # else assume we're passing in arbitrary arguments