私はvimをエディタとシンタックスプラグインとして使用しています。私は、Bazelのようなツールでpylintを使う慣用的な方法を理解しようとしています。bazelでpylintを設定する最も良い方法
pylintには、sys.hookを動的に操作するために使用できるinit-hookコマンドラインパラメータがあります。私はこれを行うためのラッパースクリプトを書くことを考えていましたが、私は "init-hook"コマンドとして渡すべき正しいものを決める方法が不明です。
私はvimをエディタとシンタックスプラグインとして使用しています。私は、Bazelのようなツールでpylintを使う慣用的な方法を理解しようとしています。bazelでpylintを設定する最も良い方法
pylintには、sys.hookを動的に操作するために使用できるinit-hookコマンドラインパラメータがあります。私はこれを行うためのラッパースクリプトを書くことを考えていましたが、私は "init-hook"コマンドとして渡すべき正しいものを決める方法が不明です。
私が知っている最良の方法は、試験の一部としてpylint
を実行することです。
理想的には、ファイルごとにlintingルールを設定すると、そのファイルが変更されたときにそのファイルを再度リントすることができます。しかしこれはおそらく実用的ではありません。
スケールの反対側には、プロジェクト内のすべてのファイルをlintするルールが1つあります。このルールは、1つのファイルだけが変更された場合でもすべてのファイルを元に戻します。これは非効率的です。
私の意見では、良い中間地は、Bazelパッケージごとに1つの糸くず処理ルールです。
sh_test(
name = "lint_test",
srcs = ["lint_test.sh"], # this doesn't have to do anything
data = ["lint_files.out"],
)
genrule(
name = "lint_files",
srcs = glob(["**/*.py"]),
outs = ["lint_files.out"],
tools = ["@local_pylint_config//:pylint"],
cmd = "$(location @local_pylint_config//:pylint) $(SRCS) >&/dev/null && md5sum $$(echo $(SRCS) | sort) > [email protected]",
)
注:
、私は次のパターンをお勧めしますが、例えば@local_pylint_config//:pylint
下のワークスペース内のバイナリとしてpylintていると仮定すると、 lintingが成功すれば成功する。したがって、lintingが成功した場合にのみ、テストは成功します。
/dev/null
にリダイレクトしています。md5sum
の代わりに出力ファイルを単にtouch
にすると、出力の内容はソースの内容とは無関係になるため、下流のテストルールは再実行されません。... && date > [email protected]
を使用すると、Bazelは元のファイルが変更された場合にgenelleを再構築してソースファイルを再作成するため、現在の時刻が変更されていました。しかし、チェックサムの使用は決定論的です。
私はBazelとPyLintの間の接続、または達成しようとしていることはありません。あなたはそれらの相互作用をどのように想像していますか? –
@László恐らく、パイリントは、他の種類のテストと同様に、バゼルを介して走るようにしています。 – Alec