Zum Hauptinhalt springen

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.