C# 6でコンパイラープラットフォームとしてRoslynが導入され、コンパイラー拡張を作れるようになりました。今回は.NET Core on Linuxでこれが利用できるか試すことにしました。
Code RefactoringはVSIXであり、Visual Studioなしでは動きません。Diagnostic with Code Fix をNugetパッケージとして生成し、.NET Core on Linuxで動作するか確認してみます。
visualstudiogallery.msdn.microsoft.com
このコンパイラープラットフォーム拡張のSDKもVisual Studio拡張としての提供なので、現状はWindows上のVisual StudioでAnalyzerを作って、Nugetライブラリとして配布し、.NET Core on Linuxで参照する、というのが一番手軽そうです。とはいえ、Code Refactoring自体はPortableライブラリプロジェクトなので、これを.NET Core on Linuxで開発することも現実にはできそうな気がします*1。
今回は、Roslyn SDKを入れると利用できる、Analyzerのテンプレートプロジェクトを何もいじらずに使います。クラス名をすべて大文字にするように警告する、トンデモAnalyzerです。
これをビルドするとnupkgファイルができるので、.NET Coreから参照できるようにしておきます。一番簡単なのは、.NET Core on Linuxを動かすマシンからアクセスできるファイルシステム上に直置きする方法かと思います。
$ ls /doc/nupkgs/
Analyzer3.1.0.5984.628.nupkg
ファイルシステムをNugetリポジトリとして参照するように Nuget.config を記述します。ちなみに前回紹介したaspnet generatorを使うとテンプレを生成できます。
$ yo aspnet:nuget You called the aspnet subgenerator with the arg _nuget.config NuGet.config created. create NuGet.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" /> <add key="local" value="/doc/nupkgs"> </packageSources> </configuration>
そして、project.json にAnalyzerを追加します。
{ "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0-rc2-3002702" }, "Analyzer3": "*" }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" } } }
これでAnalyzerは追加できましたが、残念ながら現状ではVisual Studio CodeからCodeFixはIntellisenseの候補に表示されません。ビルドすると警告やエラーとして表示されます。
$ dotnet build Project analyzer (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing Compiling analyzer for .NETCoreApp,Version=v1.0 /doc/tanaka733/tanaka733/Documents/analyzer/Program.cs(5,18): warning Analyzer3: Type name 'Program' contains lowercase letters Compilation succeeded. 1 Warning(s) 0 Error(s) Time elapsed 00:00:32.4694799
IDE統合されていないのがつらいですが、Issueとして提案されているので、実装を期待したいところです。
ちなみにこのIssue Omnisharp-vscode リポジトリですが、.NET Core on Linux で開発するにあたって、複数の組織、リポジトリが提供しているツールを組み合わせています。
- .NET Coreのコンパイラおよび拡張のためのSDKはRoslyn
- Visual Studio Code
- Visual Studio Code上でのC#デバッグやIntellisenseなどは Omnisharp提供。Yemonによるコードテンプレート生成もOmnisharp。
*1:未確認