やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

Unity 2020.2時点のRoslyn Analyzerサポート状況まとめ

Unity 2020.2でRoslynアナライザによる静的解析が動作するようになりました。しかし、まだ色々と制限があるようなので現時点のサポート状況を検証してまとめてみました。

検証に使用したプロジェクト も公開していますので、認識違い等あれば教えていただると嬉しいです。

アナライザのスコープ/ .csprojへの反映

Unity 2020.2+ JetBrains Rider Editor v2.0.6+ Visual Studio Code Editor v1.2.0+ Code Editor Package for Visual Studio v2.0.7
asmdefのReferenceを反映 *1 *2 *3 *4
Packages下のDLLs (Embedded package) *5
Packages下のDLLs (Local package, UPM registry, Git URL) *6 *7

Unity 2020.2+ 列は、Unity Editor GUIで診断実行する際のアナライザのスコープ(適用範囲)について。

その他は、Assets | Open C# Project でIDEを開くときに生成される.csprojへの反映状況です。 JetBrains Rider Editorはv2.0.6で、Visual Studio Code Editorはv1.2.0で、Unityエディタ向けに設定されたRoslynアナライザのDLLがあると.csprojに <Analyzer> ノードが追加されるようになっています。

Unityエディタ (GUI) / IDEでの診断実行

Unity 2020.2+ JetBrains Rider 2021.1 VSCode VS 2019
診断実行 *8
重要度設定(Rulesets) *9 *10
重要度設定(IDE独自) - *11
診断の抑止(シンボル単位) *12
診断の抑止(行単位)*13 *14

空欄は未検証です

CLIでの診断実行

Unity 2020.2+ Batch mode build JetBrains ReSharper CLT 2021.1 (inspectcode) dotnet build Standalone Analyzer
診断実行 *15 *16
重要度設定(Rulesets) *17 -
重要度設定(IDE独自) - -
診断の抑止(シンボル単位) -
診断の抑止(行単位) -

空欄は未検証です

所感

もうなにも信じられない

参考

docs.unity3d.com

forum.unity.com

github.com

docs.microsoft.com

docs.microsoft.com

*1:https://docs.unity3d.com/2020.2/Documentation/Manual/roslyn-analyzers.html のAnalyzer scopeセクション参照

*2:asmdefの依存関係に関わらず、全てのアナライザが全ての.csprojに設定される

*3:asmdefの依存関係に関わらず、全てのアナライザが全ての.csprojに設定される

*4:代わりに /Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/MonoDevelop.Unity/Analyzers/Microsoft.Unity.Analyzers.dll が追加される

*5:https://docs.unity3d.com/2020.2/Documentation/Manual/roslyn-analyzers.html に記述のある、Plugin Inspectorでラベルの設定がPackages下のDLLでは表示されない。右は、Assets下でラベル設定した後にPackages下に移動したアナライザの振る舞い

*6:.csprojにAnalyzerノードは追加されるが、パスがUnityエディタ上のPackages下を指すためDLLの実体が無く無効

*7:.csprojにAnalyzerノードは追加されるが、パスがUnityエディタ上のPackages下を指すためDLLの実体が無く無効

*8:ただし診断は当該ファイルのコンパイルもしくはReimportの契機でのみ実行される → Unity 2020.3.4で通常のコンパイルステップで動作するように修正された

*9:ただし変更を反映するにはReimportが必要 → Unity 2021.1でRuleset適用タイミングを早める修正が入っており、この問題も解消

*10:https://blog.jetbrains.com/dotnet/2018/09/24/roslyn-analyzer-rulesets-stylecop-json-support-rider-2018-2/ によるとインポートできるはずなんですが

*11:Preferences...で設定して.sln.DotSettingsに保存、もしくは、.editorconfigに設定

*12:SuppressMessageアトリビュート

*13:#pragma warning disable/restoreディレクティブ

*14:Rider 2021.1以前ではクイックフィックス候補に(Riderのインスペクションを抑止する) // ReSharper disableコメントが出るが、Roslynアナライザの診断結果には無効。Rider 2021.2 EAP1以降では Disable with #pragma が選択可能になった

*15:ビルドログに出るのでパースが必要

*16:https://youtrack.jetbrains.com/issue/RSRP-480257 voteしましょう

*17:Unity 2021.1でRuleset適用タイミングを早める修正が入ったことで解消