atcoder-tools
atcoder-tools copied to clipboard
言語ごとにインデント幅などのデフォルト設定を別々にできるようにしたい
標記の通り、言語ごとにインデント幅・タブや空白などの設定を別々にできるようにしたいです。
経緯としては、現在NIM言語バージョンのatcoder-toolsを作成しているのですが、NIM言語では下記のページのようにインデント幅は2が推奨となっており、ほぼすべてのコードやライブラリがインデント幅2で書かれています。
https://nim-lang.org/docs/nep1.html
ただし、pythonと同じようにインデント幅が2でなくてもコンパイルできて動かすことは可能です。
もしも、現状のようにデフォルトでインデント幅が4であると、大部分のNIMユーザーは設定ファイルでインデント幅を2に書き換えなくてはならず、使いづらいものとなってしまいます。
これに関する抜本的な解決策としてそもそも設定ファイルに複数の言語に対応した設定記述を提案したいのですが、いかがでしょうか。
現行
[codestyle]
indent_type='space' # 'tab' or 'space'
indent_width=4
template_file='~/my_template.cpp'
workspace_dir='~/atcoder-workspace/'
lang='cpp'
code_generator_file="~/custom_code_generator.py"
[postprocess]
exec_on_each_problem_dir='clang-format -i ./*.cpp'
exec_on_contest_dir='touch CMakeLists.txt'
新案
以下のように、TOMLで特定の言語記述ができるようにする(langというオプションは廃止)
# common用
[codestyle]
workspace_dir='~/atcoder-workspace/'
[postprocess]
...
# cpp用
[cpp.codestyle]
indent_type='space' # 'tab' or 'space'
indent_width=4
template_file='~/my_template.cpp'
code_generator_file="~/custom_code_generator.py"
[cpp.postprocess]
exec_on_each_problem_dir='clang-format -i ./*.cpp'
exec_on_contest_dir='touch CMakeLists.txt'
# nim 用
[nim.codestyle]
indent_type='space'
indent_width=2
template_file='~/my_template.nim'
code_generator_file="~/custom_code_generator_for_nim.py"
[nim.postprocess]
exec_on_each_problem_dir='nim用オートフォーマットコマンド'
exec_on_contest_dir='nim用コンテストディレクトリ'に対するコマンド
メリット
- 実装が楽
- もし言語指定無しcodestyleをcommonの設定として許すならば、既存の設定ファイルとの後方互換性が維持できる
デメリット
- 思いついたら書く。
- commonとかがあると特に設定の仕様が複雑化するのでドキュメントをちゃんと書かないとユーザーが困る(できればcommon用は需要が少ないのでdeprecateしたいところだがコンテストディレクトリとかはまとめて書きたいかも...?)
とりあえずnimの対応版をリリースしたいのでひとまずは怪しいfixをします。
投稿に気づかず、似たようなものをpull-requestしてしまいました。
indent幅はNIMだけ2にするのではなく、Languageクラスで指定できるようにしてはどうでしょうか?