CodeCharter bietet zwei Wege, Findings bewusst auszunehmen: Suppression-Kommentare
im Code (drei Formen) für eine einzelne Zeile oder Datei, oder das Abschalten
ganzer Regeln und Pfade in .codecharter/config.yml.
1. Inline-Suppression auf der nächsten Zeile
// codecharter-disable-next-line datetime-direct-usage
var migrationTimestamp = DateTime.UtcNow;
Die Direktive gilt für die unmittelbar folgende Zeile. Der Regel-Slug ist
erforderlich: ein // codecharter-disable-next-line ohne Slug unterdrückt
nichts.
2. Suppression auf derselben Zeile oder Zeile darüber
var migrationTimestamp = DateTime.UtcNow; // codecharter-disable datetime-direct-usage
Oder auf der Zeile darüber:
// codecharter-disable datetime-direct-usage
var migrationTimestamp = DateTime.UtcNow;
Beide Kommentarformen akzeptieren mehrere Regel-Slugs in einem Kommentar,
durch Leerzeichen getrennt, zum Beispiel
// codecharter-disable datetime-direct-usage magic-number. Slugs werden
case-sensitive mit der Regel-ID verglichen, also dem Dateinamen der Regel ohne
die Endung .ccr.
Hinter dem oder den Regel-Slugs darf eine Begründung in freiem Text stehen,
Suppressions können sich also selbst dokumentieren; das gilt auch für die Form
codecharter-disable-next-line. Die Regel-Liste endet am ersten Trennzeichen,
alles danach ist Prosa und unterdrückt nichts, auch wenn dort der Name einer
anderen Regel vorkommt:
// codecharter-disable magic-number — das Retry-Budget gibt das Protokoll vor
// codecharter-disable magic-number -- flag-argument wäre hier schlechter
// codecharter-disable flag-argument. Alter Code, bleibt so.
// codecharter-disable magic-number: entspricht dem Wire-Format
Als Trennzeichen gelten ein Geviertstrich (—), ein --, ein Punkt, ein
Doppelpunkt sowie ein schließendes Anführungszeichen oder eine schließende
Klammer. Komma und Semikolon trennen dagegen nur Regel-Slugs und halten die
Liste offen, // codecharter-disable magic-number, flag-argument — Begründung
unterdrückt also beide Regeln. Umgebende Satzzeichen werden vor dem Vergleich
entfernt, deshalb funktioniert auch
// codecharter-disable ("magic-number", "flag-argument") Begründung.
Setzen Sie das Trennzeichen. Ohne eines wird weiterhin jedes durch Leerzeichen
getrennte Wort als Regel-Slug gelesen, eine Begründung wie
// codecharter-disable magic-number flag-argument ist hier unvermeidbar würde
also auch flag-argument unterdrücken.
3. File-Level-Suppression
Ein // codecharter-disable-Kommentar, der allein auf einer eigenen Zeile steht,
ohne Regel-Slug und ohne weiteren Inhalt auf der Zeile, unterdrückt alle
Findings für die gesamte Datei. Er kann an beliebiger Stelle in der Datei
stehen; hinter Code auf derselben Zeile hat er jedoch keine dateiweite Wirkung.
Sinnvoll bei automatisch generiertem Code oder Altdateien, die Sie aktuell
nicht anfassen möchten.
// codecharter-disable
namespace Acme.Generated;
Reichweite von Inline-Suppressions
Inline-Kommentare wirken auf zwei Ebenen: auf eine einzelne Zeile und auf die
gesamte Datei. Für alles Größere, etwa einen Codeabschnitt oder eine Regel über
mehrere Dateien hinweg, verwenden Sie .codecharter/config.yml: Schalten Sie
die Regel dort mit einem ignore-Eintrag ab oder nehmen Sie die Pfade mit
exclude aus (siehe unten).
Suppressions auf Repository-Ebene
Um eine ganze Regel abzuschalten oder komplette Pfade aus der Analyse zu nehmen,
verwenden Sie .codecharter/config.yml statt Inline-Kommentaren. Der Abschnitt
ignore schaltet Findings aus (optional auf einen Namespace mit in: oder auf
einen Glob über den gemeldeten Entity-Namen mit match: beschränkt: bei
Typen und Members vollqualifiziert, bei Events und Findings auf
Vorkommen-Ebene einfach), und exclude nimmt Pfade aus der Analyse:
version: 1
ignore:
- rule: namespace-distance
in: Acme.Generated
- rule: todo-comment
exclude:
- "**/tests/**"
- "**/obj/**"
Um statt des Abschaltens die Severity einer Regel zu ändern, verwenden Sie den
Abschnitt overrides, siehe Findings. Den vollen
Satz an Abschnitten, Scopes und das maschinenlokale Overlay finden Sie unter
Konfigurationsdatei.