If ESLint is running in the terminal but not inside VSCode, it is probably
because the extension is unable to detect both the local and the global
node_modules folders.
To verify, press Ctrl+Shift+U in VSCode to open
the Output panel after opening a JavaScript file with a known eslint issue.
If it shows Failed to load the ESLint library for the document {documentName}.js -or- if the Problems tab shows an error or a warning that
refers to eslint, then VSCode is having a problem trying to detect the path.
If yes, then set it manually by configuring the eslint.nodePath in the VSCode
settings (settings.json). Give it the full path (for example, like
"eslint.nodePath": "C:\\Program Files\\nodejs") -- using environment variables
is currently not supported.
This option has been documented at the ESLint extension page.
ESLint not working in VS Code?
Do I need eslint ? Or to learn VSCode debugger?
Help me understand why installing a plugin is not enough (ESLint)...
visual studio code - In VSCode, how do I effectively run eslint --fix and prettier --write on "Format Document"? - Stack Overflow
Videos
If ESLint is running in the terminal but not inside VSCode, it is probably
because the extension is unable to detect both the local and the global
node_modules folders.
To verify, press Ctrl+Shift+U in VSCode to open
the Output panel after opening a JavaScript file with a known eslint issue.
If it shows Failed to load the ESLint library for the document {documentName}.js -or- if the Problems tab shows an error or a warning that
refers to eslint, then VSCode is having a problem trying to detect the path.
If yes, then set it manually by configuring the eslint.nodePath in the VSCode
settings (settings.json). Give it the full path (for example, like
"eslint.nodePath": "C:\\Program Files\\nodejs") -- using environment variables
is currently not supported.
This option has been documented at the ESLint extension page.
In my case, since I was using TypeScript with React, the fix was simply to tell ESLint to also validate these files. This needs to go in your user settings:
"eslint.validate": [ "javascript", "javascriptreact", "html", "typescriptreact" ],
I am a hobbyist and have never written a program longer than about 400 lines. I have had no luck installing Eslint, and note that there is a bit of negative comment about it on the web. Also I have just started to get into VSCode debugger and am finding it hard going. Question: Do I need Eslint and VSCode Debugger to analyse a 400 line program, or should I just stick to console.log? I seem to be spending more time trying to figure out these 2 items than actual coding. Would appreciate some guidance. Thanks.
I came from JetBrains universe, where everything is easy and IDEs code for you and you just have to sit and watch (ok no). So, I expected a linter for JS in VSCode but there isn't so when I use var it says nothing (it's supposely deprecated/bad practice).
I proceed to install ESLinter and it does nothing. YOu have to type bizarre commands, add a file to your project (I dont know how to do that etc.).
Should I go back to IntelliJ and pay 50€/month? I'm a little bit frustrated with this maximalist need to set things up. Can you enlight me?
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 :).