Cake Intellisense in Visual Studio Code

2017/11/8にやっとCakeでIntellisenseが効くようになりました!公式ブログ記事を簡単に邦訳しましたので、以下に記載します。

Intellisense

もしかしたらもう気づいたかもしれませんが、CakeチームはVisual Studio CodeでCakeファイルを編集中にIntellisenseが効くよう開発をおこなってきました。今日、OmniSharpが私たちのプルリクエスト(#932および#1681)をmergeし、Cakeのサポートを含むC# extension for Visual Studio Codeのv1.13.0がリリースされたことをアナウンスすることができ、大変嬉しく思います。これに加え、私たちはbakeryという新しいツールをリリースしました。これはスクリプト解析/コード生成ツールエンジンであり、CakeのIntellisenseを可能にしています。bakeryのより詳細な情報や、バックグラウンドで何が起こっているのかについては、後日ブログで紹介します。

How

どうやってIntellisenseを有効化するのでしょうか?それでは以下の手順に従ってください(Visual Studio Codeは既にインストール済みであると仮定します)。

  1. Visual Studio Codeを起動し、Cakeファイルの存在するフォルダへ移動します。
  2. C# for Visual Studio Codeのv1.13.0がインストールされていることを確認します。
  3. Visual Studio Code Extension for Cakeのv0.10.1がインストールされていることを確認します。
  4. Caketoolsフォルダにインストールされていることを確認します。addinが2回インストールされることを避けるため、v0.22.0以降を推奨します。最も簡単な方法は、.\build.ps1を実行することです。
  5. Bakerytoolsフォルダにインストールされていることを確認します。最も簡単な方法は、Visual Studio Code Extension for CakeのInstall intellisense supportコマンドを実行することです。コマンドパレットを開いて「cake」と入力し、当該オプションを選択してください。
  6. ここで、Visual Studio Code上で当該フォルダを閉じ、再び開く必要があります。
  7. Success! f:id:Intestine:20171112230349p:plain

Troubleshooting

Q: 上記手順を実行しましたが、Intellisenseが有効になりません。

C# Extension for Visual Studio Codeは、全ての*.slnファイルを検知し、omnisharp起動時にそのディレクトリを対象とします。もし*.cakeファイルが異なる階層に配置されていた場合、project selectorCakeプロジェクトを選択する必要があります。

Q: Cakeプロジェクトを選択しましたが、Intellisenseが有効になりません。

OmniSharp Logにエラーや警告が表示されていないかどうか確認してください。

[warn]: OmniSharp.Cake.CakeProjectSystem
    Cake script service not connected. Aborting.

上記のログは、Cake.Bakerytoolsフォルダにインストールされていないことを示しています。それに対して、以下のログは大抵の場合、Caketoolsフォルダにインストールされていないことを示しています(よりよいエラーメッセージに向けて修正中です)。

[fail]: OmniSharp.Cake.CakeProjectSystem
    c:\Users\mb\src\gh\bakery\setup.cake will be ignored due to an following error
    System.TypeLoadException: A null or zero length string does not represent a valid Type.

Q: エラーメッセージは表示されていませんが、それでもIntellisenseが有効になりません。

OmniSharp Logを表示し、Cakeに関係する箇所を探してください。もし適切にセットアップされていれば、少なくとも以下のようなログが表示されているはずです。

[info]: OmniSharp.Cake.CakeProjectSystem
    Detecting Cake files in 'c:\Users\mb\src\gh\bakery'.
[info]: OmniSharp.Cake.CakeProjectSystem
    Found 29 Cake files.

表示されていない場合、C#拡張機能v1.13.0のインストール時に問題が発生した可能性があります。拡張機能を一度アンインストールし、その後再度インストールしてみてください。その後、Windowsの場合は%userprofile%\.vscode\extensions\ms-vscode.csharp-1.13.0\.omnisharp\LinuxないしmacOSの場合は~/.vscode/extensions/ms-vscode.csharp-1.13.0/.omnisharp/を開き、OmniSharp.Cake.dllが存在することを確認してください。

Q: Intellisenseが有効になりましたが、その後追加したファイルが表示されません。

これはomnisharpの既知の問題であり、*.csxでも同様です。omnisharpチームとともに今後のリリースで改善されるよう取り組んでいます。

Q: Cake.CoreCLRtoolsフォルダにインストールされていればそれで充分でしょうか。

いいえ、現時点ではCake.CoreCLRではIntellisenseが有効になりません。

Q: 上記全てを試しましたが、まだIntellisenseが有効になりません。

Github上でbakeryリポジトリにissueを立てるか、Gitterで私たちにコンタクトをとってみてください。