Chapter 01

はじめに

takl
takl
2020.12.22に更新

プログラミング言語を自作すると「やっぱりコード補完とかタグジャンプとか欲しいよね」ということになります。そこでエディタの拡張を書こうとするのですが、キーをフックするコードを書いたりとかメニューを開くコードを書いたりとか、やらなければならないことが多く、これはこれで大変です。

ここで Language Server Protocol というものがあります。これはエディタと言語処理系との間のプロトコルで、「コード補完の情報をくれ」とか「タグジャンプの情報をくれ」とかその手のメッセージが定義されています。これに従った言語処理系を作ってやると、対応のエディタでいい感じにコード補完とかタグジャンプとかができるようになるのです。

が、 Language Server Protocol をサポートした言語処理系を作るのも結構大変です。仕様書を読み解くのも難しいですし、処理系を作るのにもコツが必要だったりします。やっぱり小さい実装を一通り作ってみたいですよね。

というわけで Language Server の機能を持った俺々ミニ言語処理系を作ってみよう、というのが本書の主題になります。

環境としては VSCode と JavaScript(node.js) でいきます。「Language Server Protocol ってエディタ非依存じゃなかったの?」と思われる方も居られるかもしれませんが、結局エディタ依存の色々は出てきてしまうので、簡単のためにエディタは決め打ちしたい所存です。VSCode を選んだ理由としては、言語処理系と拡張を両方 JavaScript にできるので、前提知識を減らせるんじゃないかなと思ったからです。

完成品はここから取得できます。git clone して npm install して VSCode で開いてから F5 を押し、test.ore を開くという手順で動かせます。

こんな感じで動きます。