Pomocí analyzérů ve VS 2015 máme možnost kontrolovat programový kód různými pravidly ověřující štábní kulturu kódu. Netestuje se tedy, zda kód dělá to, co má, ale zejména to, jak je zapsán. Ale i to dokáže občas odhalit chyby v chování programu.
V aplikacích je však nejen kód ručně psaný programátory, ale často i kód generovaný různými nástroji (designer soubory od resources, aspx, atp.)
Takový kód často nesplňuje pravidla, které na vlastní kód klademe, a zároveň nemáme možnost způsob generování ovlivnit.
Jedno možností je použít global suppressions (viz Code Analysis na stránce https://www.visualstudio.com/en-us/news/vs2015-update1-vs.aspx), druhou možností je vypnout kontrolu generovaného kódu ve vlastnostech projektu.
To však přináší zmatek v tom, co který analyzér považuje za generovaný kód. Pro určení, zda jde o generovaný kód používají různé nástroje různé techniky, například
- dle pojmenování souboru
- dle obsahu souboru – komentář s <auto-generated />
- nebo dle obsahu souboru – attributy u třídy
StyleCop Analyzers
Jako generovaný kód označují kód souboru (zdroj):
- jehož název končí na .designer.cs
- nebo obsahuje v komentáři text <auto-generated či <autogenerated
- nebo je soubor prázdný.
SonarLint for Visual Studio 2015
Jako generovaný kód označují kód (zdroj):
- souboru, jehož název obsahuje .g., .generated., .designer., .generated., _generated. nebo temporarygeneratedfile_
- nebo obsahuje v komentáři text <auto-generated či <autogenerated
- nebo je třída odekorována atributem DebuggerNonUserCode, GeneratedCode, ExcludeFromCodeCoverage či CompilerGenerated.
Code Analyzers
Neobsahují žádnou logiku pro odlišení generovaných souborů od ostatních (nebo se mi ji alespoň v čase, který jsem hledání byl ochoten věnovat, žádnou nenašel).
(zdroj)
Srovnání analyzérů
Tabulka ukazuje, které analyzéry považují jaký soubor za generovaný (ano = generovaný, ne = nerozpoznáno):
.designer.cs (název souboru) |
// <auto-generated> (obsah souboru) |
[GeneratedCode] (obsah souboru) |
|
Code Analyzers | ne | ne | ne |
StyleCop Analyzers | ano | ano | ne |
Sonar Lint | ano | ano | ano |