YAML-Profile für die Custom-Rule-Engine (uCustomRuleDetector).
Werden über [Detectors] CustomRulesFile=... in analyser.ini
oder via CLI-Flag --custom-rules <file> aktiviert.
| Datei | Fokus | Severity-Verteilung | Use-Case |
|---|---|---|---|
analyser-rules.yml |
Generisches Beispiel-Set | mixed | Vorlage für eigene Regeln |
profile-strict.yml |
Coding-Style-Konventionen | error/warning | Greenfield-Projekte mit Coding-Guideline |
profile-security.yml |
Web/Crypto/IO-Sicherheit | error/warning | Web-/Service-Apps, Public-Facing Code |
profile-legacy-migration.yml |
Migration alter Patterns | hint | Modernisierungs-Sprints in Bestandscode |
- Profil-YAML ins Projekt-Root kopieren, z.B. als
analyser-rules.yml - In
%APPDATA%\StaticCodeAnalyser\analyser.ini:[Detectors] CustomRulesFile=analyser-rules.yml
- Plugin neu starten / "Analyse starten"
Vorteil: Ruleset ist mit dem Code versioniert, im Repo committed, für das ganze Team identisch.
- Profil-YAML irgendwo zentral ablegen (z.B.
C:\Team\sca-rules.yml) - In
analyser.ini:[Detectors] CustomRulesFile=C:\Team\sca-rules.yml
Vorteil: ein Ruleset für mehrere Projekte. Nachteil: nicht mit dem Projekt-Code versioniert — Drift-Risiko.
analyser.d12.exe --path . --full --custom-rules profile-strict.yml --report-sarif sca.sarifVorteil: pro CI-Pipeline ein anderes Profil möglich (z.B. strict
auf main-Branch, legacy-migration auf Feature-Branches).
CustomRulesFile=analyser-rules.yml wird der Reihe nach gesucht in:
<Projekt-Root>\analyser-rules.yml← typisch%APPDATA%\StaticCodeAnalyser\analyser-rules.yml<Tool-Verzeichnis>\analyser-rules.yml
Erste existierende Datei gewinnt. Absolute Pfade (C:\... oder
UNC \\server\...) werden direkt verwendet.
Ein Projekt kann nur eine YAML-Datei laden. Wer mehrere Profile will, kopiert die Rules in ein gemeinsames File:
version: 1
rules:
# --- aus profile-strict.yml ---
- id: STRICT001
...
# --- aus profile-security.yml ---
- id: SEC001
...Rule-IDs müssen unique sein — bei Konflikten wird die letzte Definition genommen.
Vorlage: analyser-rules.yml. Pflichtfelder
pro Regel: id, pattern. Alles andere optional (sinnvolle
Defaults, siehe Vorlage-Kommentare).
Pattern-Typen:
substring(default) — naiver Substring-Matchword— nur ganze Identifier (Wort-Grenzen)regex— .NET-Regex-Syntax
Datei-Filter:
file-include: ["src/**/*.pas"]— Glob-Pattern, mehrere möglichfile-exclude: ["**/*Test*.pas"]
Glob-Wildcards:
*— ein Pfad-Segment**/— beliebige Tiefe inkl. null?— ein Zeichen
- Test mit kleinem Pattern starten — Substring oder Word zuerst, nur wenn nötig zu Regex eskalieren.
file-excludefür Test-Code — fast immer sinnvoll. Tests dürfen anti-pattern-haltig sein (Sleep, Mocks, Magic Numbers).- Severity sparsam mit
error— nur wenn der Befund einen Build in CI failen soll. Andernfallswarningoderhint. - Message ohne Code-Snippet — der Grid zeigt schon Datei + Zeile. Die Message soll erklären warum das Pattern problematisch ist.
fix-hintfür Migrations-Rules — der konkrete Refactor-Schritt. Wird in HTML-Reports und Plugin-Tooltips angezeigt.
- YAML kaputt? → IDE-Plugin loggt via OutputDebugString (Fenster: Tools → Debug-Ausgabe). CLI gibt Error auf stderr.
- Regex kaputt? → Lade-Zeit-Exception mit Rule-ID:
Custom rule R001: invalid regex "[unbalanced": ... - Kein Match? → Pattern-Type checken (substring vs regex),
File-Globs prüfen (
src/**/*.pasmatcht NICHTtests/foo.pas).
Eigene generische Profile (z.B. profile-fmx-mobile.yml,
profile-mormot-best-practices.yml) sind willkommen — PR auf
github.com/nrodear/StaticCodeAnalyser.