Shareable eslint configurations package for oat-sa
projects.
All extensions, projects and libraries (oat-sa
wide) should use the shared config as a basis.
Current extension contains a pack of shareable configs depending on the stack and target.
See this to understand what a shareable config is.
This package includes legacy configs (eslint version < 9) and the new flat configs (eslint version >=9).
If you are using Prettier in your project (you should), install
eslint-config-prettier
and use it as you will see in the examples: it should always be the last config in the array. This will turn off rules that conflict with our Prettier config
In your eslint.config.js
file you can compose flat configs easily. To use the svelte flat config do this:
- For a new project using vite and vitest
import configs from '@oat-sa/eslint-config-tao/flat/svelte';
import eslintConfigPrettier from 'eslint-config-prettier';
/** @type { import("eslint").Linter.FlatConfig[] } */
export default [...configs['flat/svelte-base'], ...configs['flat/vitest'], eslintConfigPrettier];
- For a project using babel and jest
import configs from '@oat-sa/eslint-config-tao/flat/svelte';
import eslintConfigPrettier from 'eslint-config-prettier';
/** @type { import("eslint").Linter.FlatConfig[] } */
export default [...configs['flat/svelte-base'], ...configs['flat/babel-parser'] ...configs['flat/jest'], eslintConfigPrettier];
Note: the Svelte flat config is currently the only flat config in this package
Use shareable eslint configurations via the extends
config property.
-
Default configuration. Edit the
.eslintrc.js
of your project:module.exports = { extends: '@oat-sa/eslint-config-tao' };
-
Configuration for AMD modules:
module.exports = { extends: '@oat-sa/eslint-config-tao/amd' };
-
Configuration for svelte with jest rules:
module.exports = { extends: '@oat-sa/eslint-config-tao/svelte-jest-legacy' };
-
Configuration for svelte with vitest rules:
module.exports = { extends: '@oat-sa/eslint-config-tao/svelte-vitest-legacy' };
-
Configuration for node:
module.exports = { extends: '@oat-sa/eslint-config-tao/node' };
-
Configuration for cypress:
module.exports = { extends: '@oat-sa/eslint-config-tao/cypress' };
If you install eslint v9 and you still want to use the legacy config, in your package.json you can use this flag:
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint .
If you want to stay on eslint v8.57 (below v8.57 flat config doesn't work) but use the flat config, in your package.json you can do :
"lint": "ESLINT_USE_FLAT_CONFIG=true eslint .
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './svelte' is not defined by "exports" in /[some_path]/node_modules/@oat-sa/eslint-config-tao/package.json
Referenced from: /[some_path]/.eslintrc.cjs
It means you are coming from a version lower than 4.0.0 and you need to switch the config name you are using in your .eslintrc.cjs
file from
extends: ['@oat-sa/eslint-config-tao/svelte'],
to
extends: ['@oat-sa/eslint-config-tao/svelte-jest-legacy'],
or
extends: ['@oat-sa/eslint-config-tao/svelte-vitest-legacy'],
Make sure that you use this order extending configs (the svelte config should be after the cypress config):
extends: ['@oat-sa/eslint-config-tao/cypress', '@oat-sa/eslint-config-tao/svelte-jest-legacy']
Otherwise, you'll get this error in every .svelte
file:
1:0 error Parsing error: This experimental syntax requires enabling one of the following parser plugin(s): "jsx", "flow", "typescript". (1:0)
If you are using eslint 8, you will need to update it to version 8.57.0 in order to avoid those dependency issues when running npm install
. Also, configs in this package use es2024
and this is available in eslint 8.57.0.
See changelog here