伺的 Advent Calendar 2022 16日の記事です。
yayaを使ったゴースト開発をされている方向けに
- formatyaya: yaya辞書ファイルの整形を行うフォーマッタ
- formatyaya-vscode: ↑をVSCodeで使えるようにしたVSCode拡張機能
を作りました。
ただし 開発中であり、大小問わずバグが残っている可能性が高いです。
使用はご注意のもと自己責任でお願いします。
ここで説明するフォーマッタ、フォーマッター(formatter)は、
- コード(辞書)の記述を文法的に解析し、
- 括弧や改行、スペースの位置を整形、統一するツール
です。
簡単に言えば、以下のように改行やスペースなどが不規則に乱れたコードをきれいに整えてくれるものです。
// Before
Function{ _var = RAND(100)
if _var>= 50 { "a"; "b" } else{ "c"} }
// After
Function
{
_var = RAND(100)
if _var >= 50 {
"a"
"b"
}
else {
"c"
}
}
代表的なものは Prettier や ESLint でしょうか。後者は静的検証がメインですが……。
どちらかといえばformatyaya-vscodeの方が本題なのですが、まずはその心臓部となるformatyayaについて。
Goで書かれたCLIツールであり、コードを抽象構文木にパースし、一定規則で整形する機能を担います。
制作にあたってWikiのマニュアル(aya/yaya)には大変お世話になりました。
formatyaya -h
で以下のヘルプを出力します。
Usage of formatyaya:
-c int
spaceCount: the count of space when flag -s turned on (default 2)
-i Inplace: overwrite original file
-s useSpace: indent as space
基本的には、単一の辞書ファイル(.dic, .aymに対応)を読み込み、フォーマット結果を出力します。
ただし、構文解析に失敗した場合は何も出力しません。
出力先は標準出力と-i
オプションによる入力ファイル上書きを選べますが、後者は非推奨です。
現在は開発中であり、予期しない記述の削除などが起こる可能性があるためです。
現状、フォーマット形式の細かい指定ができません(インデントをタブ文字かスペースかを選べる程度)。
{}
の位置やスペースの頻度など、より詳細な設定ができるようにする予定です。
formatyaya をVSCodeで使えるようにしたVSCode拡張機能です。
使用する場合は基本的にこちらをおすすめします。
言語「aya」におけるフォーマッタとして、基本的には他言語のフォーマッタと同様に扱えます。
例を挙げると、
- 辞書の編集中に
Shift+Alt+f
でコードの整形 - 保存時に自動で整形するように設定
などです。
また、設定からformatyayaにおける-s
,-c
オプションにあたる設定が可能です。
以下は記事作成時点で判明している分です。
- 選択範囲のみ整形する(formatyayaが部分的な整形に非対応のため)
今回紹介したツールは以下リンクのReleaseページからプレリリース版をダウンロード可能です。
ただし 開発中であり、大小問わずバグが残っている可能性が高いです。
使用はご注意のもと自己責任でお願いします。
追記
MarketPlace版もリリースしました。