CodeGuard

Datei-Struktur

Wie eure Regelmenge im Repo organisiert ist.

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.