pysen
https://github.com/pfnet/pysen
経緯 Pythonのlinter/formatterを誰でも手軽に設定できるようにするためのPFN社内ツール “pysen” の紹介
ソースリードしてみている https://zenn.dev/ftnext/scraps/10896babd29555
#argparse の使い方が参考になる
大まかに言えば、add_subparsers と set_defaults を組合せて、実装をスッキリさせるをやっている
_setup_manifest_parser
ArgumentParser
https://docs.python.org/ja/3/library/argparse.html#add-help
ヘルプオプションの無効化
parse_know_argsのunknownにヘルプがあったらという処理を書いている(args.configがNoneならexceptのブロックに入る)
add_argument choicesとEnumの__members__
https://docs.python.org/ja/3/library/enum.html#iteration
destを指定してカスタムの属性名を与える
https://docs.python.org/ja/3/library/argparse.html#dest
Shortcut for --process-output=show
部分解析 parse_known_args!
https://docs.python.org/ja/3/library/argparse.html#argparse.ArgumentParser.parse_known_args
ときどき、スクリプトがコマンドライン引数のいくつかだけを解析し、残りの引数は別のスクリプトやプログラムに渡すことがあります。
parse_known_argsで早期リターンできる!
parserを作って返す関数(parseは別)
cli()側がmain parserとのNOTEあり(264行目)
cli()を呼び出すと_setup_manifest_parserは2回呼ばれている
https://docs.python.org/ja/3/library/argparse.html#parents
共通引数を持ったパーサーをparents引数に渡す
親のparserにはadd_help=False指定が必要
引数グループ
titleを指定(manifest options)
https://docs.python.org/ja/3/library/argparse.html#argparse.ArgumentParser.add_argument_group
位置引数、オプション引数とは異なる引数のグループ化方法
返り値の引数グループオブジェクトを下のメソッドに入れる(add_argumentがある)
ManifestBaseを継承したManifestクラス
configure_parser
相互排他グループを作る
https://docs.python.org/ja/3/library/argparse.html#argparse.ArgumentParser.add_mutually_exclusive_group
--enableか--disableのどちらかとしている
path.py
wrap_path
strとPathを取ってstrならPathにして返す