microsoft / microsoft/TypeScript
"Organize Imports" should adjust specifiers based on preferences
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
🔍 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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el comando TypeScript: Sort imports y el comportamiento de quick-fix del language server descrito en el issue. Traza cómo typescript.preferences.importModuleSpecifier, tsconfig baseUrl y paths influyen en los especificadores de importación generados. Se considera terminado cuando las importaciones están ordenadas y las rutas elegibles se ajustan de forma coherente con esas preferencias.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript, vscode
- Área
- developer-experience, tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100