Rubocop Linelength:コメント付きの行を無視するには?


109

Rails 4アプリを使用して、行が長すぎるかどうかを確認するときに、Rubocopにコメント付きの行(コメントまたは行末コメント付きのコード)を無視させたいと思います。これを行う方法はありますか?

回答:


197

行ごとに警官を無視する方法があります。

設定ファイルを介してそれを行う方法もあります。

実行するrubocop --auto-gen-configと、攻撃を無効にするために使用できるファイルが生成されます。

コマンドは、それらのオプションをロードするために何をすべきかについてのヒントも提供します。

行ごとに、警官を有効または無効にすることもできます。

# rubocop:disable RuleByName
This is a long line 
# rubocop:enable RuleByName

コードで一度に複数のルールを実行することもできます。

# rubocop:disable BlockComments, AsciiComments

インラインディレクティブを使用すると、そのディレクティブはその行でのみ有効になり、次のようになります。

# Thanks to @jnt30 for the comment!
method(argument) # rubocop:disable SomeRule, SomeOtherRule

RuboCopの詳細については、公式マニュアルをご覧ください。

すべてのルール名を見つけるには、rubocop構成ファイルで調べる価値があります

cyberwizは言う-「rubocop -Dドキュメントを見るのではなく、ルール名が必要なときに実行する」更新:これは現在、フラグなしのデフォルトの動作です。


1
まあ、コメントはチームが受け入れたスタイルからの逸脱を説明しているかもしれませんので、これは悪いことではありませんよね?それ以外の場合は、それをrubocop.ymlファイルに配置します。これは、受け入れられるスタイルの例外ではなく、コメントを必要としません。コメントは「そうするつもりだった!」と書いてある。悪いことではありません。
vgoff 2014年

1
コメントはコードではないため、それらのチェックは意味的に異なり、IMO rubocopはそのように扱う必要があります。
phoet 2014年

2
コメントはコードの一部であり、電子メールまたは端末でコードを処理する場合に使用します。「チーム」がコードとして採用しているのと同じ行の長さにコメントを従わせないのは悪い味だと思います。コメントであるからといって、フローを妨害するべきではありません。rubocopが意味的に(意味的に)ディレクティブ以外のコメントをチェックしないと確信しています。行の長さとコメントのスタイルをチェックします。つまり、意味を探すのではなく、スタイルをチェックするだけです。「コメントはコードではない」がそうである必要はないということを割引しないでください。
vgoff 2014年

実際、#!/bin/env rubyコメント行でさえコメントであり、コードであり、意味的に重要です。コメントは常に「コメント」だけではありません。
vgoff 2014年

1
@Twiekはあなたが探しているこの答えから欠けているものはありますか?
vgoff 2016年

35

で特定の行を自動的に無視するように正規表現パターンを定義するrubocop.ymlことができるので、#文字で始まるすべての行を無視するように選択できます。

Metrics/LineLength:
  Max: 80
  IgnoredPatterns: ['\A#']

これは、「インデントされた」コメント行(つまり、空白の後に文字が続く#)も必要に応じて無視されるように改善することができます。

ただし、これはコメントで終わるコード行を考慮していないことに注意してください。

some_code(that_does_something) # This line would NOT be ignored by Rubocop.

9
:空白を持つことができますライン含めることにより、あなたはその正規表現を拡張することができますIgnorePatterns: ['(\A|\s)#']
poustovitss

1
@poustovitssに感謝します。タイプミスがあります。IgnoredPatterns代わりに入力する必要がありますIgnorePatterns(「d」の文字がありません)。
Horacio

9

rubocopで次のコメントを使用して、特定のルールを無視できます。

# rubocop:disable Metrics/LineLength
def this_could_be_a_very_long_line_that_extends_forever_into_infinity
end
# rubocop:enable Metrics/LineLength

以下に追加することでファイル全体を無視することもできます.rubocop.yml

AllCops:
  Exclude:
    - path/to/file.rb

6

ここでの基本的な考え方は、n文字の後に何があっても、行の長さを強制したいということです。デフォルトの80文字は、その数の文字しか保持できない古いターミナルウィンドウの一部のカーゴカルトです。コードで見た唯一のオプションは、文字数制限を超える可能性のあるURLを許可するオプションです。

ファイル全体無視することができますが、それはあなたが探しているものではないと思います。


8
最近、80文字の背後にあるアイデアは、ターミナルにとって「カーゴカルト」ではなく、論理的な理由があります。誰でも、エディタまたはIDEウィンドウを好きなように分割でき、幅が広い限り、 80文字を超える場合は、幅を変更したり、折り返しを体験したりする必要はありません。
Jason Antman

2
IMOソフトラッピングをサポートするIDEがない場合、ツールは最新ではありません。
phoet 2016

8
40または200がそれほどあるのに対し、それはまた、ユーザビリティの事ですので、80の文字も、かなり読みやすいです
トニリー

#1「80文字よりも幅が広い限り」800x600は80文字よりも幅が広く、並べて2つの80文字のファイルを表示すると同じ問題が発生します。これはナンセンスであり、1366解像度にのみ適用されます。1920年以上が引き継がれると、次の議論は「3つ、4つのファイルを分割できる」です
Andre Figueiredo

1
。我々は13"ラップトップ上の分割画面表示でGithubの上でコードレビューをしながら、問題となったPRのを見ると120にそれを変更し、我々は80に戻し、80でそれを持っていた
AndreiMotinga
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.