chore: Adopt no-unused-vars-experimental for eslint to prevent incorrect linting errors #981
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
There are several occasions where eslint incorrectly flags code claiming it violates the
@typescript-eslint/no-unused-vars
rule, for example while exporting namespaces that don't have any self-referencing in the typings files.We can adopt no-unused-vars-experimental, which "leverages the TypeScript compiler's unused variable checks to report", and seemingly doesn't fall victim to the previous incorrect claims.
Approach
Simply enable the experimental rule and disable the recommended rule. However, once doing that the following error would appear:
To resolve this error, the following can be added:
However, I realized later that not all files are mentioned in the current
tsconfig.json
. Apart from adding aninclude
with a glob adding all src/test files, another option is to create a dedicated config just for linting, which is the approach taken here.Another option was
createDefaultProgram: true
, but that has complexityO(n^m)
,n
= # files not included in config,m
= average depth of the dependency tree of those respective files. I ran it with this setting and found it took ~1 minute to lint on my local computer so far from ideal.