eslint shows the spent times of rules if the environment variable TIMING is set.
For example:
$ TIMING=1 eslint lib
Rule | Time (ms) | Relative
:----------------------------|----------:|--------:
valid-jsdoc | 203.798 | 6.7%
camelcase | 142.146 | 4.6%
no-unmodified-loop-condition | 136.811 | 4.5%
indent | 127.138 | 4.2%
no-undefined | 124.525 | 4.1%
keyword-spacing | 85.397 | 2.8%
space-in-parens | 76.179 | 2.5%
no-this-before-super | 72.317 | 2.4%
no-implied-eval | 69.945 | 2.3%
space-infix-ops | 57.128 | 1.9%
See also the official docs on Profile Rule Performance.
Answer from mysticatea on Stack OverflowVideos
eslint shows the spent times of rules if the environment variable TIMING is set.
For example:
$ TIMING=1 eslint lib
Rule | Time (ms) | Relative
:----------------------------|----------:|--------:
valid-jsdoc | 203.798 | 6.7%
camelcase | 142.146 | 4.6%
no-unmodified-loop-condition | 136.811 | 4.5%
indent | 127.138 | 4.2%
no-undefined | 124.525 | 4.1%
keyword-spacing | 85.397 | 2.8%
space-in-parens | 76.179 | 2.5%
no-this-before-super | 72.317 | 2.4%
no-implied-eval | 69.945 | 2.3%
space-infix-ops | 57.128 | 1.9%
See also the official docs on Profile Rule Performance.
I found that removing slow rules didn't really help that much, as loading eslint and parsing files takes a while.
It is possible to use the --cache option of eslint (docs) to speed things up substantially.
When using eslint to "lint-as-you-type" in various editors, installing eslint_d allows running eslint as a daemon, and saves the node loading time.
On the project I'm currently working on, combining both eslint_d and --cache brought the linting time from 4+ seconds to 0.17!
Hi all, I've been using neovim for about 6 months now and really enjoy it, but my only issue is that I find the feedback loop from eslint is incredibly slow - in the seconds range, compared to the same project in vscode. I assume this is an implementation issue on my end, but I have no idea what to do to resolve this.
I've also noticed that in projects that use the typescript-eslint parser, sometimes node processes just go through the roof.. which again is not an issue with whatever vscode is doing.
Thanks in advance for the help!!
For context:
I have a Isomorphic JS project that is considered that uses nodeJS/React, the app uses single EsLint Configuration for both ends, the App uses so many linting rules, both plugins and custom ones written inside the team, the problem we have now is pre-commit checks are taking forever to finish (roughly 30 seconds)
We tried to remove all linting rules that we don't and the pre-commit checks are taking now around 10s
better but still bad, we tried also to look through alternatives like https://oxc.rs/ but the problem with OXC we could not reuse our existent rules, we are ok to rewrite our custom rules in any other language or any form that even if the new form does not use esTree for AST.
And to make EsLint faster we made some hacks including replace some rules with tsconfig flag checks like noUnusedLocals.
The question:
Do you have any suggestion for me to make the linting faster?
I am certainly we are running out of ideas.
UPDATE:
I tried Biome, my problem with migrating into Biome is it does not have support to our custom rules, since they don't support plugins yet, https://github.com/biomejs/biome/discussions/1649
Here are our custom rules we use:
Throw Warnings when specific deprecated dependancies being imported
Fixer function that replaces function call with a inversified class
Warn whenever localstorage being used directly instead of using a react-hook made internally
Checks if try catch does not have error cause
Warning when a dev imports code from another monorepo