microsoft / microsoft/TypeScript
"Organize Imports" should adjust specifiers based on preferences
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
🔍 Search Terms
"sort imports", "organize imports"
✅ Viability Checklist
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ Suggestion
I have a feature request for the language server / it's commands.
So I have a large project, and I have not changed tsconfig.json since the beginning of the time.
Now I "discovered" what baseUrl does, what paths does, and that there is an option in vscode - ```
"typescript.preferences.importModuleSpecifier": "non-relative", // | "project-relative" | "relative" | "shortest"`.
So I have a file, deep inside the source - which imports from a file, close to the root.
Before I added 'baseUrl' - it did
import { bar } from "../../../../../foo/bar";`
After adding "baseUrl": "./src/" in tsconfig - this could be written as
import { bar } from "foo/bar";`
bar();
If I delete the import, and go to the bar() to fix the import issue - it provides me quick fix -
Add import from "foo/bar"if I have specified"typescript.preferences.importModuleSpecifier": "shortest"in settings., orAdd import from "../../../../../foo/bar"if I have specified"typescript.preferences.importModuleSpecifier": "relative"in settings.
I really don't like those endless "../../../../../" so I would like to fix them. The only "tool" I have for now - is just to delete the import, and resolve those imports manually - so it gives me the best import paths given my settings and my tsconfig's "baseUrl" or "paths".
This is tedious. And it doesn't work where I have used import * as foo from [..].
In VSCode - there is a command Organize imports (I think this comes not from TypeScript?) (In my optionion - wasted effort. since it doesn't organize them, it just sorts them, but this is besides the point (it does not come from TypeScript))
But TypeScript does come with a command "Typescript: Sort imports"!
What I would want - after executing the command, it would not only sort the imports, but also - change the paths for those imports matching my preferences of settings.json "typescript.preferences.importModuleSpecifier" + tsconfig.json "baseUrl" and "paths".
Or it could be a new command - Typescript: Organize imports? (maybe not..)
📃 Motivating Example
This feature would help automatically shorten imports / make the satisfy project setting for a file.
💻 Use Cases
- What do you want to use this for?
To automatically organize imports - What shortcomings exist with current approaches?
You have to manually go over each import and edit them one by one - What workarounds are you using in the meantime?
Deleting the import and resolving them using quick fix.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il comando TypeScript: Sort imports e il comportamento di quick-fix del language server descritto nell’issue. Traccia come typescript.preferences.importModuleSpecifier, tsconfig baseUrl e paths influenzano gli specificatori di import generati. Il lavoro è completato quando gli import sono ordinati e i percorsi idonei vengono adattati in modo coerente con queste preferenze.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript, vscode
- Ambito
- developer-experience, tooling
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100