ECheckStyle 1.0.7
dotnet add package ECheckStyle --version 1.0.7
NuGet\Install-Package ECheckStyle -Version 1.0.7
<PackageReference Include="ECheckStyle" Version="1.0.7"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add ECheckStyle --version 1.0.7
#r "nuget: ECheckStyle, 1.0.7"
// Install ECheckStyle as a Cake Addin #addin nuget:?package=ECheckStyle&version=1.0.7 // Install ECheckStyle as a Cake Tool #tool nuget:?package=ECheckStyle&version=1.0.7
概要
これは、ECheckStyleのNuGetパッケージです。
C#のソースコードの分析項目を追加します。
追加される分析項目
診断ID | 説明 |
---|---|
ECS901 | キーワードと続く括弧の間の空白を検出します。 |
ECS902 | ブロックの開始『{』の手前を検出します。 |
ECS903 | ブロック以外の開始『{』の手前を検出します。 |
ECS904 | ファイル最後の行末を検出します。 |
ECS905 | switchのcase内の処理を検出します。 |
ECS906 | 行末の手前の空白を検出します。 |
ECS907 | インデントを検出します。※この分析項目には自動修正はありません。 |
ECS908 | 行コメント開始後の空白を検出します。 |
ECS909 | Clauseの手前を検出します。 |
ECS910 | 演算子の周りを検出します。 |
ECS911 | カンマと改行付近を検出します。 |
ECS912 | 演算子と改行付近を検出します。 |
ECS913 | カンマの周りを検出します。 |
ECS914 | - |
ECS915 | - |
ECS981 | 正規表現指定による検出を行います。 |
ECS991 | ファイルパスを確認するための確認用です。※初期設定で無効になっています。 |
使い方
Visual StudioのNuGetパッケージ管理から追加してください。
設定ファイルを対象となるソースコードのルートディレクトリに配置します。
設定ファイルがない場合、すべての検出は無視されます。
設定ファイルは、次の4種類の名前で検出されます。
- ecs_onfig.json
- ecs_config.jsonc
- ECSCnfig.json
- ECSConfig.jsonc
設定ファルは、AdditionalFiles(C#アナライザー追加ファイル)に設定してください。
設定ファイルサンプル(説明付き)
// 設定の基本:
// 設定ファイル、項目がない場合はIgnoreとして扱われます。
// 設定ファイルはビルドアクションをAdditionalFiles(C#アナライザー追加ファイル)にしてください。
// 設定はVisual Studioを再起動しないと読み直されないと思います。
//
// 制限事項:
// 診断ID(ECS***)は変わる可能性があります。
// 今のところClauseはelse,catch,finallyだけにしています。
// ここでの演算子は、『単項演算子、ドット演算子、()[]、キーワードによる演算子』を除きます。
// C#のバージョンによって、他にも除外されている(追加されていない)演算子がある可能性があります。
{
// 設定のフィルターは、設定ファイルのディレクトリからの相対パスを検査するようになっています。
// うまく相対パスが読めない場合は絶対パスになります。
// フィルターしたファイルは、ECS991で確認できます(初期設定でECS991は検出無効になっています)。
// 例:[ "\\.cs$", "^ecs_config\\.json$" ]
"RegexFilterStrings": [ "\\.g\\.cs$" ],
// キーワードの周囲にスペースを配置するかどうか。
// Ignore……検出しない。
// Forbidden……スペースを禁止します。
// Require……スペースを必須にします。
"SpaceAfterKeyword": "Forbidden",
// ブロック開始の『{』の前に、スペースなどを配置するかどうか。
// Ignore……検出しない。
// None……空白などを禁止します。
// Space……スペースを必須にします。
// NewLine……改行を必須にします。
"BeforeBlockOpenBrace": "Space",
// ブロック以外の開始の『{』の前に、スペースなどを配置するかどうか。
// Ignore……検出しない。
// None……空白などを禁止します。
// Space……スペースを必須にします。
// NewLine……改行を必須にします。
"BeforeNonBlockOpenBrace": "Space",
// ファイルの最後の行末状態をどうするか。
// Ignore……検出しない。
// Forbidden……禁止にします。
// Require……必須にします。
"EOLAtEOF": "Require",
// switchのcaseの処理が、ブロックになっているかどうか。
// Ignore……検出しない。
// Forbidden……禁止にします。
// Require……必須にします。
"SwitchSectionBlock": "Require",
// 行末の空白を許可するかどうか。
// Ignore……検出しない。
// Forbidden……禁止にします。
"WhitespaceBeforeEOL": "Forbidden",
// インデントをなににするか。
// Ignore……検出しない。
// Tab……タブにします。
// Space4……スペース4個にします。
// Space2……スペース2個にします。
// Space8……スペース8個にします。
// Space3……スペース3個にします。
"IndentString": "Tab",
// 行コメント開始のあとにスペースを配置するかどうか。
// Ignore……検出しない。
// Forbidden……禁止にします。
// Require……必須にします。
"SpaceAfterLineCommentStart": "Require",
// Clause(else,catch,finally)の前に、スペースを配置するかどうか。
// Ignore……検出しない。
// None……空白などを禁止します。
// Space……スペースを必須にします。
// NewLine……改行を必須にします。
"BeforeClause": "Space",
// 演算子(単項演算子、ドット演算子、()[]、キーワードによる演算子を除く)の周囲をどうするか。
// Ignore……検出しない。
// None……空白などを禁止します。
// NoneOrSpace……スペースも許可しますが、原則、空白などを禁止します。
// SpaceOrSpace……原則、スペースを必須にしますが、空白がないものも許可します。
// Space……スペースを必須にします。
// SpaceAfterOnly……後ろにスペースを必須にします。
// SpaceAfterOnlyOrNone……後ろにスペースを必須にしますが、空白がないものも許可します。
"AroundOperator": "SpaceOrNone",
// カンマの周囲をどうするか。
// Ignore……検出しない。
// None……空白などを禁止します。
// NoneOrSpace……スペースも許可しますが、原則、空白などを禁止します。
// SpaceOrSpace……原則、スペースを必須にしますが、空白がないものも許可します。
// Space……スペースを必須にします。
// SpaceAfterOnly……後ろにスペースを必須にします。
// SpaceAfterOnlyOrNone……後ろにスペースを必須にしますが、空白がないものも許可します。
"AroundComma": "SpaceAfterOnlyOrNone",
// カンマと改行の関係をどうするか。
// Ignore……検出しない。
// BeforeEOL……改行の前にカンマが配置するようにします。
// AfterEOL……改行の後にカンマが配置するようにします。
"CommaWithNewline": "BeforeEOL",
// 演算子と改行の関係をどうするか。
// Ignore……検出しない。
// BeforeEOL……改行の前に演算子が配置するようにします。
// AfterEOL……改行の後に演算子が配置するようにします。
"OperatorWithNewline": "BeforeEOL",
// LineRegexesで手軽に正規表現でのチェックを追加できます。
// ()でグループ化していると一番最初に一致した箇所が指摘範囲になります。
// グループ化していない場合はマッチした全体が指摘範囲になります。
// Messageでは{0}がマッチした全体、以降{1}~が()で一番最後にマッチした文字列になっていきます。
// IncludeFilterStringsとExcludeFilterStringsは、正規表現のチェックを有効にするファイルを適宜絞り込めます。
// FilterStringsは指定なしで全体が検証対象になります。
// 例:
// "IncludeFilterStrings": [ ],
// "ExcludeFilterStrings": [ ],
// "RegexString": "new (ApplicationException)\\(",
// "Messaage": "{1}は非推奨です。使用しないでください。"
"LineRegexes": [
{
"IncludeFilterStrings": [],
"ExcludeFilterStrings": [],
"RegexString": "new (ApplicationException)\\(",
"Messaage": "{1}は非推奨です。使用しないでください。"
}
],
}
トラブルシュート
- 動いてないように見えるんだけど……。
- インストールした後や、アップデートした後は、Visual Studioを再起動してみてください。
- 作成した設定ファイルのビルドアクションについて、『AdditionalFiles(C#アナライザー追加ファイル)』になっていることを確認してください。
- なんか、インスタンスの作成に失敗するみたいなんだけど……。
- 同じソリューション内で、複数のバージョンのECheckStyleを使用していないか確認してください。
異なるバージョンのdllを参照してしまうケースがあるようです。
- 同じソリューション内で、複数のバージョンのECheckStyleを使用していないか確認してください。
注意事項
- 診断ID(ECS***)は変わる可能性があります。
- 設定ファイルを複数のディレクトリに置いた場合の動作は確認していません。
- 今のところClauseはelse,catch,finallyだけにしています。
- ここでの演算子は、『単項演算子、ドット演算子、()[]、キーワードによる演算子』を除きます。
C#のバージョンによって、他にも除外されている(追加されていない)演算子がある可能性があります。
変更履歴
2023/10/19 1.0.7:
依存関係が反映されない問題がまだあるようなので修正しました。2023/10/10 1.0.5:
ECS914は開発中だったので削除しました。
1.0.0からの、依存関係などで、思ったように動かなかった問題を修正しました。 System.Text.Jsonに変えたのが問題だったようでNewtonsoft.Jsonに戻したら直りました。2023/10/09 1.0.0:
.NET Standard 2.0ベースに調整しました。
設定ファイルにコメントを許可しました。
見つかっている不具合を修正しました。2016/12/11 0.9.0:
設定ファイルがないと警告が出る問題を修正しました。
正規表現でのチェック機能を追加しました。2016/10/03 0.2.1:
ファイルのフィルター機能の動作を変更しました。2016/10/02 0.2.0:
ファイルのフィルター機能をいれてみました。2016/10/01 0.1.4:
カンマの周りのフォーマットに対応しました。
カンマと改行のフォーマットの動作を変更しました。2016/09/26 0.1.3:
カンマと改行のフォーマットに対応しました。
設定名を一部変更しました。2016/09/24 0.1.2:
演算子の周りのフォーマットに対応しました。
最終行の空白が誤って行末の空白として検出される問題を修正しました。
ECheckStyleでそもそもコンテンツがない場合にEOLをEOFにないと検出される問題を修正しました。
ECheckStyleのBock判定を強化しました。
使っているライブラリなど
Json.NET(Newtonsoft.Json)を使っています。
MITライセンスだそうです(Newtonsoft.Json_LICENSE.mdファイル参照)。
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
依存関係が反映されない問題がまだあるようなので修正しました。