wake-up-neo.com

Kann die Pylint-Fehlerprüfung angepasst werden?

Ich verwende pydev, wo ich Pylint eingerichtet habe .. Das Problem ist, dass Pylint auch in den Kommentaren Warnungen meldet. Ich habe versucht, jede Art von Überprüfung innerhalb einer Zeile oder eines Blockkommentars zu deaktivieren. Außerdem möchte ich der camelCase-Namenskonvention statt Unterstrichen für Variablen und Argumente in meinem Code folgen. Gibt es eine Möglichkeit, dies anzugeben Eine Regel, ohne meinen Code mit einem beliebigen Pylint einzufügen: Kommentare deaktivieren?

32
Sumit Bisht

Sie können Warnungen über eine bestimmte Klasse global mit deaktivieren

pylint --disable=W1234

oder mithilfe einer speziellen PyLint-Konfigurationsdatei

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

Eine Beispiel-Konfigurationsdatei ist unten angegeben:

[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

Siehe die Dokumentation über bei Pylint's dedizierte Site .

45
cfedermann

Wie von cfedermann gesagt, können Sie angeben, dass Nachrichten in einer ~/.pylintrc-Datei deaktiviert werden sollen (beachten Sie, dass Sie eine Stub-Datei mit pylint --generate-rcfile generieren können, wenn Sie keine eingebetteten Kommentare verwenden möchten.

In der generierten Datei werden im Abschnitt [BASIC] auch Optionen wie "method-rgx", "function-rgx" usw. angezeigt, die Sie nach Belieben konfigurieren können, um den Camel-Case-Stil anstelle des pep8-Unterstreichungsstils zu unterstützen .

19
sthenault

Obwohl dies eine alte Frage ist, sollte erwähnt werden, dass sie jetzt ihren eigenen Regex für den Abgleich mit Namen angeben können.

Dann würde Ihr Regex zum Kamelfall ungefähr so ​​aussehen:

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

Auf die obige Antwort von pradyunsg folgt ein weiterer regulärer Ausdruck für CamelCase:

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

(Aus PyLints spelling.py checker, gefunden in: %APPDATA% - Local - Programs - Python - [PythonVersion] - Lib - site-packages - pylint - checkers Ordner)

0
cssyphus

Hier ist das Beispiel für die benutzerdefinierte Überprüfung und ein weiteres Beispiel .

Ich hatte ein ähnliches Problem wie Sie. Der folgende Code ist meine Lösung. Ich habe einen Checker an den verbotenen Import datetime.now angepasst. Sie können es als Referenz nehmen:

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

Es gibt zwei Möglichkeiten, pylint anzupassen.

Verwendung einer Konfigurationsdatei

Der erste Weg ist, wo du bist 

  • rufen Sie pylint auf, um eine Vorlagen-Konfigurationsdatei zu erstellen
  • dann passen Sie die Konfigurationsdatei an Ihre Bedürfnisse/Wünsche an
  • dann legen Sie die Konfigurationsdatei in den Standardspeicherort der Pylint-Konfigurationsdatei oder rufen immer pylint auf und geben den Pfad der Konfigurationsdatei an

Verwenden eines Wrapper-Skripts

Die zweite Möglichkeit ist, wenn Sie ein Wrapper-Skript erstellen, das pylint aufruft, und im Wrapper-Skript haben Sie eine Reihe von Zeilen, die wie folgt aussehen:

pylint \
       ${options_here} \
       --disable=xyz1 \
       --disable=xyz_2 \
       ${more_options} \
       --disable=xyz_N \
       --disable=abc \
       [email protected]

Derzeit verwende ich den Wrapper-Skript-Ansatz, weil ich möchte, dass die Ausgaben nach Zeilennummern sortiert werden, und ich habe einige Shell-Skripte erstellt, um diese Sortierreihenfolge zu erhalten.

0