
bellybutton 、Python用のカスタマイズ可能で構成しやすい糸くずエンジンです。
PylintやFlake8などのツールは、すぐに使用できるように、Pythonのベストプラクティスを実施し、PEP-8コンプライアンスを確保し、頻繁にバグのソースを回避するためのさまざまなルールを提供します。ただし、多くのプロジェクトには、内部スタイルガイド、非推奨機能の領域、または一般的なエラーソースなど、静的分析のプロジェクト固有の候補者がいます。これは、多くの貢献者や大規模またはレガシーコードベースを持つプロジェクトに特に当てはまります。
bellybutton 、カスタムリンチルールをプロジェクトごとに指定し、通常のビルド、テスト、展開プロセスの一部として検出できるようにし、さらにこれらのルールを非常にアクセスしやすく、採用コストを大幅に削減します。
bellybutton試してみてください。
bellybutton以下を介してインストールできます。
pip install bellybuttonインストールしたら、実行します
bellybutton initプロジェクトのルートディレクトリでは、適応を開始するための例のルールを備えた.bellybutton.yml構成ファイルを作成します。 bellybutton 、プロジェクトのディレクトリ構造に基づいて追加のルール設定を提供しようとします。
プロジェクト用にbellybuttonを構成したら、実行中です
bellybutton lint .bellybutton.ymlで指定されたルールに対してプロジェクトを覆します。さらに、ランニング
bellybutton lint --modified-only GITを使用する場合、 origin/masterとは異なるファイルのみを覆うだけです。
CIパイプラインにbellybuttonを追加するには、このリポジトリのTOX構成と.travis.ymlを例としてご覧ください。
bellybuttonのルールは、捕まえられ、糸くずが失敗するはずです。 .bellybutton.yml構成で指定されているルールは次のもので構成されている必要があります。
descriptionexpr -astpath式として、または正規表現として( !regex ... )。さらに、 rulesマッピング内のルールに使用されるキーは、その名前として機能します。
ルールは次のとおりです。
settings 、および# bb: ignoreexampleinsteadカウンターエクサム。これらのexampleとinstead 、条項は実行時にチェックされ、それぞれがルールのexprによって一致しないことを確認します。
例として、ASTPath式を使用した非推奨の関数呼び出しのためにリントするためのルールは、次のように見えるかもしれません。
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ノード指定:
includedexcludedパス( includedパスと一致する場合でも)allow_ignore 。ルールに一致する行を提供すると# bb: ignoreコメントがあります。さらに、 .bellybutton.ymlのルートレベルでは、明示的な設定なしでルールで使用されるdefault_settings設定を指定できます。各ルールには、 settingsパラメーターがあるか、 default_settingsに頼ることができる必要があります。
例として、特定のモジュールのみが次のように見えるかもしれないA !settingsノード:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no このリポジトリの.bellybutton.ymlは、 bellybutton構成ファイルの例として、およびbellybuttonを使用するためにリントできるパターンのタイプの例については、 astpathのreadmeをチェックしてください。
bellybuttonはAlphaリリースにあり、そのため、いくつかの重要な機能、ドキュメント、および完全なテストカバレッジが欠落しています。さらに、 bellybuttonは非常に大きなコードベースのパフォーマンスに最適化されておらず、壊れたバグが含まれている場合があります。遭遇したバグを報告してください。
!chainと!verbal式ノードはまだ実装されていません