SU | MO | TU | WE | TH | FR | SA |
---|---|---|---|---|---|---|
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
st-mode.elとtree-sitterと試したけど、結局st-mode.elになった
PLC向けの言語。
ラダー言語よりは、C言語やPASCALに近い文法で、情報系の人も書きやすい。
ノウハウがネットに皆無。
IEC61131-3で規格化されてるので、そういった文書はありはするが。
Melpaには登録がないが、wadoon/st-modeがあった。
これでシンタックスハイライトとインデントは大体できた。
が、細かいところバグってたので、tree-sitterがないか検索。
何個かあったが、結局どちらでも一部文法はerror判定になってまともに動かなかった。
なにより、シンタックスハイライトは自前で実装しないといけないことで挫折した。
まず、Cでコンパイルが必要なのが面倒。
Windows環境で、build-essentialを用意するのが面倒。
VisualStudioは入ってるので、msbuildでやった。
msbuildのmakefileに相当するvcxprojを0から作る必要があった。
vcxprojはAIに生成してもらって何とかなった。
次に、Emacsに設定するまでが面倒。
dllを.emacs.d/tree-sitter
に配置して、
名前をlibtree-sitter-<言語>.dll
にすれば、
空の<言語>-ts-mode
を作ってやれば解決かと当初思ってた。
しかし、これは構文解析が有効になるだけで、
シンタックスハイライトは自前で実装しないといけないことが分かった。
Clojureで始めるTree-sitter - Conao3 Note
dllはできたけどロードがちゃんとされたかわからない。
→treesit-language-available-p
で確認できる。
特に第2引数を入れることで、エラー要因を取得することができる。
(require 'treesit)
(treesit-language-available-p 'structured-text 't)
指定のエントリポイントがないみたいなエラーだった。
→tree-sitterのルールで、parser.c
のtree_sitter_<言語>
がエントリポイントになってる。
Emacsだと、ファイル名libtree-sitter-<言語>.dll
の言語とエントリポイントの言語揃う必要がある。
ロードはできたけど色がつかない。
→(setq-local treesit-font-lock-feature-list '((<feature名>)))
が必要?
妥当性は未検討。n=1で改善できた。
treesit-explore-mode
を使うと、現在のファイルの構文木を見ることができる。
そこで定義されたtypeから、font-lock設定することで、シンタックスハイライトが実現できる。
結局、st-mode.elをフォークして、バグ修正して使うことにした。
fujimotok/st-mode
時間があればtree-sitterのほうもチャレンジしたいが、
CodesysからEmacsを外部エディタとして使えるようにする方を優先してやりたい。