
bellybutton ist ein anpassbarer, leicht zu konfigurierter Linkermotor für Python.
Tools wie Pylinint und Flake8 bieten eine Vielzahl von Regeln für die Durchsetzung von Python-Best Practices, die Gewährleistung der PEP-8-Einhaltung und die Vermeidung häufiger Quellen von Fehlern. Viele Projekte haben jedoch projektspezifische Kandidaten für statische Analysen, wie z. Dies gilt insbesondere für Projekte mit vielen Mitwirkenden oder mit großen oder alten Codebasen.
bellybutton ermöglicht es, benutzerdefinierte Lining-Regeln auf einer pro-projektbasierten Basis angegeben und im Rahmen Ihres normalen Build-, Test- und Bereitstellungsverfahrens zu erkennen. Darüber hinaus wird die Angabe dieser Regeln sehr zugänglich, wodurch die Annahmekosten erheblich gesenkt werden.
Probieren Sie bellybutton , wenn:
bellybutton kann installiert werden über:
pip install bellybuttonEinmal installiert, laufen
bellybutton init Im Root Directory Ihres Projekts erstellen Sie eine .bellybutton.yml -Konfigurationsdatei mit einer Beispielregel, mit der Sie sich mit der Anpassung beginnen können. bellybutton wird auch versuchen, zusätzliche Regeleinstellungen basierend auf der Verzeichnisstruktur Ihres Projekts anzugeben.
Sobald Sie bellybutton für Ihr Projekt konfiguriert haben, laufend
bellybutton lint wird das Projekt gegen die in Ihrem .bellybutton.yml angegebenen Regeln fungieren. Zusätzlich laufen
bellybutton lint --modified-only Wenn Sie Git verwenden, unterscheiden sich nur die Dateien, die sich von origin/master unterscheiden.
Schauen Sie sich die Tox -Konfiguration dieses Repository und .Travis.yml als Beispiel an, um bellybutton zu Ihrer CI -Pipeline hinzuzufügen.
Regeln in bellybutton -Versorgungsmustern, die gefangen werden sollten und das Stinkt ausfällt. Regeln, wie in Ihrer .bellybutton.yml -Konfiguration angegeben, muss aus:
description , die die Bedeutung der Regel zum Ausdruck bringtexpr das Muster angibt, das erfasst werden soll - entweder als Astpath -Ausdruck oder als regulärer Ausdruck ( !regex ... ). Darüber hinaus dient der Schlüssel, der für die Regel innerhalb der rules -Zuordnung verwendet wird, als Name.
Regeln können auch bestehen aus:
settings , die feststellen, welche Dateien die Regel durchgesetzt werden sollen, und ob sie über einen # bb: ignoreexample für einen Python -Code, der von der Regel übereinstimmen würdeinstead eines alternativen Code-Stücks, um den Entwickler bei der Behebung seines Leitungsfehlers zu leiten. Diese example und instead werden die Klauseln zur Laufzeit überprüft, um sicherzustellen, dass sie jeweils durch die expr der Regel übereinstimmen und nicht.
Beispielsweise könnte eine Regel, die für einen veralteten Funktionsaufruf unter Verwendung eines Astpath -Ausdrucks aussieht, wie:
DeprecatedFnCall :
description : ` deprecated_fn ` will be deprecated in v9.1.2. Please use `new_fn` instead.
expr : //Call[func/Name/@id='deprecated_fn']
example : " deprecated_fn(*values) "
instead : " new_fn(values) " !settings geben an:
included Wege, auf denen Regeln ausgeführt werden sollen, wobei die Glob -Notation verwendet werden sollexcluded Pfade, auf denen Regeln nicht ausgeführt werden sollen (auch wenn sie den included Pfaden abgleichen)allow_ignore , der feststellt, ob Regeln ignoriert werden können, und die Zeile, die mit der Regel entspricht, enthält einen # bb: ignore einen Kommentar. Zusätzlich kann auf der Stammebene von .bellybutton.yml eine Einstellung default_settings angegeben werden, die von Regeln ohne explizite Einstellungen verwendet wird. Jede Regel muss entweder einen settings haben oder in der Lage sein, auf die default_settings zurückgreifen zu können.
Beispielsweise könnte ein !settings Einstellungsknoten zum FININT nur ein bestimmtes Modul aussehen:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no Schauen Sie sich .bellybutton.yml dieses Repositorys als Beispiel bellybutton -Konfigurationsdatei und astpath Readme an, um Beispiele für die Arten von Mustern zu erhalten, die Sie für die Verwendung von bellybutton verwenden können.
bellybutton ist in einer Alpha -Veröffentlichung und fehlt daher einige wichtige Funktionen, Dokumentation und vollständige Testabdeckung. Darüber hinaus ist bellybutton nicht für die Leistung bei extrem großen Codebasen optimiert und kann möglicherweise Bruchfehler enthalten. Bitte melden Sie alle aufgetauchten Fehler.
!chain und !verbal Ausdrucksknoten werden noch nicht implementiert