Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add codeActionsOnSave to docs #3938

Merged
merged 3 commits into from
Aug 14, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions docs/languages/javascript.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,58 @@ Organize imports can also be automatically when you save a JavaScript file by se
"source.organizeImports": true
}
```
## Code Actions on Save

The `editor.codeActionsOnSave` setting lets you configure a set of Code Actions that are run when a file is saved. For example, you can enable organize imports on save by setting:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The content looks good but let's try to tighten it up. These documents quick overviews of features available for js/ts so we try to keep each section fairly small.

I’d say keep the first example and the list of available code actions. You can link to documentation on language specific settings and other more advanced features

```json
// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true,
}
```
You can also enable or disable which Code Actions are run on save per language using a language specific setting:
```json
"[javascript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
```
Here are some source actions:

* `"organizeImports"` - Enables organize imports on save.
* `"fixAll"` - Auto Fix on Save computes all possible fixes in one round (for all providers including ESLint).
* `"fixAll.eslint"` - Auto Fix only for ESLint.
* `"addMissingImports"` - Adds all missing imports on save.

The TSLint extension already uses `source.fixAll` Code Action kind to implement fix all and auto fix on save.

You can also set `editor.codeActionsOnSave` to an array of Code Actions to execute in order. You can use this to guarantee that a specific Code Action is always run before or after another one that may conflict with it.
Copy link

@Luxcium Luxcium Aug 14, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you remove some parts, please make sure, if possible, to keep this one where you explain the reason why one would prefer to choose the array vs. the object syntax (to execute in order) I think this is important to understand...

The following `editor.codeActionsOnSave` will always run Organize Imports followed by Fix All once organize imports finishes:
```json
"editor.codeActionsOnSave": [
"source.organizeImports",
"source.fixAll"
]
```
Note: `editor.codeActionsOnSave` supports both object and array configs in settings.

Examples:

Selective behaviour for different source actions:
```json
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.fixAll.eslint": false
}
```
Add all missing imports on save:
```json
"editor.codeActionsOnSave": [
"source.addMissingImports"
]
```

## Code suggestions

Expand Down
51 changes: 51 additions & 0 deletions docs/languages/typescript.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,58 @@ Organize imports can also be automatically when you save a TypeScript file by se
"source.organizeImports": true
}
```
## Code Actions on Save

The `editor.codeActionsOnSave` setting lets you configure a set of Code Actions that are run when a file is saved. For example, you can enable organize imports on save by setting:
```json
// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true,
}
```
You can also enable or disable which Code Actions are run on save per language using a language specific setting:
```json
"[typescript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
```
Here are some source actions:

* `"organizeImports"` - Enables organize imports on save.
* `"fixAll"` - Auto Fix on Save computes all possible fixes in one round (for all providers including ESLint).
* `"fixAll.eslint"` - Auto Fix only for ESLint.
* `"addMissingImports"` - Adds all missing imports on save.

The TSLint extension already uses `source.fixAll` Code Action kind to implement fix all and auto fix on save.

You can also set `editor.codeActionsOnSave` to an array of Code Actions to execute in order. You can use this to guarantee that a specific Code Action is always run before or after another one that may conflict with it.
The following `editor.codeActionsOnSave` will always run Organize Imports followed by Fix All once organize imports finishes:
```json
"editor.codeActionsOnSave": [
"source.organizeImports",
"source.fixAll"
]
```
Note: `editor.codeActionsOnSave` supports both object and array configs in settings.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For me, the documentation explaining the difference between array vs. object was important to understand... So the part above where you say that the array is used to execute in a specific order is the most important part. It seems that the explanation is redundant below (maybe‽)


Examples:

Selective behaviour for different source actions:
```json
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.fixAll.eslint": false
}
```
Add all missing imports on save:
```json
"editor.codeActionsOnSave": [
"source.addMissingImports"
]
```
## Code suggestions

VS Code automatically suggests some common code simplifications such as converting a chain of `.then` calls on a promise to use `async` and `await`
Expand Down