web-dev-qa-db-ja.com

Pylintエラーチェックをカスタマイズできますか?

私はpylintをセットアップしたpydevを使用しています。問題は、コメント内であっても、pylintが警告を報告することです。私は、任意の行またはブロックコメント内のあらゆる種類のチェックを無効にしようとしていました。また、コード内の変数と引数には、アンダースコアではなくcamelCase命名規則に従うことを望みます。私のコードにパイリントを挿入せずにそのようなルールを指定する方法はありますか?コメントを無効にしますか?

33
Sumit Bisht

特定のクラスの警告をグローバルに無効にすることができます

pylint --disable=W1234

または特別なPyLint構成ファイルを使用して

pylint --rcfile=/path/to/config.file

サンプルの構成ファイルを以下に示します。

[MESSAGES CONTROL]
# C0111 Missing docstring 
# I0011 Warning locally suppressed using disable-msg
# I0012 Warning locally suppressed using disable-msg
# W0704 Except doesn't do anything Used when an except clause does nothing but "pass" and there is no "else" clause
# W0142 Used * or * magic* Used when a function or method is called using *args or **kwargs to dispatch arguments.
# W0212 Access to a protected member %s of a client class
# W0232 Class has no __init__ method Used when a class has no __init__ method, neither its parent classes.
# W0613 Unused argument %r Used when a function or method argument is not used.
# W0702 No exception's type specified Used when an except clause doesn't specify exceptions type to catch.
# R0201 Method could be a function
# W0614 Unused import XYZ from wildcard import
# R0914 Too many local variables
# R0912 Too many branches
# R0915 Too many statements
# R0913 Too many arguments
# R0904 Too many public methods
disable=C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201,W0614,R0914,R0912,R0915,R0913,R0904,R0801

ドキュメントPylintの専用サイト を参照してください。

46
cfedermann

Cfedermannが言ったように、~/.pylintrcファイルで無効にするメッセージを指定できます(インラインコメントを使用したくない場合は、pylint --generate-rcfileを使用してスタブファイルを生成できます。

また、生成されたファイルの[BASIC]セクションには、「method-rgx」、「function-rgx」などのオプションがあり、pep8アンダースコアスタイルではなく、ラクダケーススタイルをサポートするように設定できます。 。

19
sthenault

これは古い質問ですが、 名前と一致するための独自の正規表現 を指定できるようになりました。

次に、ラクダの場合に一致する正規表現は次のようになります。

[a-z][a-zA-Z0-9]{2,30}$
3
pradyunsg

Pradyunsgからの上記の答えに加えて、CamelCaseの別の正規表現を次に示します。

^([a-z]\w+[A-Z]+\w+)

(PyLintのspelling.pyチェッカー、次の場所にあります:%APPDATA% - Local - Programs - Python - [PythonVersion] - Lib - site-packages - pylint - checkersフォルダ)

0
cssyphus

カスタムチェックの例 、および 理解しやすい別の例

私はあなたに似た問題に直面していました。次のコードは私のソリューションです。 1つのチェッカーをカスタマイズしてインポートを禁止しましたdatetime.now。参考にしてください:

class TestChecker(BaseChecker):
    """
    find the check type in the following url:
    https://github.com/PyCQA/pylint/blob/63eb8c4663a77d0caf2a842b716e4161f9763a16/pylint/checkers/typecheck.py
    """
    __implements__ = IAstroidChecker

    name = 'test-checker'
    priority = -1
    msgs = {
        'W0001': (
            'You should not import "%s"',
            'import-datetime-returns',
            'Should not import datetime'
        ),
    }

    def __init__(self, linter):
        super().__init__(linter)
        # I use original pylint's ImportsChecker as a property
        # from  import **
        self.forbidden_import = ['datetime.datetime.now']
        self.forbidden_import_from = ['datetime.now', 'now']
        self.forbidden_import_attribute = ['datetime.now', 'now', 'datetime.datetime.now']

    #the function will be rewrited
    def visit_importfrom(self, node):
        names = [name for name, _alias in node.names]
        for item in names:
            for check in self.forbidden_import_from:
                if item == check:
                    self.add_message('W0001', node=node, args=item)

    def visit_import(self, node):
        names = [name for name, _ in node.names]
        for item in names:
            for check in self.forbidden_import:
                if check == item:
                    self.add_message('W0001', node=node, args=item)

    def visit_attribute(self, node):
        for check_attr in self.forbidden_import_attribute:
            if check_attr == node.as_string():
                self.add_message('W0001', node=node, args=check_attr)


def register(linter):
    linter.register_checker(TestChecker(linter))
0
Deft-pawN

pylintをカスタマイズするには2つの方法があります。

構成ファイルを使用する

最初の方法は

  • pylintを呼び出してテンプレート設定ファイルを生成します
  • 構成ファイルをニーズ/要望に合わせて調整します
  • 次に、設定ファイルをデフォルトのpylint設定ファイルの場所に置くか、常にpylintを呼び出して設定ファイルのパスを指定します

ラッパースクリプトの使用

2番目の方法は、pylintを呼び出すラッパースクリプトを作成する場所です。ラッパースクリプトには、次のような行がたくさんあります。

pylint \
       ${options_here} \
       --disable=xyz1 \
       --disable=xyz_2 \
       ${more_options} \
       --disable=xyz_N \
       --disable=abc \
       $@

現在、問題を行番号でソートし、ソート順を取得するためにシェルスクリプトを作成したため、ラッパースクリプトアプローチを使用しています。

0