microsoft / microsoft/TypeScript

[tsserver] Multi-project goto definition with accurate results

Offen
#62,080 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

### 🔍 Search Terms

multi project goto definition
tsserver multiple projects
cross project goto
cross project references

### ✅ Viability Checklist

- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
- [x] This wouldn't change the runtime behavior of existing JavaScript code
- [x] This could be implemented without emitting different JS based on the types of the expressions
- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- [x] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals

### ⭐ Suggestion

Take all projects that references a file into consideration when doing goto definition.

### 📃 Motivating Example

Currently when you are working on shared code that calls or uses code that differs in implementation on the client and server the accuracy of goto definition is not optimal. It will just goto either the client or the server. It would be optimal if all relevant definitions were returned.

### 💻 Use Cases

Example project:
```ts
// shared/shared.ts
let x: Thing; // < goto definition here

// project1/tsconfig.json
...

// project1/thingA.ts
interface Thing { a: string }

// project2/tsconfig.json
...

// project2/thingB.ts
interface Thing { b: number }
```

Currently this is returned (depending on order of project load):
```ts
interface Thing { a: string }
```

What ideally should be returned:
```ts
interface Thing { a: string }
interface Thing { b: number }
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Das Issue verweist auf die Multi-Projekt-Verarbeitung von tsserver für goto-definition; beginne damit nachzuverfolgen, wie Projekte ausgewählt werden, die auf eine gemeinsam verwendete Datei verweisen. Vergleiche das aktuelle Ergebnis mit einer einzelnen Definition mit den erwarteten Definitionen des Beispiels und stelle anschließend eine Abdeckung dafür her, dass alle relevanten Ergebnisse zurückgegeben werden. Es werden keine spezifischen Dateien oder Tests genannt, daher erfordert das Auffinden des Implementierungs- und Testbereichs Vertrautheit mit dem Projekt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
developer-experience, tooling
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.