Skip to content

Instantly share code, notes, and snippets.

@apxxxxxxe
Last active December 16, 2023 06:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save apxxxxxxe/d3ac3d0308e58dfd5e1774a4cf866f8d to your computer and use it in GitHub Desktop.
Save apxxxxxxe/d3ac3d0308e58dfd5e1774a4cf866f8d to your computer and use it in GitHub Desktop.
伺的 Advent Calendar 2022 16日の記事 (作成したツールの紹介)

YAYAのフォーマッタを作ったよ(開発中)

伺的 Advent Calendar 2022 16日の記事です。

この記事で伝えたいこと

yayaを使ったゴースト開発をされている方向けに

  • formatyaya: yaya辞書ファイルの整形を行うフォーマッタ
  • formatyaya-vscode: ↑をVSCodeで使えるようにしたVSCode拡張機能

を作りました。

ただし 開発中であり、大小問わずバグが残っている可能性が高いです。
使用はご注意のもと自己責任でお願いします。

フォーマッタってなに?

ここで説明するフォーマッタ、フォーマッター(formatter)は、

  1. コード(辞書)の記述を文法的に解析し、
  2. 括弧や改行、スペースの位置を整形、統一するツール

です。
簡単に言えば、以下のように改行やスペースなどが不規則に乱れたコードをきれいに整えてくれるものです。

// Before

Function{ _var = RAND(100)
if _var>= 50 { "a"; "b" } else{ "c"} }
// After

Function
{
  _var = RAND(100)
  if _var >= 50 {
    "a"
    "b"
  }
  else {
   "c"
  }
}

代表的なものは PrettierESLint でしょうか。後者は静的検証がメインですが……。

formatyaya

どちらかといえば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

formatyaya_transitoion

formatyaya をVSCodeで使えるようにしたVSCode拡張機能です。
使用する場合は基本的にこちらをおすすめします。

できること

言語「aya」におけるフォーマッタとして、基本的には他言語のフォーマッタと同様に扱えます。
例を挙げると、

  • 辞書の編集中にShift+Alt+fでコードの整形
  • 保存時に自動で整形するように設定

などです。
また、設定からformatyayaにおける-s,-cオプションにあたる設定が可能です。

できないこと

以下は記事作成時点で判明している分です。

  • 選択範囲のみ整形する(formatyayaが部分的な整形に非対応のため)

さいごに

今回紹介したツールは以下リンクのReleaseページからプレリリース版をダウンロード可能です。
ただし 開発中であり、大小問わずバグが残っている可能性が高いです。
使用はご注意のもと自己責任でお願いします。

追記
MarketPlace版もリリースしました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment