エディターコンフィグにおける命名規則の設定について

# はじめに
命名規則を決めてはいるがじっさいにコーディングを行う際に抜けてしまうケースは少なくないでしょう。
そんな中警告やエラー表示でエディターが教えてくれれば間違えを防いだり、早期の発見に繋げることができます。
今回はエディターコンフィグによる命名規則の警告について紹介します。
# エディターコンフィグの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831677/ffc369e0-4196-d4cf-f66f-ade6b0165b2b.png)
VSの追加よりエディターコンフィグファイルを作成します。
今回は試しにasyncメソッドのサフィックスに「Async」をつける、「async_method_should_end_with_async」を実際に作成して行きます。
## dotnet_naming_rule
下記ルールはもとからあるインターフェースのルールと自作のルールを記載しています。
ここで重要なのは「severity」となり規則違反時の振る舞いを指定します。
「symbles」「style」に関しましては後程でてくるので名前を決めただけと思ってもらえればいいです。
~~~
# 名前付けルール
# 元からあるインターフェースのルール
dotnet_naming_rule.interface_should_be_begins_with_i.severity = error
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
#自作の例
#規則違反の場合エラーを表示させます。
dotnet_naming_rule.async_method_should_end_with_async.severity = error
#シンボル名を「async_method_should」とします。
dotnet_naming_rule.async_method_should_end_with_async.symbols = async_method_should
#スタイル名を「end_with_async」とします。
dotnet_naming_rule.async_method_should_end_with_async.style = end_with_async
~~~


<table>
<tr>
    <th>項目</th>
    <th>概要</th>
</tr>
<tr>
    <td>severity</td>
    <td>規則違反時の振る舞い</td>
</tr>
<tr>
    <td>symbols</td>
    <td>「dotnet_naming_symbols」の名称</td>
</tr>
<tr>
    <td>style</td>
    <td>「dotnet_naming_style」の名称</td>
</tr>

</table>

<h2>severity</h2>

<table>
<tr>
    <th>宣言</th>
    <th>詳細</th>
</tr>
<tr>
    <td>none</td>
    <td>無視します。</td>
</tr>
<tr>
    <td>suggestion</td>
    <td>推奨としてエディターに表示します。</td>
</tr>
<tr>
    <td>warning</td>
    <td>警告を出します。</td>
</tr>
<tr>
    <td>error</td>
    <td>エラーとして表示します。</td>
</tr>
</table>
<h2>dotnet_naming_symbols</h2>

~~~
#インターフェースのシンボル
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers = 
#自作のシンボル
#メソッドと一応イベントを対象とします。
dotnet_naming_symbols.async_method_should.applicable_kinds = method,event
#基本的にメソッドになるのですべてのアクセス修飾子を対象にします。
#アクセス修飾子別にカメル、パスカルを変える場合はルールを追加する必要があります。
dotnet_naming_symbols.async_method_should.applicable_accessibilities = public, internal
#修飾子はasyncの場合に対象とします。
dotnet_naming_symbols.async_method_should.required_modifiers = async

~~~

<h3>applicable_kinds</h3>
<table>
<tr>
    <th>宣言</th>
    <th>概要</th>
</tr>
<tr>
    <td>*</td>
    <td>すべて</td>
</tr>
<tr>
    <td>namespace</td>
    <td>ネームスペース</td>
</tr>
<tr>
    <td>class</td>
    <td>クラス</td>
</tr>
<tr>
    <td>struct</td>
    <td>構造体</td>
</tr>
<tr>
    <td>interface</td>
    <td>インターフェース</td>
</tr>
<tr>
    <td>properrty</td>
    <td>プロパティ</td>
</tr>
<tr>
    <td>method</td>
    <td>メソッド、関数</td>
</tr>
<tr>
    <td>field</td>
    <td>フィールド、メンバー、クラス変数</td>
</tr>
<tr>
    <td>event</td>
    <td></td>
</tr>
<tr>
    <td>delegete</td>
    <td></td>
</tr>
<tr>
    <td>parameter</td>
    <td></td>
</tr>
<tr>
    <td>type_parameter</td>
    <td></td>
</tr>
<tr>
    <td>local</td>
    <td>ローカル変数</td>
</tr>
<tr>
    <td>local_function</td>
    <td></td>
</tr>
</table>

<h3>applicable_accessibilities</h3>
<table>
<tr>
    <th>項目</th>
    <th>概要</th>
</tr>
<tr>
    <td>public</td>
    <td>パブリック</td>
</tr>
<tr>
    <td>internal</td>
    <td>アセンブリ内</td>
</tr>
<tr>
    <td>private</td>
    <td>クラス内</td>
</tr>
<tr>
    <td>protected</td>
    <td>派生クラス内</td>
</tr>
<tr>
    <td>protected_internal</td>
    <td></td>
</tr>
<tr>
    <td>private_protected</td>
    <td>アセンブリ内かつ派生クラス内</td>
</tr>
<tr>
    <td>local</td>
    <td>メソッド内で定義されたシンボル</td>
</tr>
</table>
<h3>required_modifiers</h3>
<table>
<tr>
    <th>宣言</th>
    <th>概要</th>
</tr>
<tr>
    <td>abstract</td>
    <td>抽象クラス、抽象メソッド</td>
</tr>
<tr>
    <td>async</td>
    <td>非同期</td>
</tr>
<tr>
    <td>const</td>
    <td>定数</td>
</tr>
<tr>
    <td>readonly</td>
    <td>読み取り専用</td>
</tr>
<tr>
    <td>static</td>
    <td>静的シンボル</td>
</tr>
</table>

<h2></h2>

~~~
#インターフェースのスタイル
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix = 
dotnet_naming_style.begins_with_i.word_separator = 
dotnet_naming_style.begins_with_i.capitalization = pascal_case

#自作のスタイル
#今回はプレフィックス（接頭語）に置きたいものはないので指定はしません
dotnet_naming_style.end_with_async.required_prefix = 
#サフィックス（接尾語）には「Async」とつけさせたいため宣言を行います
dotnet_naming_style.end_with_async.required_suffix = Async
#単語ごとの区切り文字は今回はないため指定はしません
dotnet_naming_style.end_with_async.word_separator =
#今回はパブリックのみにかぎっているためパスカルにします。
#この宣言が必要になるためプライベートとパブリックの分割が必要になります。
dotnet_naming_style.end_with_async.capitalization = pascal_case
~~~


<h2>dotnet_naming_style</h2>
<table>
<tr>
    <th></th>
    <th>概要</th>
</tr>
<tr>
    <td>capitalization</td>
    <td>シンボル内の単語の大文字/小文字スタイル</td>
</tr>
<tr>
    <td>required_prefix</td>
    <td>接頭語</td>
</tr>
<tr>
    <td>required_suffix</td>
    <td>末尾語</td>
</tr>
<tr>
    <td>word_separator</td>
    <td>区切り文字</td>
</tr>
</table>
<h1>結果</h1>
以下のように今までの設定を書き込むとパブリックのメソッドではエラー表記されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831677/1ff3ac10-1b51-9521-fcb1-445ea5b6a94e.png)

実際に末尾にAsyncを入れるとエラーが消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831677/c0903423-109b-9e13-cdc8-b85e570ba32d.png)

<h1>参考</h1>
https://learn.microsoft.com/ja-jp/dotnet/fundamentals/code-analysis/style-rules/naming-rules