CodeCharter 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.ccr
│ └── repository-naming.ccr
├── naming/
│ ├── no-manager-suffix.ccr
│ └── async-suffix.ccr
└── team-conventions/
└── controller-action-limit.ccr
.codecharterignore
Unterverzeichnisse unter rules/ sind frei wählbar. CodeCharter liest
rekursiv alle .ccr-Files.
Abwärtskompatibilität:
.cgrist die frühere Regeldateiendung. CodeCharter liest.cgr-Dateien weiterhin, sodass bestehende Regelsätze ohne Änderung funktionieren. Neue Regeln sollten aber.ccrverwenden. Analog bei der Ignore-Datei:.codecharterignoreist primär, das alte.codeguardignorewird nur gelesen, wenn keine.codecharterignorevorhanden ist.
rules/ initialisieren
codecharter init
Legt ein rules/-Verzeichnis mit zwei Beispiel-Regeln an, von dem aus ihr
weiter wachsen könnt.
.codecharterignore
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:
// codecharter-disable-next-line DateTime-Direct-Usage
var migrationTimestamp = DateTime.UtcNow;
Siehe Suppressions für alle Varianten.
Versionierung
Alles unter rules/ und .codecharterignore 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. .codecharterignore wird auf
Solution-Level und in src/<projekt>/-Verzeichnissen geladen.