Open4

LSPづくりのためのメモ

ktz_aliasktz_alias

LSPをどう実装したらいいのか1㍉もわからないので、関連しそうなことを片っ端から突っ込むスレ

参考にしたリンク

ktz_aliasktz_alias

tree-sitter

コード補完のための構文木構築にはtree-sitterが多く用いられている印象

  • tree-sitterのパーザを作るためには専用のルール定義を用意する必要がある
    • ルールはEBNFライク
  • duckdbyaccでパーザを作っているため、変換が必要
    • 幸いにしてduckdb/third_party/libpg_query/grammar/grammar_out.outputを出力してくれている
    • Grammerセクションを入力にできる。
    • 必要に応じて、Terminals, with rules where they appearから終端記号を抽出
      • 大抵はGrammerセクションから抽出できる
  • Grammerセクションの内容を扱いやすくするため、Jsonなどの汎用フォーマットで抜き出す。
  • Grammer ASTEBNFに変換する
  • EBNFtree-sitterの記述を付け足す。

これでなんかいけそうな雰囲気