Die Arbeit mit großen Codebasen bringt neue Herausforderungen mit sich, die sich von der Arbeit an kleineren Projekten unterscheiden. Basierend auf unseren Erfahrungen bei der Skalierung von Cursor’s eigener Codebasis und Erkenntnissen von Kunden, die massive Codebasen verwalten, haben wir einige nützliche Muster für den Umgang mit erhöhter Komplexität entdeckt. In diesem Leitfaden werden wir einige dieser Techniken durchgehen, die wir als nützlich für große Codebasen empfunden haben.

Verwenden Sie Chat, um sich schnell in unbekannten Code einzuarbeiten

Das Navigieren in einer großen Codebasis, besonders wenn sie neu für Sie ist, kann herausfordernd sein. Oft müssen Sie grep verwenden, suchen und herumklicken, um die spezifischen Teile der Codebasis zu finden, nach denen Sie suchen. Mit Chat können Sie anfangen, Fragen zu stellen, um zu finden, wonach Sie suchen, und eine detaillierte Erklärung darüber erhalten, wie es funktioniert. Hier erhalten wir Hilfe, um Implementierungsdetails der Codebasis-Indizierung in Cursor zu finden, und fragen sogar nach einigen Beispielen, um es leichter verständlich zu machen.
Um Cursor ein vertieftes Verständnis der Struktur Ihrer Codebasis zu geben, stellen Sie sicher, dass Sie Include Project Structure in den Settings aktivieren, um die Leistung zu verbessern.

Regeln für domänenspezifisches Wissen schreiben

Wenn Sie einen neuen Mitarbeiter in Ihre Codebasis einarbeiten würden, welchen Kontext würden Sie ihm geben, um sicherzustellen, dass er sinnvolle Beiträge leisten kann? Ihre Antwort auf diese Frage ist wahrscheinlich auch wertvolle Information für Cursor. Für jede Organisation oder jedes Projekt gibt es latentes Wissen, das möglicherweise nicht vollständig in Ihrer Dokumentation erfasst ist. Die effektive Nutzung von Regeln ist der beste Weg, um sicherzustellen, dass Cursor das vollständige Bild erhält. Wenn Sie beispielsweise Anweisungen für die Implementierung einer neuen Funktion oder eines neuen Services schreiben, sollten Sie eine kurze Regel schreiben, um dies für die Nachwelt zu dokumentieren.
Boilerplate
---
description: Add a new VSCode frontend service
---

1. **Interface Definition:**
   - Define a new service interface using `createDecorator` and ensure `_serviceBrand` is included to avoid errors.

2. **Service Implementation:**
   - Implement the service in a new TypeScript file, extending `Disposable`, and register it as a singleton with `registerSingleton`.

3. **Service Contribution:**
   - Create a contribution file to import and load the service, and register it in the main entrypoint.

4. **Context Integration:**
   - Update the context to include the new service, allowing access throughout the application.
Wenn es gängige Formatierungsmuster gibt, an die sich Cursor halten soll, sollten Sie in Betracht ziehen, Regeln basierend auf Glob-Mustern automatisch anzuhängen.
Formatting
---
globs: *.ts
---
- Use bun as package manager. See [package.json](mdc:backend/reddit-eval-tool/package.json) for scripts
- Use kebab-case for file names
- Use camelCase for function and variable names
- Use UPPERCASE_SNAKE_CASE for hardcoded constants
- Prefer `function foo()` over `const foo = () =>`
- Use `Array<T>` instead of `T[]`
- Use named exports over default exports, e.g (`export const variable ...`, `export function `)

Bleiben Sie nah am Planungsprozess

Bei größeren Änderungen kann es die Ausgabe von Cursor erheblich verbessern, wenn Sie überdurchschnittlich viel Zeit darauf verwenden, einen präzisen, gut abgegrenzten Plan zu erstellen. Wenn Sie feststellen, dass Sie nach einigen verschiedenen Variationen derselben Eingabeaufforderung nicht das gewünschte Ergebnis erhalten, sollten Sie einen Schritt zurücktreten und einen detaillierteren Plan von Grund auf erstellen, als würden Sie ein PRD für einen Kollegen erstellen. Oft ist der schwierige Teil herauszufinden, welche Änderung vorgenommen werden sollte - eine Aufgabe, die gut für Menschen geeignet ist. Mit den richtigen Anweisungen können wir einige Teile der Implementierung an Cursor delegieren. Eine Möglichkeit, KI zur Unterstützung des Planungsprozesses zu nutzen, ist die Verwendung des Ask-Modus. Um einen Plan zu erstellen, aktivieren Sie den Ask-Modus in Cursor und geben Sie alle Kontextinformationen ein, die Sie aus Ihren Projektmanagementsystemen, internen Dokumenten oder losen Gedanken haben. Denken Sie darüber nach, welche Dateien und Abhängigkeiten Sie in der Codebasis haben, von denen Sie bereits wissen, dass Sie sie einbeziehen möchten. Dies kann eine Datei sein, die Codeteile enthält, mit denen Sie sich integrieren möchten, oder vielleicht ein ganzer Ordner. Hier ist ein Beispiel für eine Eingabeaufforderung:
Planning prompt
- erstelle einen Plan dafür, wie wir ein neues Feature erstellen sollten (genau wie @existingfeature.ts)
- stelle mir Fragen (max. 3), falls etwas unklar ist
- stelle sicher, dass du die Codebasis durchsuchst

@Past Chats (meine früheren Erkundungsaufforderungen)

hier ist etwas mehr Kontext aus [Projektmanagement-Tool]:
[eingefügte Ticket-Beschreibung]
Wir bitten das Modell, einen Plan zu erstellen und Kontext zu sammeln, indem es dem Menschen Fragen stellt, frühere Erkundungsaufforderungen referenziert und auch die Ticket-Beschreibungen berücksichtigt. Die Verwendung eines denkenden Modells wie claude-3.7-sonnet, gemini-2.5-pro oder o3 wird empfohlen, da diese die Absicht der Änderung verstehen und einen Plan besser synthetisieren können. Daraus können Sie den Plan mit Hilfe von Cursor iterativ formulieren, bevor Sie mit der Implementierung beginnen.

Das richtige Werkzeug für die Aufgabe wählen

Eine der wichtigsten Fähigkeiten bei der effektiven Nutzung von Cursor ist die Wahl des richtigen Werkzeugs für die jeweilige Aufgabe. Denken Sie darüber nach, was Sie erreichen möchten, und wählen Sie den Ansatz, der Sie im Flow hält.
WerkzeugAnwendungsfallStärkeEinschränkung
TabSchnelle, manuelle ÄnderungenVollständige Kontrolle, schnellEinzelne Datei
Inline EditGezielte Änderungen in einer DateiFokussierte BearbeitungenEinzelne Datei
ChatGrößere, dateiübergreifende ÄnderungenSammelt automatisch Kontext, tiefgreifende BearbeitungenLangsamer, kontextlastig
Jedes Werkzeug hat seinen optimalen Einsatzbereich:
  • Tab ist Ihr bevorzugtes Werkzeug für schnelle Bearbeitungen, bei denen Sie die Kontrolle behalten möchten
  • Inline Edit glänzt, wenn Sie fokussierte Änderungen an einem bestimmten Code-Abschnitt vornehmen müssen
  • Chat ist perfekt für größere Änderungen, bei denen Cursor den breiteren Kontext verstehen muss
Wenn Sie den Chat-Modus verwenden (der sich etwas langsamer anfühlen kann, aber unglaublich mächtig ist), helfen Sie ihm dabei, Ihnen zu helfen, indem Sie guten Kontext bereitstellen. Verwenden Sie @files, um auf ähnlichen Code zu verweisen, den Sie nachahmen möchten, oder @folder, um ihm ein besseres Verständnis Ihrer Projektstruktur zu geben. Und scheuen Sie sich nicht davor, größere Änderungen in kleinere Teile aufzuteilen - neue Chats zu beginnen hilft dabei, die Dinge fokussiert und effizient zu halten.

Erkenntnisse

  • Änderungen eingrenzen und nicht zu viel auf einmal versuchen
  • Relevanten Kontext einbeziehen, wenn möglich
  • Chat, Inline Edit & Tab für das verwenden, wofür sie am besten geeignet sind
  • Häufig neue Chats erstellen
  • Mit Ask-Modus planen, mit Agent-Modus implementieren