Skip to content

Datei-Struktur

Wie eure Regelmenge im Repo organisiert ist.

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: .cgr ist die frühere Regeldateiendung. CodeCharter liest .cgr-Dateien weiterhin, sodass bestehende Regelsätze ohne Änderung funktionieren. Neue Regeln sollten aber .ccr verwenden. Analog bei der Ignore-Datei: .codecharterignore ist primär, das alte .codeguardignore wird nur gelesen, wenn keine .codecharterignore vorhanden 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.