Day8 .editorconfig

19890 ワード

1. .editorconfig?


異なるエディタを使用するか、プロジェクト内で同じコードスタイルを維持するために使用するコードフォーマットを指定するドキュメント.
(Eslint、Prettierと同様)
(Visual Studioは独自の.editorconfigファイル形式をサポートしています.)
ソリューション右クリック>追加(D)>新規(N)

editorconfigファイル(.NET)をクリック

このようなファイルは、2つの方法で表示できます.
  • Default
  • Code
  • F 7を押してコードスタイルに切り替えます.

    2. .editorconfigコンテンツ


    「無効化」、「推奨」、「警告」、「エラー」の4種類があり、「無効化」または「エラー」が推奨されます.
    (「警告」の場合、積み上げすぎると、後で本当に必要な警告が見えなくなる可能性があります)
    (また、「警告」はすぐに修復するのではなく、強く後ろに押す感じ)

    1)フォーマット

  • スペースプリファレンス
    スペースをどこに設定しますか?
    ex)「for」文のセミコロンの後にスペースを挿入し、括弧内にスペースを挿入する
  • プリファレンスパッケージ
    同じ行に保持する内容
    ex)ブロックを1行に保持する
  • インデントプリファレンス
    書くかどうか.
    ex)ブロック内容のインデント、case内容のインデント
  • インデントと間隔
    インデント間隔
    ex)インデントサイズ、タブキーを使用しないインデント
  • 新しい行プリファレンス
    Enterまたは特定の文の改行を設定します.
    ex)「else」を新しい行に、青い大きいサイズの左かっこを新しい行に
  • 2)コードスタイル

  • 「使用」コマンド・プリファレンス
    使用するソート順の設定
    ex) System.* 柳を先に置くか混ぜて置くか
  • Nullチェックプリファレンス
    Null exceptionの表示方法の設定
    ex)
  • // csharp_style_throw_expression = true
    this.s = s ?? throw new ArgumentNullException(nameof(s));
    
    // csharp_style_throw_expression = false
    if (s == null) { throw new ArgumentNullException(nameof(s)); }
    this.s = s;
    
    // csharp_style_conditional_delegate_call = true
    func?.Invoke(args);
    
    // csharp_style_conditional_delegate_call = false
    if (func != null) { func(args); }
  • this. とMe.プリファレンス
    this or Meを使用するかどうか
    フィールド、property、event、methodで使用するかどうかを確認します.
  • varプリファレンス
    varを使用するか、明示的なデータを使用するか
    ex)変数、クラス宣言時
  • かっこプリファレンス
    各演算子の優先度をかっこで表すかどうか
    例文と「算数、関係、その他の異項」、翻訳メモリ
  • パラメータプリファレンス
    未使用の変数を使用するかどうか
  • 式本文メンバー
    式の本文とブロックの本文を別々に使用します
    ex)メソッド、コンストラクション関数、演算子、ramdaなど
  • // csharp_style_expression_bodied_methods = true
    public int GetAge() => this.Age;
    
    // csharp_style_expression_bodied_methods = false
    public int GetAge() { return this.Age; }
  • レベルプリファレンス
    各種フォーマット(数が多く、設定時に表示する必要があります)
    ex)ram多項式、インデックス演算子の使用など
  • // Code with violations
    var n1 = typeof(T).Name;
    var n2 = typeof(int).Name;
    
    // Fixed code
    var n1 = nameof(T);
    var n2 = nameof(Int32);
    
    // csharp_style_pattern_local_over_anonymous_function = true
    int fibonacci(int n)
    {
        return n <= 1 ? 1 : fibonacci(n-1) + fibonacci(n-2);
    }
    
    // csharp_style_pattern_local_over_anonymous_function = false
    Func<int, int> fibonacci = null;
    fibonacci = (int n) =>
    {
        return n <= 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
    };
    
    // csharp_style_implicit_object_creation_when_type_is_apparent = true
    C c = new();
    C c2 = new() { Field = 0 };
    
    // csharp_style_implicit_object_creation_when_type_is_apparent = false
    C c = new C();
    C c2 = new C() { Field = 0 };
    
    // csharp_style_prefer_index_operator = true
    string[] names = { "Archimedes", "Pythagoras", "Euclid" };
    var index = names[^1];
    
    // csharp_style_prefer_index_operator = false
    string[] names = { "Archimedes", "Pythagoras", "Euclid" };
    var index = names[names.Length - 1];
  • 言語キーワードとBCL形式プリファレンス
    言語キーを使用するか、フォーマット名を使用するか
    ex)
  • // dotnet_style_predefined_type_for_locals_parameters_members = true
    private int _member;
    
    // dotnet_style_predefined_type_for_locals_parameters_members = false
    private Int32 _member;
  • コードブロックプリファレンス
    コードブロックを簡略化するかどうか
    ex)
  • // csharp_prefer_simple_using_statement = true
    using var a = b;
    
    // csharp_prefer_simple_using_statement = false
    using (var a = b) { }
  • モード照合プリファレンス
    スイッチ式かドアを使用して、モードをマッチングする方法
    ex)
  • // csharp_style_prefer_not_pattern = true
    var y = o is not C c;
    
    // csharp_style_prefer_not_pattern = false
    var y = !(o is C c);
    
    // csharp_style_prefer_switch_expression = true
    return x switch
    {
        1 => 1 * 1,
        2 => 2 * 2,
        _ => 0,
    };
    
    // csharp_style_prefer_switch_expression = false
    switch (x)
    {
        case 1:
            return 1 * 1;
        case 2:
            return 2 * 2;
        default:
            return 0;
    }
  • フィールドプリファレンス
    readonlyを使用するかどうか
    ex)
  • // dotnet_style_readonly_field = true
    class MyClass
    {
        private readonly int _daysInYear = 365;
    }
  • 修飾子プリファレンス
    ローカル関数を静的に分類するかどうか
    ex)
  • // csharp_prefer_static_local_function = true
    void M()
    {
        Hello();
        static void Hello()
        {
            Console.WriteLine("Hello");
        }
    }
    
    // csharp_prefer_static_local_function = false
    void M()
    {
        Hello();
        void Hello()
        {
            Console.WriteLine("Hello");
        }
    }

    3)分析器


    アナライザはC#またはVisual Basicコードをチェックすることで、コードの品質とスタイルの問題を確認します.NET 5.0開始NET SDKに含め、別途インストールする必要はありません.プロジェクト.デフォルトでは、NET 5以降がコード分析です.プロジェクト.NET Core, .NET標準または.NET Frameworkのような他のNET実装では、コード解析を使用するには、EnableNETAアナライザのプロパティを手動でtrueに設定する必要があります.
    もし...NET 5以上のSDKに移動しないか、SDKスタイルではありません.Microsoftは、NET Frameworkプロジェクトを使用するか、NuGetパッケージベースのモデルを好む場合に使用します.CodeAnalysis.NetAnalyzer NuGetパッケージにもアナライザが用意されています.パッケージベースのモデルを使用して、オンデマンドバージョンの更新を推奨します.