Open6

CWTOOLのメモリ使用量がえぐいのでCK3用のLSPを作る

x0y14x0y14

実用に足るものを作るために
pherrymason / c3-lspを調査した.
github.com/tliron/glspを使用しているからだ.
ASTの部分でgithub.com/smacker/go-tree-sitterを用いていることがわかった.

x0y14x0y14

go-tree-sitterを使うにはtree-sitterCLIで言語サポートを作成する必要があるらしい.
go言語だけでは完結できないくさい.

つまり
独自言語のLSPをgoで作りたいとなると,glsp + go-tree-sitterが選択肢としてあって,言語解析の根本的な部分はtree-sitterに頼ることになって(おそらくスクラッチでも良いがパフォーマンス的に),そのためにc言語でヘッダーだけ書くことになるってことかな.

go-tree-sitterでの言語サポート追加について
https://github.com/smacker/go-tree-sitter/pull/58/files#diff-e74d9ff55ebb0a625f78a5ce4a0bd687d93e03bad32818f5fbb4e24790da3793

Tree-sitterでの言語サポート追加に関して
https://tree-sitter.github.io/tree-sitter/creating-parsers

x0y14x0y14

m1でtree-sitterCLIのインストールに失敗した.
```error: failed to run custom build command for `proc-macro2 v1.0.87````

https://github.com/rust-lang/rust/issues/122641
で解決した
stripがbin/homebrewで複数発見されたのが問題.
homebrew経由でbinutilsがこれをインストールしてるっぽいのでbinutilsアンストして解決.
消していいものか知らんがまぁ他でエラー出たらインストールしなおせば良いだろう.

x0y14x0y14

go-tree-sitterに独自言語のサポートを追加する方法

goはほとんど使いません.jsを主に使います.

  1. tree-sitterCLIをインストールします.
  2. tree-sitter initして準備します.
  3. grammer.jsを描きます.
  4. tree-sitter generateします.
  5. parser.h,parser.cをgoのパッケージの方に移します.binding.go作ります.
  6. 以上(要検証)