rubocopの設定

rubocopの設定

rubocopの設定方法がイマイチ分からず調べたので、こちらに備忘録として残します。

rubocopでは、最初からLintチェックのレベルが設定されているが特定のファイルだけLintチェックを行わないようにしたい場合がある。(特定のファイルのみどうしてもLintチェックを通過するようにコードを書けない場合など。。)
そんな時に、そのファイルのみ特定のLintチェックをパスするようにする方法を以下に示します。

以下のように記載することで特定のLintチェックを指定したファイルでパスするようにできます。

[.rubocop.yml]

inherit_from: .rubocop_todo.yml

AllCops:
  TargetRubyVersion: 2.5
  # 除外
  Exclude:
    - 'bin/**'
    - 'lib/**'
    - 'db/migrate/*'
    - 'db/schema.rb'
    - 'config/puma.rb'
    - 'config/spring.rb'
    - 'config/application.rb'
    - 'config/environments/*'
    - 'config/initializers/*'
    - 'script/**/*'
    - 'node_modules/**/*'
    - Gemfile
    - 'vendor/**/*'
    - 'spec/**/*'


CyclomaticComplexity:   # ①
  Exclude:
    - 'app/forms/calculate_cooking_time.rb'

①を記載しないと以下のようになる。

 % rubocop
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.

Please also note that you can opt-in to new cops by default by adding this to your config:
  AllCops:
    NewCops: enable

Gemspec/DateAssignment: # new in 1.10
  Enabled: true
Layout/LineEndStringConcatenationIndentation: # new in 1.18
  Enabled: true
Layout/SpaceBeforeBrackets: # new in 1.7
  Enabled: true
Lint/AmbiguousAssignment: # new in 1.7
  Enabled: true
Lint/AmbiguousOperatorPrecedence: # new in 1.21
  Enabled: true
Lint/AmbiguousRange: # new in 1.19
  Enabled: true
Lint/DeprecatedConstants: # new in 1.8
  Enabled: true
Lint/DuplicateBranch: # new in 1.3
  Enabled: true
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
  Enabled: true
Lint/EmptyBlock: # new in 1.1
  Enabled: true
Lint/EmptyClass: # new in 1.3
  Enabled: true
Lint/EmptyInPattern: # new in 1.16
  Enabled: true
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
  Enabled: true
Lint/LambdaWithoutLiteralBlock: # new in 1.8
  Enabled: true
Lint/NoReturnInBeginEndBlocks: # new in 1.2
  Enabled: true
Lint/NumberedParameterAssignment: # new in 1.9
  Enabled: true
Lint/OrAssignmentToConstant: # new in 1.9
  Enabled: true
Lint/RedundantDirGlobSort: # new in 1.8
  Enabled: true
Lint/RequireRelativeSelfPath: # new in 1.22
  Enabled: true
Lint/SymbolConversion: # new in 1.9
  Enabled: true
Lint/ToEnumArguments: # new in 1.1
  Enabled: true
Lint/TripleQuotes: # new in 1.9
  Enabled: true
Lint/UnexpectedBlockArity: # new in 1.5
  Enabled: true
Lint/UnmodifiedReduceAccumulator: # new in 1.1
  Enabled: true
Security/IoMethods: # new in 1.22
  Enabled: true
Style/ArgumentsForwarding: # new in 1.1
  Enabled: true
Style/CollectionCompact: # new in 1.2
  Enabled: true
Style/DocumentDynamicEvalDefinition: # new in 1.1
  Enabled: true
Style/EndlessMethod: # new in 1.8
  Enabled: true
Style/HashConversion: # new in 1.10
  Enabled: true
Style/HashExcept: # new in 1.7
  Enabled: true
Style/IfWithBooleanLiteralBranches: # new in 1.9
  Enabled: true
Style/InPatternThen: # new in 1.16
  Enabled: true
Style/MultilineInPatternThen: # new in 1.16
  Enabled: true
Style/NegatedIfElseCondition: # new in 1.2
  Enabled: true
Style/NilLambda: # new in 1.3
  Enabled: true
Style/NumberedParameters: # new in 1.22
  Enabled: true
Style/NumberedParametersLimit: # new in 1.22
  Enabled: true
Style/QuotedSymbols: # new in 1.16
  Enabled: true
Style/RedundantArgument: # new in 1.4
  Enabled: true
Style/RedundantSelfAssignmentBranch: # new in 1.19
  Enabled: true
Style/SelectByRegexp: # new in 1.22
  Enabled: true
Style/StringChars: # new in 1.12
  Enabled: true
Style/SwapValues: # new in 1.1
  Enabled: true
For more information: https://docs.rubocop.org/rubocop/versioning.html
Inspecting 31 files
..........C....................

Offenses:

app/forms/calculate_cooking_time.rb:18:3: C: Metrics/PerceivedComplexity: Perceived complexity for  
 calculate_cooking_total_time is too high. [27/8]   ②
  def calculate_cooking_total_time ...
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

31 files inspected, 1 offense detected

Metrics/PerceivedComplexityのLintチェックに引っかかる。
②のMetrics/PerceivedComplexity.rubocop.ymlに記載して除外ファイルを設定することで、このファイルではMetrics/PerceivedComplexityのLintチェックが行われなくなる。