Zum Inhalt springen

CodeCharter-Findings per Kommentar oder Config unterdrücken

Einzelne Findings bewusst per Code-Kommentar ausnehmen, oder ganze Regeln und Pfade in der Konfigurationsdatei.

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.