Why use prettier if ESLint can format?
visual studio code - In VSCode, how do I effectively run eslint --fix and prettier --write on "Format Document"? - Stack Overflow
Prettier doesn't format based on my eslint config
prettier vs eslint?
Videos
I've heard ESLint can format but I haven't found a clear answer why it seems prettier is used instead of the ESLint formatter. Whenever I try to look it up most comments neglect to mention that ESLint can also format so it's not obvious why prettier would be needed at all.
ยป npm install prettier-eslint
ยป npm install eslint-config-prettier
VSCode doesn't support chaining multiple formatters. More at this related question.
But chaining formatters isn't the answer to your problem. If you're using Prettier and ESLint properly then they do not overlap in their ruleset. You can use eslint-plugin-prettier to format the document with only ESLint and it will run Prettier as an ESLint rule. Adding eslint-config-prettier disables any ESLint rules that would conflict with Prettier.
Afterwards, running eslint --fix would apply both your ESLint and Prettier rules in a single format.
If you would like to use ESLint with other filetypes then you need to find ESLint plugins that work for those filetypes. They require installation and configuration unique to each plugin. An example is eslint-plugin-jsonc to add support for JSONC.
In package.json:
{
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^6.10.0",
"@typescript-eslint/parser": "^6.10.0",
"eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.1",
"prettier": "^3.0.3",
"typescript": "^5.2.2"
}
}
In .eslintrc.json:
{
"extends": [
"plugin:prettier/recommended" // must be last element in "extends"
],
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [
".ts"
]
},
}
}
Set your Prettier rules in .prettierrc.json, for example:
{
"printWidth": 100
}
Now eslint --fix will format the document in a single pass.
For VSCode, install both the dbaeumer.vscode-eslint and the esbenp.prettier-vscode extensions. These each require you to have the corresponding npm package installed, whether locally in your app or globally on your device. You may also need to configure VSCode so that it can find the packages, depending on how they were installed.
Then when you run Format Document With and select ESLint it will apply both your ESLint and Prettier rules with the equivalent of eslint --fix. For example, leaving a trailing space will trigger this INFO alert:
Delete `ยท` eslint (prettier/prettier)
Formatting the document with ESLint resolves the issue.
This bugged me ALOT as well. There are a lot of resources online about different ways. The problem is most of them are outdated, don't work, require some config adjustments, and have their own set of trade-offs.
Here was the solution I ended up going with:
I just added this to my users keybindings.json:
{
"key": "cmd+alt+f",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "npx prettier --write '${file}' > /dev/null 2>&1 && npx eslint_d --fix '${file}' > /dev/null 2>&1 & \u000D" // The CLI command to run "\u000D" is just the return key.
},
"when": "editorTextFocus"
},
That command uses eslint_d but thats just a performance enhancement. You could just as easily use eslint instead.
If you want to get it to run on save. You can try vscode-run-on-save
The benefit of this was it just works across any flavor of vscode like cursor, windsurf, etc. I don't have to muck with configs or any other setup.
Hope this helps someone else :).
- Install eslint:
npm i --save-dev eslint - Init eslint:
For some options you need choose next:npx eslint --init- How would you like to use ESLint?
- To check syntax and find problems
- What format do you want your config file to be in?
- JavaScript
- Install prettier:
npm i --save-dev eslint-config-prettier eslint-plugin-prettier prettier - Create
.prettierrcconfig file:{ "printWidth": 80, "singleQuote": true, "trailingComma": "es5" }
At now you can check style with eslint and fix style with prettier from comand line.
For VSCode integration with eslint and prettier you need to install one of:
- esbenp.prettier-vscode.
- dbaeumer.vscode-eslint;
After that you need to set this extension as default formatter:
- Open command pallette
ctrl+shift+p; - Select
Format Document With...; - Select
Configure Document With...; - Select
Prettier - Code FormatterorESLintbased on your preferences.
Now, eslint will work as linter and prettier as formatter:
VSCode problem tab:

eslint output

If I save file all prettier problems will be fixed (Autoformat on save should be turned on)
Eslint plugin does not apply automatically changes in settings located in
.prettierrc. See issue on github. To fix this you can:
- move
.prettierrccontent in .eslint (not recommended because prettier plugins sometimes do not read this file);- run from command pallette in VSCode
ESLint: Restart ESLint serverafter edit .prettierrcfile.
in eslint config, change
extends: ["prettier"],
to
extends: ['plugin:prettier/recommended'],
hey people what are your takes on this? which one do you prefer or why? or maybe another linter if you know better alternatives.