microsoft / microsoft/TypeScript

"Organize Imports" should adjust specifiers based on preferences

Open
#58,642 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Domain: LS: Organize Imports In Discussion Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
1d 19h
Merged PRs (30d)
117

Description

🔍 Search Terms

"sort imports", "organize imports"

✅ Viability Checklist
⭐ 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., or
  • Add 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
  1. What do you want to use this for?
    To automatically organize imports
  2. What shortcomings exist with current approaches?
    You have to manually go over each import and edit them one by one
  3. What workarounds are you using in the meantime?
    Deleting the import and resolving them using quick fix.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the TypeScript: Sort imports command and the language-server quick-fix behavior described in the issue. Trace how typescript.preferences.importModuleSpecifier, tsconfig baseUrl, and paths influence generated import specifiers. Done means imports are sorted and eligible paths are adjusted consistently with those preferences.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript, vscode
Domain
developer-experience, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.