Datei-Struktur
CodeGuard erwartet die Regelmenge in einem rules/-Verzeichnis, per
Default neben der CLI im Workspace. Über die Option --rules <dir>
zeigt ihr auf ein beliebiges Verzeichnis.
Empfohlenes Layout im Repo
rules/
├── architecture/
│ ├── domain-must-not-reference-web.cgr
│ └── repository-naming.cgr
├── naming/
│ ├── no-manager-suffix.cgr
│ └── async-suffix.cgr
└── team-conventions/
└── controller-action-limit.cgr
.codeguardignore
Unterverzeichnisse unter rules/ sind frei wählbar. CodeGuard liest
rekursiv alle .cgr-Files.
rules/ initialisieren
codeguard init
Legt ein rules/-Verzeichnis mit zwei Beispiel-Regeln an, von dem aus ihr
weiter wachsen könnt.
.codeguardignore
Liegt im Solution-Root und optional in Projekt-Verzeichnissen unter src/.
Zwei Bereiche:
# Per-Regel-Ignores: <rule-slug>: <namespace-prefix>
namespace-distance: Acme.Generated
namespace-few-types: Acme.Tests
# Komplette Pfade aus der Analyse ausnehmen
[exclude]
**/tests/**
**/Generated/**
**/bin/**
**/obj/**
Der erste Bereich nimmt einzelne Regeln für bestimmte Namespaces zurück.
Der [exclude]-Bereich nimmt ganze Pfade aus der Analyse.
Inline-Suppressions
Pro Stelle im Code:
// codeguard-disable-next-line DateTime-Direct-Usage
var migrationTimestamp = DateTime.UtcNow;
Siehe Suppressions für alle Varianten.
Versionierung
Alles unter rules/ und .codeguardignore gehört ins Repo und in die
Code-Reviews. Wenn eine neue Regel reinkommt oder eine Severity geändert
wird, läuft das durch den gleichen PR-Review wie jeder andere Code-Change.
Multi-Repo und Monorepo
In einem Monorepo könnt ihr rules/-Verzeichnisse pro Sub-Projekt haben
und über --rules darauf zeigen. .codeguardignore wird auf
Solution-Level und in src/<projekt>/-Verzeichnissen geladen.