@exercism/eslint-config-tooling
This is the shared eslint
configuration used by various pieces of tooling, such as the JavaScript Analyzer, Representer, and Test Runner.
The same configuration is used for the TypeScript tooling as well as various other pieces of technology.
Shareable configs are designed to work with the extends
feature of .eslintrc
files.
This means you can use the same configuration Exercism uses in your on projects!
Usage
To use the configuration for students, open your eslint configuration file, and add the following value to extends
. For example, for JSON based configuration files:
{
"extends": "@exercism/eslint-config-tooling"
}
Configuration
Find the configuration here.
It's goal is to help detect and prevent common problems, and enforce a consistent code style.
The rules are based on:
It also includes the prettier
plugin because we use prettier
to achieve consistent code formatting.
This plugin turns off rules that conflict with formatting.
Because most of the tooling is primarily focussing on running on Node, only node
and es2021
are turned on as environment, but when extending this configuration, you can add more (or turn those off).
Type-based rules
In order to be able to use type information in the eslint rules, the appropiate parser option must be set.
{
"parserOptions": {
"tsconfigRootDir": __dirname,
"project": ["./tsconfig.json"]
}
}
Setup with multiple tsconfig.json and ts-paths
When working with multiple folders and a composite tsconfig.json
structure and/or using the compilerOptions
with paths
, you might have difficulty resolving issues around it not being able to find files, definitions, and more.
A common problem is eslint
complaining about files not being present or included in the configuration.
Another common problem is types reporting as any
to eslint
, even when they do resolve inside the editor.
An easy way to resolve this is to create a new tsconfig.eslint.json
that includes all the files in the project, including the test files.
That tsconfig.eslint.json
should then be referred in project
, instead of the regular configuration file.
You can check out the JavaScript Analyzer for an example.