RuboCopに出しているPull Requestのうち2件がどちらもこちらの作業待ちなので、早く取り掛からないといけない。どちらもドキュメントを追加するという仕事が残っているので大変。

シンタックスハイライトの実装方法について悩んでいる。

TextMateの文法ファイルを拡張側で管理して正規表現でやっていくか、あるいはLSPのSemantic Tokensを使ってtree-sitterで解析した結果に対してアプローチするか。

Semantic Tokensで幾らか実装してみた。

  • 真面目にやろうとすると既存のTextMateの文法ファイルがやっているのとほぼ同等の機能を自分で実装することになる
  • tree-sitter-parserが使えるとはいえ、別にそこまで楽にはならない
  • 既存のシンタックスハイライトを部分的に上書きするということがなかなか難しい
  • 大事なのは良いscopeのセットを提供することで、TextMateの文法ファイルはここにもたいへんな功績がある
  • tree-sitter-parserがやってくれるのは、TextMateの文法ファイルの正規表現の部分の実装だけ
    • 個々のトークンに名前を割り当ててscopeも割り当てる、というのを逐一やっていく必要がある

forkしたTextMate文法を改善していくのが良さそうということになった。しかし大変そうではある……

Semantic Tokensだと設定で無効化できるけど、Grammerだと無効化するには拡張ごと無効化するしかない。