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?
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 .
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 .
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}$
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)
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))
Es gibt zwei Möglichkeiten, pylint
anzupassen.
Der erste Weg ist, wo du bist
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.