
bellybutton est un moteur de liaison personnalisable et facile à configurer pour Python.
Des outils comme Pylint et Flake8 fournissent, prêts à l'emploi, une grande variété de règles pour appliquer les meilleures pratiques de Python, assurer la conformité PEP-8 et éviter de fréquentes sources de bogues. Cependant, de nombreux projets ont des candidats spécifiques au projet pour une analyse statique, tels que des guides de style interne, des zones de fonctionnalité obsolète ou des sources d'erreur communes. Cela est particulièrement vrai pour ces projets avec de nombreux contributeurs ou avec des bases de code grandes ou héritées.
bellybutton permet de spécifier des règles de liaison personnalisées sur une base par projet et détectée dans le cadre de votre processus normal de construction, de test et de déploiement et, en outre, rend la spécification de ces règles très accessible, ce qui réduit considérablement le coût de l'adoption.
Essayez bellybutton si:
bellybutton peut être installé via:
pip install bellybuttonUne fois installé, en cours d'exécution
bellybutton init Dans le répertoire racine de votre projet, créera un fichier de configuration .bellybutton.yml avec un exemple de règle pour que vous commencez à vous adapter. bellybutton essaiera également de fournir des paramètres de règles supplémentaires en fonction de la structure du répertoire de votre projet.
Une fois que vous avez configuré bellybutton pour votre projet, en cours d'exécution
bellybutton lint Verai le projet par rapport aux règles spécifiées dans votre .bellybutton.yml . De plus, la course
bellybutton lint --modified-only Will, si vous utilisez Git, seuls les fichiers qui diffèrent de origin/master .
Pour ajouter bellybutton à votre pipeline CI, jetez un œil à la configuration TOX de ce référentiel et .travis.yml comme exemple.
Les règles dans les modèles d'approvisionnement bellybutton qui devraient être capturés et provoquent l'échec de la lignée. Les règles spécifiées dans votre configuration .bellybutton.yml doivent être constituées:
description , exprimant le sens de la règleexpr , spécifiant le motif à capter - soit comme une expression ASTPATH, soit comme une expression régulière ( !regex ... ). De plus, la clé utilisée pour la règle dans le mappage rules sert de nom.
Les règles peuvent également être constituées de:
settings qui spécifient sur quels fichiers la règle doit être appliquée, ainsi que si elle peut être ignorée via un # bb: ignore le commentaireexample de code python qui serait apparié par la règleinstead d'un autre morceau de code, pour guider le développeur dans la fixation de leur erreur de liaison. Ces clauses example et instead sont vérifiées au moment de l'exécution pour s'assurer qu'elles sont respectivement et ne sont pas égales par l' expr de la règle.
À titre d'exemple, une règle à peluche pour un appel de fonction obsolète utilisant une expression ASTPATH peut ressembler:
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 spécifient:
included sur lesquels les règles doivent être exécutées, en utilisant la notation globaleexcluded sur lesquels les règles ne doivent pas être exécutées (même lors de la correspondance des chemins included )allow_ignore qui détermine si les règles peuvent être ignorées, fournissant la ligne correspondant à la règle a un # bb: ignore le commentaire. De plus, au niveau racine de .bellybutton.yml , un paramètre default_settings peut être spécifié qui sera utilisé par des règles sans paramètres explicites. Chaque règle doit avoir un paramètre settings ou être en mesure de se rabattre sur les default_settings .
À titre d'exemple, un nœud !settings pour peluche pour un module spécifique peut ressembler:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no Consultez .bellybutton.yml de ce référentiel comme exemple de fichier de configuration bellybutton , et astpath 's ReadMe pour des exemples des types de modèles que vous pouvez mettre en lit pour utiliser bellybutton .
bellybutton est dans une version alpha et, en tant que tel, il manque des fonctionnalités clés, une documentation et une couverture de test complète. De plus, bellybutton n'est pas optimisé pour les performances sur des bases de code extrêmement grandes et peut contenir des bogues de rupture. Veuillez signaler tous les bogues rencontrés.
!chain et !verbal