eslint-config-airbnb-flat
Unofficial migration of the airbnb styleguide from eslintrc format to flat config file format.
Setup
Install
npm i -D eslint-config-airbnb-flat
Configure
Base Example:
With "type": "module"
in package.json
(recommended):
import defineConfig from 'eslint-config-airbnb-flat/base';
export default defineConfig({
files: ['path/**/*.js'],
rules: {
// add custom rules
},
});
The default export is a function which accepts custom overrides and returns an optimized version of the eslint-config-airbnb-base config.
- All deprecated rules are disabled.
- eslint-plugin-import was replaced by eslint-plugin-i
- eslint-import-resolver-typescript is used by default to support 'imports' and 'exports' fields in package.json
- eslint-plugin-n and eslint-stylistic were added.
- typescript is auto-detected and works out-of-box (heavily inspired by Anthony Fus config).
Customize
If you want to override one of the rules of the added plugins, make sure to use the corresponding prefix:
Original Prefix | New prefix |
---|---|
i/* |
import/* |
n/* |
node/* |
@typescript-eslint/* |
typescript/* |
@stylistic/* |
stylistic/* |
You can also use only specific configuration files:
import { node } from 'eslint-config-airbnb-flat/configs';
export default [
node
];
Plain Compat
These are just the plain, unomptimized converted configs (use them at your own risk).
import airbnb from 'eslint-config-airbnb-flat/compat';
console.log(Object.keys(configs));
Roadmap
- ✅ bundle (with esbuild to esm)
- 🔳 convert (whole) codebase to typescript
- 🔳
exportcreate type declarations (defineBaseConfig) - ✅ add stylistic plugin and rules
- 🔳 add tests (esp. import/no-unresolved)
- ✅ deprecated: node/no-hide-core-modules, node/no-unsupported-features
- 🔳 node: differentiate esm and cjs globals (?)
- 🔳 support typescript in monorepo (parserOptions.project is set to 'true')
- 🔳 support React (jsx, tsx)