# TODO

## 必須

- `メタ実装`
  - set_panic_hook、イメージ通りに使えてないのでは？これを使えばcatchに行かないようにできるかも？
    - 本当はpanic時にスタックトレースを出したいので、出せるようにしてほしいなと思う
    - というかpanicを出さないようにしてほしい。これはjs側でもtry-catchの必要性が出てきてしまうので。
    - これ？ <https://stackoverflow.com/questions/59426545/rust-paniccatch-unwind-no-use-in-webassembly>

- `自動テストやCI`
  - TSでコード進行ジェネレータを作る。実装的にはASTジェネレータを作って、それにtoString()を生やせばいいと思う
    - 機能テストに使うのと、パフォーマンステストにも使えたらよいなと思う（1万件のコード進行があった時の検索パフォーマンスとか）

## 後でOK

- `保守面`
  - 新バージョンをリリースしたら勝手にREADME内に書かれてるバージョンも上げたい。github actions使ってsedでいじってREADMEをコミットしちゃっていい気がする
  - github actionsのリリース類、すでにそのタグでリリースされていたらそのジョブをスキップする等する

- `パフォーマンス面`
  - パフォーマンスのテストもしたい。
    - 例えば10回ループさせて平均実行完了時間を出しておいて、ファイルに記載しておく。コミットを戻せばその時のパフォーマンスがわかるように鳴る感じ。
    - これ、コミットごとに数値化しておいてグラフで比較できるようにしたい。全コミットのその値を出すのは面倒かもなのでファイルに書き出していく？うーんどうしたらいいかから考えて

- `コードクオリティ面（むしろチマチマやる方がメンテ感が出るのもあるので、あとの方がよいまである）`
  - `C[key=A]`はバリデーションで落とす
  - カバレッジ見て足りてないところをリファクタしていく
  - パフォーマンスチューニング（cloneを減らすとか）
  - 全体的にリファクタ等
    - chord_detailed.rs、extension周りのコードが汚いので修正したい
    - serde詳しくなる <https://serde.rs/container-attrs.html>
    - exhaustive matchできてないところがあるかもなので網羅
  - メタ情報が重複した時のエラーが不足しているので追加？
  - まだstrum使ってない箇所あるので使う（Accidentalとか）
    - 逆にserdeを使えばstrum使わなくてもいい可能性感じるので見てみる
    - is_token_char、Token::VARIANTSを使って書き換える
  - コメント追加
  - 関数に切り出し
  - prettifyされない。動かなくなってるかも
  - lefthookの`commit-msg`フックでコミットメッセージに日本語入ってたら落としたい。なぜかうまくいかず一旦諦めた。commitlintとか使えばいいのかも
  - wasm-bindgen-testの盛り込み <https://rustwasm.github.io/docs/wasm-bindgen/wasm-bindgen-test/index.html>
    - 不要ならば無しでいいけども調べてほしい

- `仕様面`
  - エラーメッセージの内容を精査して意味的に正しくする
  - エラーメッセージ、現状は1個しか返せないが、パーサーなら複数返してほしいな。そういう懸念とか集めてからV1の公開にしたいな
    - これやる方法、エラー出たmatchはエラーをスタックに詰んだ時点でbreakして、一旦なかったことにして次のループに進めば良い気がする
  - エラー時、できればスタックトレースがほしい。
    - line!, file!, column!とか使えばソース上の位置情報が取れるっぽい。というかスタックトレース取れないものか？
    - エラー情報、GPTに聞いてみたら以下もありらしい

      ```txt
      message　・・・エラーの具体的な説明。
      errorType　・・・エラーの種類やコード（例：「SyntaxError」、「TypeError」など）。
      context　・・・エラーが発生したコードの周辺部分。特定のエラーをより明確に理解するのに役立ちます。
      severity　・・・エラーの重大度。例えば、「警告」、「エラー」、「致命的エラー」など。
      suggestions　・・・エラーの解決策やヒント。
      ```

  - `-5`と`b5`を同じものと扱うのはstrumの技術的に一旦諦めたので、後で対応する。今は一旦`b5`のみ対応
    - strumやめて独自で管理すれば一応は対応可能なはず
      - 例えば単に以下のようなオブジェクトの配列にするとかね
        {
          name: "FlatFive",
          aliases: ["-5", "b5"],
          intervals: [-5],
        }
  - エスケープとか対応するならする
  - というかエラーのみならず正常パースしたTokenにもPosition周りの情報を付けたほうが逆パース（？）をしやすいのでは。その場合ASTを大改修になるのでやめておくか…
    - いやもしかしたらだけど、ASTツリー自体にフィールドを追加するのでなく単にtokenizerの結果も返すだけでいいのかも。以下イメージ

      ```json
        {
          "ast": AST,
          "tokensWithPosition": [
            {
              "token": Token,
              "position": Position
            }
          ]
        }
      ```
