タイトル通りです。ニッチです。
目次
- 使い方はこの記事には載ってません
- 参考にしてるページなど
Kuin
対応でやったこと、やれていないこと- 感想とか
1. 使い方はこの記事には載ってません
タイトルで言っている、プログラミング言語Kuin用のVisual Studio拡張「KuinStudio
」はVS2017向けに公開しています。
成果物としての説明は本記事ではなくGitHubを参照してください。
以下では使い方ではなく、VS拡張を作った流れをかなり雑にメモしています。
2. 参考にしたページなど
「VS拡張で新言語サポートするには」というネタ自体は割とあります。 日本語でも普通に記事が見つかります。
- Creating Project Types
- (途中)Visual Studio SDKで新しい言語をサポートするためのメモ
- Visual Studio の拡張機能を作成する - カスタムプロジェクト編
詳細は参考元にありますが、要は「Python Tools for Visual Studioなどに基本的な実装が入ってるからそれ持ってこい」というコンセプトです。1
なお上記の記事群に沿って色々作っている過程で、
未実装のgetter
プロパティが呼ばれてNotImplementedException
で
怒られることがちょいちょいありますが、
適当に0
とかnull
とか返すようにすれば(Visual Studio側がロバストな為か)
意外とどうにかなります。考えても分からないときはノリに頼りましょう。
また、実装上の参考としては記事だけでなくて、
VSのExtensibility
テンプレートも当然見ます。
コマンドについてはCustom Command
、
シンタックスハイライトはEditor Classifier
のテンプレートが参考になります。
最小限必要なGUID
とかクラス属性が分かるので、けっこう大事です。
実際には、手元ではVSのインスタンスを4つ立ち上げて キョロキョロしながらコードをいじってました。
- 本体:
KuinStudio
の開発用VS - デバッグ: 本体をデバッグ実行して立ち上げたVS
- 参考1:
PTVS
のコード閲覧用のVS - 参考2: 新規の
VSIX
プロジェクトにExtensibility
の項目を追加した状態のVS
3. Kuin
対応でやったこと、やれていないこと
実際に作った機能は以下の4つです。
- 新しい言語の
Project Type
を定義 - 作った
Project Type
のプロジェクトテンプレートとアイテムテンプレートを作成 - シンタックスハイライト機能を提供
- ビルド/実行コマンドを(カスタムコマンドとして)追加
上記の4機能を実装したことで、 以下のユーザーストーリーが通せるようになりました。
- 新しく
Kuin
言語用のプロジェクトを作成し、 - 必要ならコードのファイルを新規追加して、
- シンタックスハイライトされたエディタで編集し、
- 実行環境の設定(
Kuin
の場合だとCUI/GUIの切り替えとか)をしたうえで、 - ショートカットキー or メニューバーのボタンからビルドして動かせる
軽量言語のVS拡張として最低ラインはクリアしてると思います。
逆に、以下のことはやれていません。 出来ていないなりに、簡単そうなものから順に書いていきます。
- ビルドエラーの該当箇所表示
- インテリセンス機能
- カスタムコマンドっぽくない、通常方式の(
F6
とかで出来る)ビルド - ソリューションに複数プロジェクトがある場合の対応(メリット薄いわりに面倒)
インテリセンスはパーサ書くのが大変そうで、 他はビルド周りを真剣にやらないとなので大変、という感じです。
なお、実際には上記以外にも「ツール>オプション」を開いた時の 設定画面など、細かい点でも小技をやってます。 これについてはClaudiaIDEなどを参考にしてください。
4. 感想とか
今回のKuinStudio
ですが、当初はシンタックスハイライトだけ作り、
「見た目がキレイ!」で終わりにするつもりでした。
これだけなら独立の機能として簡単に作れるからです。
しかし実際に動かしてみると「プロジェクトまで整備しないとキリが悪い」 という事実が発覚してしまい、もう少し粘ったという次第です。
なので、平たく言えば「思ったより面倒だなコイツ!」が感想です。 適当な所で切り上げるタイミングがつかみづらく、けっこう疲れました。 作成時間も社畜ちゃんIDEの時に比べ、だいぶかかってます2。
ただ、VS拡張の作り方に加えて「パーサーもどきをサクッと作るには?」 といった話題にも触れられ、個人的な勉強としてはタメになりました。 皆さんも是非、大した理由もなく新言語をVSでサポートしていきましょう。
また、別方向の学びとしてKuin
言語が扱うような
「単一あるいは数個のソース」というプロジェクト規模では、
VS
拡張によるサポートは「やりすぎ」、というのも体感で分かりました。
…「やる前に分かれよ」という気もしますが。
まあ、どうせ勉強目的でやっている側面が強い活動なので、 このままインテリセンスのサポートくらいまでは頑張ろうと思います。 もうちょっとだけ続報があるかもしれませんが、今回は以上です。