Roslyn Analyzers:習慣と生息地

先日、私はある同志に、Roslynアナライザーとは何か、そしてそれらを書く方法を説明していました。 答えは膨大で、別の出版物に掲載することにしました。



Roslynアナライザーとは何ですか? 要するに-これは、Resharperovskihのようなリファクタリングを書くのに最適な方法です。 レビュープロセスで常に同じエラーが表示されますか? フィクサーを使用してアナライザーを作成し、このエラーを忘れます。 技術的な側面は非常に簡単です。この記事 、このビデオ 、この一連の投稿 、およびこのチュートリアルは 、最初の知り合いに最適です。 私が個人的に困難を引き起こし瞬間のすくいを説明しようとします。



1つ目はSyntax Vizualizerです。 アナライザーには、構文ツリーの解析が含まれています。 典型的なタスクはノードを持つことで、タイプが「クラス宣言」の祖先を見つけるか、「文字列リテラルが使用されているメソッド宣言のすべてのノードを見つける」必要があります。 構文ツリーには10レベルのネストを含めることができ、その分析のために視覚化を手に入れたいと思います。 2つの一般的なツール:Syntax VizualizerとLINQPad。 最初はデフォルトで行われ、各ノードの大量の技術情報を提供し、コンピューターの速度が大幅に低下します。 さらに、アナライザーコードを入力すると、Syntax Vizualizerが直接印刷されたコードの視覚化を開始するため、混乱が生じます。 LINQPadが提供する情報は少し少なくなりますが、より美しく視覚的であるため、お勧めします。



次のポイントはテストです。 それらなしではどこにもありません。 実際、2つのテストオプションがあります。 最初:アナライザーを記述し、2番目のスタジオインスタンスを開き、そこに記述されたアナライザーでプロジェクトを作成し、最初のスタジオから2番目のプロセス(接続プロセス)に接続し、デバッグを開始します。 正しいテストオプション:テストクラスを開き、アナライザーで強調表示する必要があるコードを記述し、テストをチェックし続けます。



Test Firstアプローチもお勧めします。 まず、間違ったコードを記述し、アナライザーを実装します。 アナライザーの準備ができたら、修正テストを作成し、初期状態から修正済み状態に切り替える方法について考え、修正を作成します。 具体的には、アナライザーの場合、このような段階的なアプローチはうまくいきます。



防衛的なプログラミングを聞いたことはありますか? NREによって落ちたアナライザーは、スタジオが再起動するまで動作しなくなる可能性があるため、アナライザーでは、考えられるすべての場所にそれを押し出します。



ほとんどのアナライザーは不必要に損なわれていることに注意してください。 アナライザーについて初めて聞いたとき-自分でアナライザーを作成したかった。 アイデアは絶え間なく発生しましたが、実装は複雑すぎる/コストがかかりました。 最初の戦闘アナライザーは、Roslynに会ってからわずか6か月後に書かれました。 次-3か月後。 小さなプロジェクト(チームの2人)で作業する場合、テクノロジーは特に有用ではありません-タスク\テクノロジーは典型的であり、合理的なものはすべてR#またはVSですでにカバーされていると思います。



新しいプロジェクト(チームの6人)に切り替えた後、分析に適した3つの場所がすぐに見つかりました。 2人はチームによって不必要として拒否されました。 道徳:同僚と相談してください。彼らはあなたがなぜ馬鹿アナライザーを必要とせず、無駄な仕事に時間を費やす必要がないのか喜んで説明します 。 ところで、私の同僚は私の最もプロフェッショナルな顧客であることが判明しました-すべてが指で、例とともに明確に説明されています。



マネージャーは、数字を要求することがあります。いくら使うか、何を得るかです。 ここでは、評価は非常に簡単です。ターンキーアナライザーの開発には2日かかります(テスト\統合\インフラストラクチャを使用)。 PVS-Studioの開発者は、1つのアナライザーに2週間を費やすことができると述べましたが信じられませんが、彼らはアナライザーを販売しています。 内部プロジェクトでアナライザーを使用している場合(そして、少なくともトレーニング用にアナライザーを作成することは既に可能です)-2日で十分です。 利益の見積もりはより困難です。 些細なケースは、コードレビューで定期的に表示されるエラーです。誰かがカーネルでLINQを使用し、誰かが形式を指定せずに日付をシリアル化します。 したがって、利益はエラー率×固定価格×年とみなされます。



もっと独創的な場合があります。 たとえば、多数の銀行からのデータを集約するサービスがあります。 各銀行には、価格を比較/丸めるための独自のルールがあり、各銀行には10進数のカスタムを持つ独自の価格クラスがあります。 開発者がprodタイプ比較にデプロイするとすぐに



return localBankPrice == centralBankPrice;
      
      





マネージャーは金庫からVaselineの2つの瓶を取り出します。 したがって、Roslynはワセリンに対するアレルギーの最悪の薬ではありません。



原則として、アナライザーはさらにいくつかの状況で役立ちます。 些細な-販売製品。 書くことでより多くの問題がありますが、(可能性のある)利益もより密です。 産業開発について学びたい場合は、 pavsenin \ Irina_DevExpress (DevExpress)およびAndrey2008 (PVS-Studio)を呼び出します。



少しささいなケースは、アナライザーに独自のライブラリが付属していることです。これは、誤用に対する一種の保護です。



eugenebbのような特別な プラグイン マジックを 作成する仲間がまだいますが、それはまったく別の話です。



要約すると、アナライザーは非常に興味深いものです。特に、高い期待が持てない場合はそうです。 おもしろいことをゆっくりと勉強するために何十もの無料の夜があるなら、ロズリンを突いてください。



All Articles