MDC-Regeln Best Practices
Dieser Leitfaden behandelt die Best Practices für das Schreiben und Verwalten von MDC-Regeln in Cursor.
MDC-Regeln Grundlagen
1. Regelstruktur
# Beispiel einer MDC-Regel
rule:
name: "Beispiel-Regel"
description: "Eine Beispiel-MDC-Regel"
pattern: "pattern"
constraints:
- type: "constraint"
actions:
- type: "action"
2. Grundlegende Syntax
# Einfache Regel
rule:
name: "Einfache Regel"
pattern: "\\b\\w+\\b"
actions:
- type: "highlight"
color: "blue"
# Komplexe Regel
rule:
name: "Komplexe Regel"
pattern: "\\b\\d{3}-\\d{2}-\\d{4}\\b"
constraints:
- type: "context"
value: "document"
actions:
- type: "validate"
format: "ssn"
Best Practices
1. Namenskonventionen
# Gute Beispiele
rule:
name: "validate_email_format"
name: "check_ssn_pattern"
name: "enforce_naming_convention"
# Schlechte Beispiele
rule:
name: "rule1"
name: "check"
name: "validation_rule_1"
2. Beschreibungen
# Gute Beschreibungen
rule:
description: "Validiert E-Mail-Adressen im Format [email protected]"
description: "Überprüft Sozialversicherungsnummern im Format XXX-XX-XXXX"
description: "Erzwingt PascalCase für Klassennamen"
# Schlechte Beschreibungen
rule:
description: "Validiert E-Mail"
description: "Überprüft SSN"
description: "Namenskonvention"
3. Musterverwendung
# Effektive Muster
rule:
pattern: "\\b[A-Z][a-z]+(?:[A-Z][a-z]+)*\\b" # PascalCase
pattern: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]+)*$" # camelCase
pattern: "^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$" # SNAKE_CASE
# Ineffektive Muster
rule:
pattern: ".*" # Zu breit
pattern: "\\w+" # Zu vage
pattern: "[A-Za-z0-9]+" # Zu allgemein
4. Einschränkungen
# Gute Einschränkungen
rule:
constraints:
- type: "file_extension"
value: [".ts", ".tsx"]
- type: "context"
value: "class_definition"
- type: "scope"
value: "function"
# Schlechte Einschränkungen
rule:
constraints:
- type: "file_extension"
value: [".*"] # Zu breit
- type: "context"
value: "any" # Zu vage
Fortgeschrittene Techniken
1. Bedingte Transformationen
rule:
name: "bedingte_transformation"
pattern: "\\b\\w+\\b"
constraints:
- type: "context"
value: "variable_declaration"
actions:
- type: "transform"
condition: "is_constant"
transform: "to_uppercase"
- type: "transform"
condition: "is_private"
transform: "add_underscore"
2. Kontextbewusstsein
rule:
name: "kontext_validation"
pattern: "\\b\\w+\\b"
constraints:
- type: "scope"
value: "class"
- type: "visibility"
value: "private"
actions:
- type: "validate"
rule: "naming_convention"
3. Benutzerdefinierte Validierung
rule:
name: "custom_validation"
pattern: "\\b\\w+\\b"
constraints:
- type: "custom"
validator: "check_naming"
actions:
- type: "custom"
action: "apply_naming_rule"
Regel-Tests
1. Unit-Tests
// test/rules/example.test.ts
describe('MDC Rule Tests', () => {
it('should match valid patterns', () => {
const rule = loadRule('example_rule');
expect(rule.match('valid_pattern')).toBe(true);
});
it('should not match invalid patterns', () => {
const rule = loadRule('example_rule');
expect(rule.match('invalid_pattern')).toBe(false);
});
});
2. Integrationstests
// test/integration/rules.test.ts
describe('Rule Integration', () => {
it('should apply rules in context', () => {
const result = applyRules('test_file.ts');
expect(result.violations).toHaveLength(0);
});
});
Regelverwaltung
1. Versionierung
# version_control.yaml
rules:
- name: "rule_v1"
version: "1.0.0"
deprecated: false
- name: "rule_v2"
version: "2.0.0"
deprecated: true
2. Gruppierung
# rule_groups.yaml
groups:
naming:
- "pascal_case"
- "camel_case"
validation:
- "email_format"
- "ssn_format"
Fehlerbehebung
1. Häufige Fehler
1. Musterfehler
- Unvollständige Regex
- Falsche Escaping
- Zu breite Muster
2. Kontextfehler
- Falsche Bereichsdefinition
- Fehlende Einschränkungen
- Inkonsistente Regeln
2. Debugging
class RuleDebugger {
// Muster-Test
testPattern(pattern: string, input: string): boolean {
const regex = new RegExp(pattern);
return regex.test(input);
}
// Kontext-Validierung
validateContext(rule: Rule, context: Context): boolean {
return rule.constraints.every(c => c.validate(context));
}
}
Leistungsoptimierung
1. Musteroptimierung
class PatternOptimizer {
// Muster kompilieren
compilePattern(pattern: string): RegExp {
return new RegExp(pattern, 'g');
}
// Muster-Cache
private patternCache: Map<string, RegExp> = new Map();
}
2. Ressourcenverwaltung
class ResourceManager {
// Speichernutzung überwachen
monitorMemory(): void {
const usage = process.memoryUsage();
if (usage.heapUsed > threshold) {
this.cleanup();
}
}
// Cache leeren
cleanup(): void {
this.patternCache.clear();
}
}
Sicherheitsüberlegungen
1. Eingabevalidierung
class InputValidator {
// Muster validieren
validatePattern(pattern: string): boolean {
return !pattern.includes('.*') &&
!pattern.includes('.+') &&
pattern.length < 1000;
}
}
2. Zugriffskontrolle
class AccessControl {
// Regelzugriff überprüfen
checkAccess(rule: Rule, user: User): boolean {
return user.hasPermission(rule.permission);
}
}
Fazit
Die effektive Verwendung von MDC-Regeln kann die Codequalität und Konsistenz erheblich verbessern. Befolgen Sie diese Best Practices, um robuste und wartbare Regeln zu erstellen.
Zusätzliche Ressourcen:
Letzte Aktualisierung: Februar 2025 - Dieser Leitfaden behandelt Cursor Version 0.43.