# eslint-flat-config-airbnb

A mostly reasonable approach to JavaScript, updated for ESLint 9+.

This fork of the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) updates the rules and configurations to support ESLint 9.0+ while maintaining the core principles of clean, consistent, and modern JavaScript code.

## Why this fork?
- The original [guide](https://github.com/airbnb/javascript) is widely adopted but does not yet support ESLint 9.0+.
- This version ensures compatibility with the latest ESLint rules and best practices.
- Updates may include deprecations, rule refinements, and modern JavaScript features.

## Installation & Usage
To use this updated guide in your project:

```
npm install --save-dev eslint-flat-config-airbnb
```

Extend it in your eslint.config.mjs:

```
import globals from 'globals';
import pluginJs from '@eslint/js';
import tseslint from 'typescript-eslint';
import importPlugin from 'eslint-plugin-import';
import airbnb from 'eslint-flat-config-airbnb';

export default [
    {
        ignores: ['node_modules', 'build', 'dist'],
    },
    {
        files: ['src/**/*.{js,mjs,cjs,ts}'],
    },
    {
        languageOptions: {
            globals: globals.node,
        },
    },
    pluginJs.configs.recommended,
    ...tseslint.configs.recommended,
    importPlugin.flatConfigs.recommended,
    ...airbnb.base,
    {
        settings: {
            'import/resolver': {
                node: {
                    extensions: ['.js', '.jsx', '.ts', '.tsx'],
                },
            },
        },
    },
    {
        rules: {
            semi: ['error', 'always'],
            'no-underscore-dangle': ['error', { allow: ['_id', '__dirname', '__type'] }],
            indent: ['error', 4],
            'template-curly-spacing': ['error', 'always'],
            'object-curly-spacing': ['error', 'always'],
            'computed-property-spacing': ['error', 'always'],
            'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0, maxBOF: 0 }],
            quotes: ['error', 'single', 'avoid-escape'],
            'no-use-before-define': ['error', { functions: false }],
            'prefer-const': 1,
            'max-len': ['error', { code: 200 }],
            complexity: ['error', { max: 15 }],
            'key-spacing': ['error', { beforeColon: false, afterColon: true }],
        },
    },
];
```
