Delphi LSP を Visual Studio Code から使う

# はじめに
2021/09/10 に **Delphi 11.0 Alexandria** がリリースされました。Delphi 11.0 では **Visual Studio Code** との LSP (Language Server Protocol) による連携が可能となっているので、これを試してみる事にしました。

何ができるようになるかと言えば、Visual Studio Code で開いた Delphi のソースコードに対してコード補完等のコード入力支援が使えるようになります [^1]。

 - [Using DelphiLSP Code Insight with Other Editors (Docwiki: en)](https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Using_DelphiLSP_Code_Insight_with_Other_Editors)

# 導入
Visual Studio Code で **Delphi LSP** を使えるようにする手順を以下に示します。

 - [Visual Studio Code](https://code.visualstudio.com/)

## 1. LSP 設定ファイルの出力
プロジェクトフォルダに Delphi LSP の設定ファイルを出力するように設定を行います。

 1. Delphi IDE から <font color="LimeGreen">**[ツール | オプション]**</font> で**オプションダイアログ**を開き、
 2. 左側のツリーで <font color="DodgerBlue ">**[ユーザーインターフェース > エディタ > 言語]**</font> と辿ります。
 3. **言語ページ**の [言語] を `Delphi` にします。
 3. [支援機能タブ] を開きます。
 5. `LSP 設定の生成` にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4c1acc5d-c6a0-76f2-dd09-da9d2ce2d0d0.png)

## 2. Visual Studio Code に Delphi LSP 拡張機能を導入
Visual Studio Code に **Delphi LSP 拡張機能**を導入します。

 - [DelphiLSP (Visual Studio Marketplace)](https://marketplace.visualstudio.com/items?itemName=EmbarcaderoTechnologies.delphilsp)

 1. マーケットプレース (**〔Ctrl〕+〔Shift〕+〔X〕**) で `DelphiLSP` を検索し、インストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/165e5385-3e8d-ab37-b3d6-7bda7ef79c20.png)
 2. 設定 (**〔Ctrl〕+〔,〕**) に移動し、[ユーザー] タブで <font color="DodgerBlue ">**[拡張機能 > DelphiLSP]**</font> と辿ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/54d4874a-9a8e-0b7a-62c4-39548fbcebfc.png)
 3. [Executable] に **DelphiLSP.exe** へのフルパスを指定します。デフォルトのインストールパスなら `C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\DelphiLSP.exe` となります。
 4. 必要なら [Log Modes] に **255** を指定します。ログが `%temp%\DelphiLSP` に格納されるようになります。

| 設定項目 | 値 | 説明 |
|:---|:---|:---|
| Agent Count<br>[ユーザー] タブ | 2 | Server Type が **controller** の時は 2。 |
| Executable<br>[ユーザー] タブ |  | DelphiLSP.exe へのフルパス。設定しなくても動作する。 |
| Log Modes<br>[ユーザー] タブ | 0 | 255 を設定するとログを出力する。 |
| Server Type<br>[ユーザー] タブ | controller | **agent** は Code Insight のみ。**linter** は Error Insight のみ。**controller** は両方。|
| Settings File<br>[ワークスペース] タブ |   | *.delphilsp.json へのフルパス。設定しなくても動作する。  |

## 3. Delphi でプロジェクトを開く
Delphi IDE でプロジェクトを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f857ddee-1074-bb24-21de-b4b4765eb692.png)
既存のプロジェクトを開くだけでプロジェクトフォルダに JSON 形式の Delphi LSP 設定ファイルが生成されます。

## 4. Visual Studio Code でプロジェクトフォルダを開く
Visual Studio Code で <font color="LimeGreen">**[ファイル | フォルダーを開く]**</font>  (**〔Ctrl〕+〔K〕,〔O〕**) から Delphi のプロジェクトフォルダを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/11886dfc-2a99-baf7-8e28-fe1a29258843.png)
左側のファイルリストから `*.pas` や `*.dpr` を開くと DelphiLSP が有効な状態になります。

# おわりに
プロジェクトフォルダを移動またはコピーした場合には、プロジェクトフォルダ内にある `.vscode` サブフォルダを削除し、Delphi IDE でそのプロジェクトを単に開いてください。`*.delphilsp.json` が再生成されます。

私の環境 (RAD Studio 11 Alexandria Professional) ではエラーメッセージ (**Error Insight** 相当) は正しく表示されるものの、残念ながらコード補完 (**Code Insight** 相当) が正しく動作しませんでした。

```
No license found
有効なライセンスが見つかりません。Embarcadero のサポートにお問合せください。
```

この件に関してはエンバカさんに問合せ中です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/fd371e22-1578-5f8f-f388-acefe07cc711.png)
「Professional 版だから動かない」という事はないハズです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/581b42c7-4bd5-c86a-1dff-d4f34547de1d.png)
設定で **Server Type** を `linter` にすれば、頭の悪いコード補完になりますが、Error Insight は有効なのでそれなりに使えます。

**See also:**

 - [コード支援機能のリファレンス (DocWiki)](https://docwiki.embarcadero.com/RADStudio/Alexandria/ja/%E3%82%B3%E3%83%BC%E3%83%89%E6%94%AF%E6%8F%B4%E6%A9%9F%E8%83%BD%E3%81%AE%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)


## 追記 (2022/09/27):
やっとこの問題が解決しました。

問題が発生している場合には、ライセンスマネージャ (<font color="LimeGreen">**[ヘルプ | ライセンスマネージャ]**</font>) でライセンスに含まれる有効なプロダクトを調べます。以下は当方の RAD Studio Professional の情報です。

```
ライセンスの詳細:
タイトル:  RAD Studio XE8 Professional Named User Upgrade from XE4 or later 

...

このライセンスで有効になるもの:

Delphi XE8 Professional with Mobile 
Delphi 10 Seattle Professional with Mobile 
Delphi 10.1 Berlin Professional with Mobile 
Delphi 10.2 Tokyo Professional with Mobile 
Delphi 10.3 Rio Professional with Mobile 
Delphi 10.4 Sydney Professional with Mobile 
Delphi 11.0 Alexandria Professional with Mobile 
DelphiLSP
HTML5 Builder 
C++Builder XE8 Professional with Mobile 
C++Builder 10 Seattle Professional with Mobile 
C++Builder 10.1 Berlin Professional with Mobile 
C++Builder 10.2 Tokyo Professional with Mobile 
C++Builder 10.3 Rio Professional with Mobile 
C++Builder 10.4 Sydney Professional with Mobile 
C++Builder 11.0 Alexandria Professional with Mobile 
InterBase XE7 Developer IDE 
InterBase XE7 ToGo Edition 1 User 
InterBase 2017 Developer IDE 
InterBase 2017 ToGo Edition 1 User 
InterBase 2020 Developer IDE 
InterBase 2020 ToGo Edition 1 User 
RAD Studio 10 Seattle Professional 
RAD Studio 10.1 Berlin Professional 
RAD Studio 10.2 Tokyo Professional 
RAD Studio 10.3 Rio Professional 
RAD Studio 10.4 Sydney Professional 
RAD Studio 11.0 Alexandria Professional 
```

`このライセンスで有効になるもの:` の中に `DelphiLSP` が含まれない場合、件の問題が発生するようです。<font color="DodgerBlue ">**[ライセンスの操作]:**</font> でライセンスを <font color="LimeGreen">**[削除]**</font> した後に再度 <font color="LimeGreen">**[登録]**</font> を行ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/736729e9-b1a9-f50f-f30f-29e8f258c2b7.png)
この操作を行っても `このライセンスで有効になるもの:` に `DelphiLSP` が出てこない場合にはエンバカさんのサポートに本記事か [RSP-35388](https://quality.embarcadero.com/browse/RSP-35388) の URL を添えて問い合わせるとよいかと思います。

結局の所、ライセンスに混乱があるとどれだけ <font color="LimeGreen">**[削除]**</font> と <font color="LimeGreen">**[登録]**</font> を行ってもリストに `DelphiLSP` が出てこないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/516c8d81-85bf-fc99-ab1b-b108f1b9095c.png)
やっと使えるようになりました！

**See also:**

 - [インストールサポート (Embarcadero)](https://www.embarcadero.com/jp/support/install)
 - [RSP-35388 [LSP] Code Insight does not work with Visual Studio Code (Quality Central)](https://quality.embarcadero.com/browse/RSP-35388)

[^1]: Delphi IDE コードエディタのフリーカーソル移動が苦手な方が、傍らで Visual Studio Code を開いてコード編集...なんて事ができます。