-
Notifications
You must be signed in to change notification settings - Fork 37.9k
Description
Problem
Many language/extension implement really cool refactorings, but many users never discover these or figure out how to reliably trigger them.
Proposal
Add a way for an extension to contribute documentation for their refactorings. Our goal here would be to help users reach the documentation and leave the presentation of the documentation up to extensions themselves.
Target UX
Let users explicitly request to see the refactoring documentation from the existing code action refactor menu. This could be as simple as a Learn more entry at the bottom of the refactoring menu.
The learn more action would do the following:
- If we are in a language that only has one refactoring documentation provider, then show that documentation directly
- If we are in a language with multiple refactoring documentation providers, show a quick pick so that users can tell us which documentation they are interested in (this is similar to how our remote documentation works today)
API
Current proposal
The current proposal is the add a documentation field to CodeActionProviderMetadata that let's extension surface a command that shows documentation:
export interface CodeActionProviderMetadata {
/**
* Static documentation for a class of code actions.
*
* The documentation is shown in the code actions menu if either:
*
* - Code actions of `kind` are requested by VS Code. Note that in this case, we always pick the most specific
* documentation. For example, if documentation for both `Refactor` and `RefactorExtract` is provided, and we
* request code actions for `RefactorExtract`, we prefer the more specific documentation for `RefactorExtract`.
*
* - Any code actions of `kind` are returned by the provider.
*/
readonly documentation?: ReadonlyArray<{ readonly kind: CodeActionKind, readonly command: Command }>;
}original proposal
I see two possible ways this could be implemented:
Through a contribution point
Create a new documentation.refactoring contribution point that lets extension define a command that shows the documentation:
"contributes": {
"documentation": {
"refactoring": [
{
"title": "%documentation.refactoring.title%",
"when": "typescript.isManagedFile",
"command": "_typescript.learnMoreAboutRefactorings"
}
]
},
}Through a new refactor.documentation code action kind
Define a special code action kind called refactor.documentation. If an extension returns a code action with this kind, then we could surface this using some special UI in the refactor menu
(extensions would be expected to return the refactor.documentation action whenever refactorings are requested)