Visual Studio Code向け「プロデル」用拡張機能を大幅アップデートしました
- 定義の検索や変数名の変更などプロデルデザイナと同等の機能が利用できます
- SemanticTokens対応になりレベルの高いシンタックスハイライトが可能です
- ワークスペースに対応し、プロジェクトモードと同等の使い方が可能です
- プロデルデザイナのプログラムが消える問題などの経緯の話
https://marketplace.visualstudio.com/items?itemName=utopiat.produirelang
概要
日本語プログラミング言語「プロデル」に対応したVisual Studio Code向け拡張機能を公開しています。この拡張機能はLSP(Language Server Protocol)対応の言語サーバとなっており、エディタ内でプロデルプログラムを解析し、その抽象構文木から様々な開発支援を提供します。
主要な機能の解説は、次の公式ブログに記載しています。
https://produ.irelang.jp/blog/2024/09/4786/
主な機能
- シンタックスハイライト
- シンボルのアウトラインと検索
- 名前の変更
- ワークスペースでの横断検索
シンボルのアウトラインと検索
プロデルのプログラムで定義した内容を、Visual Studio Codeの各種機能で参照できます。プロデルの解析器(パーサ)から得られた抽象構文木(AST)を使うため正確で詳しい情報を確認できます。
「アウトライン」ペインにはプログラム中に宣言された種類と手順、変数が一覧で表示されます。

コマンドバーで「@」を指定すると、選択しているファイルのプログラムのシンボルを横断検索できます。

名前の変更
変数名などの識別子の名称を変更できます。名前を変更する識別子に関連する箇所を正確に置き換えられます。


ワークスペースでの横断検索
0.2.0よりワークスペースに対応しました。
プロデルデザイナのプロジェクトモードのような複数ファイルによる開発が可能です。大規模なプログラムの作成にも活用できます。
コマンドバーで「#」を指定すると、ワークスペース内や開いているファイル・フォルダのプログラムのシンボルを横断検索できます。

シンタックスハイライト
SemanticTokensに対応しています。変数や種類、定数が色分けされて表示されます。

未対応の機能
- コードレンズ
- デバッガ
- ウィンドウの設計
- 入力補完 (検討中)
入力補完機能については、Visual Studio Codeの仕様や、かな漢字入力との兼ね合いを考慮する必要があり、今回は簡易的に実装しました。またIMEオフの時でも一部字句をローマ字で入力補完ができます。入力補完機能については模索段階です。
プロデルデザイナにあるようなウィンドウの設計画面については、Visual Studio Codeではプロデルデザイナと同等のGUI環境が提供できないため、未対応です。
消えるプログラムとの戦い
ここからは余談です。
昔からのプロデルユーザは、プロデルデザイナでプログラムを入力していると「プログラムが消える」という現象に遭遇されていたかと思います。この現象でご不便・ご迷惑をおかけして本当に申し訳ありませんでした。
Visual Studio Code向けプロデル用拡張機能の開発動機は、このプログラムが消える現象を根本的に解決したかったためです。
プロデルは、日本語プログラミング言語であるため、分かち書きされないプログラムです。プロデルのプログラムに色分けがあるだけでプログラムの可読性が格段に良くなります。そこでプロデルデザイナでは、プログラムを構文解析した抽象構文木から色付きの書式付きテキストを生成することで、シンタックスハイライトを実現していました。しかしこの方法が仇となり、入力途中のプログラムなどで抽象構文木の生成に失敗すると、プログラムが消えてしまうという現象が起きていました。
現在のプロデルデザイナでは、プログラムが消えるという最悪の現象は完全に解消しましたが、それ以外の点でも、言語処理系を作ることに加えて、安定した開発環境を作ることはかなりの労力で、Visual Studio Codeのような安定したエディタが使えるのであれば活用したいと思っていました。
ミニコラム – プロデルとVSCode
Visual Studio Code向けプロデル用拡張機能は、5年ほど前から公開しており、当時からプロデルデザイナ同等のアウトライン表示や、名前の変更、定義の参照などの便利に使える機能を用意していました。しかし積極的なPRをしなかったこともあり、コアなプロデルユーザ以外からは、全く反応がありませんでした。
当時PRに消極的なだった理由は、プログラムに色を付けるシンタックスハイライトを実装できなかったことです。日本語プログラミング言語の文法は、空白や記号で、分かち書きをしないという言語仕様により、文法を正規表現(やLexerの構文)に完全に落とし込めないという問題があります。特にプロデルでは、助詞を自由に決めることができ、助詞となる文字を含んだ変数名を付けることができる比較的自由な言語仕様です。そのため色付けに必要なプロデルの文法を、拡張機能で多様されるTextMate grammarsで表現できません。
その後、VSCode(LSP仕様)のアップデートで、SemanticTokensがサポートされました。これは、ソース上の字句に意味も付与することで色付けをする仕組みです。これを利用すると、構文解析した抽象構文木(AST)から、どの箇所がどの意味の字句かを指定することができます。特にプロデルには、待望の機能です。そして今年のアップデートでプロデル拡張機能でもSemanticTokens機能に対応しました。
フィードバックについて
プロデルは、コミュニティが小さいので、バグフィックスが活発ではありません。バグなどお気づきの際は、具体的で建設的なフィードバックをお願いします。できる範囲で対応します。
またプロデルは、コンパイラ・開発環境・ドキュメント・ブログ記事をすべてワンオペで作業しています。一般のプログラミング言語で当たり前にあるような完成度の高い機能やドキュメントを提供するまでには至っておりませんので、ご利用はセルフサービスの精神でお願いいたします。
まとめ
本拡張機能は、今後も継続的にアップデートする予定です。一方でプロデルデザイナも、Visual Studio Codeほどの強力な開発環境には敵いませんが、とても便利なエディタです。プロデルユーザさんの使い道に合った開発環境を選んで、プロデルをご活用ください。