物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

VScode: 独自の syntax highlighter 拡張機能を作る

シンタックス(構文) ハイライター用の拡張機能(Extension)を作る。拡張機能として公開することは目指さない。

インストールしていない場合は以下をインストールする。

VS Codeの雛形インストール

npm install -g yo generator-code
yo code

色々聞かれる。今回はLISE++ファイル(*.lpp)を読む拡張機能を作るので以下の設定とした。

 New Language Support を選ぶ
URL or file to import, or none for new: → `Enter`
What's the name of your extension? → `LISE-Reader`
What's the identifier of your extension? → `Enter`
What's the description of your extension? → `Enter`
 Language id: → `lise`
Language name: →`LISE`
File extensions: → `.lpp`
Scope names: → `lise-file.lpp`
Initialize a git repository? → Y
Open with code を選択

lise.tmLanguage.json を見ると

{
    "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
    "name": "LISE",
    "patterns": [
        {
            "include": "#keywords"
        },
        {
            "include": "#strings"
        }
    ],
    "repository": {
        "keywords": {
            "patterns": [{
                "name": "keyword.control.lise",
                "match": "\\b(if|while|for|return)\\b"
            }]
        },
        "strings": {
            "name": "string.quoted.double.lise",
            "begin": "\"",
            "end": "\"",
            "patterns": [
                {
                    "name": "constant.character.escape.lise",
                    "match": "\\\\."
                }
            ]
        }
    },
    "scopeName": "lise-file.lpp"
}

これが意味するところは、

  • if while for return が完全一致でキーワードに
  • " で囲まれた文字は文字列扱いに。その中で \ 直後の1文字はエスケープ文字

である。実際に試してみよう。F5 でデバッグ開始すると、新しいvscode のウィンドウが立ち上がる。右下の言語モードの選択から LISE(lise) を選べるようになる。

確かにハイライトが機能しているようだ。

ここまでは簡単だが、各自の言語の構文を一つ一つ実装していく必要がある。

LISE++ファイルの構文を実装してみたので、気になる人はGIthub のリポジトリを参考にしてほしい。

github.com

拡張機能として公開したい人はこのブログを参照されたし。

qiita.com