microsoft / microsoft/TypeScript

Preferred refactorings

Open
#29,587 1 comment 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

In Discussion Suggestion VS Code Priority
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

Problems

  • Refactorings such as extract function and extract constant may return multiple possible locations where the code could be extracted to. In many cases however, the user would just like to quick extract something to a reliable location and continue on.

  • extract function is always returned alongside extract constant. However it is often desirable to extract to a constant instead of a function when possible.

Proposal
In the TS Server protocol, mark some refactoring as a preferred refactorings. Editors could use this information to automatically select the preferred refactoring in the list or even quick apply it without any user input (see https://github.com/Microsoft/vscode/issues/62110 for VS Code's proposal on this)

Preferred refactorings would let users set up actions such as extract constant that reliably extract to the nearest scope with a single action or keyboard shortcut. The UX behavior for this type of action:

  • If only a single isPreferred refactoring is returned, apply it automatically.

  • If multiple preferred refactorings are returned, show a list of the preferred refactorings that the user can select from

The normal refactor context menu with full list of refactorings would continue to display the full list of refactorings.

We can start conservative with which refactorings are preferred:

  • For extract constant, extract to local const
  • For extract function, extract to function at the scope of the parent function
  • For extract function in a method, extract to a method

Related to a similar proposal for quick fixes #29450

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 by reviewing the TS Server protocol refactoring response and the related quick-fix proposal in issue #29450. Trace how extract constant and extract function results are represented, then define the preferred-refactoring behavior described here and confirm that the full refactoring list remains available.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.