@searchspring/eslint-config

Our style

Usage no npm install needed!

<script type="module">
  import searchspringEslintConfig from 'https://cdn.skypack.dev/@searchspring/eslint-config';
</script>

README

eslint-config

This is based on the AirBnB style guide, but includes a number of additional plugins and some custom rules for our preferences.

Checkout the index.js for the details.

Plugins

Occasionally look here for new good stuff.

Install

To install just the config, use the line below.

npm i -D @searchspring/eslint-config

It's recommended to also install the Searchspring prettier config:

npm i -D @searchspring/prettier

In order to install all the related dependencies and a typical configuration for a JS project, also run the following:

npm i -D eslint husky lint-staged prettier fixpack

Then update your package.json with the following:

{
    husky: {
        hooks: {
            // Runs staged files for a commit through the scripts below
            'pre-commit': 'lint-staged',
        },
    },
    // Scripts for staged files
    'lint-staged': {
        './package.json': ['fixpack', 'prettier --write'],
        '*.{js,ts}': ['prettier --write', 'eslint --fix'],
    },
    scripts: {
        format: 'prettier --write "**/*.{js,ts,json}"',
        lint: 'eslint --fix "**/*.{js,ts}"',
        // Important to run the fixpack before format, as format will fix the indentation
        style: 'fixpack && npm run format && npm run lint',
    },
}

Additional config if you are using Mocha

Update your eslint configuration with following:

    env: {
        ...
+		mocha: true,
    },
    extends: [
        ...
+		'plugin:mocha/recommended',
    ]
+	plugins: [..., 'mocha'],
    rules: {
        ...
+		'mocha/handle-done-callback': 'error',
+		'mocha/max-top-level-suites': 'off',
+		'mocha/no-exclusive-tests': 'error',
+		'mocha/no-global-tests': 'error',
+		'mocha/no-hooks-for-single-case': 'off',
+		'mocha/no-identical-title': 'error',
+		'mocha/no-mocha-arrows': 'off',
+		'mocha/no-nested-tests': 'error',
+		'mocha/no-pending-tests': 'error',
+		'mocha/no-return-and-callback': 'error',
+		'mocha/no-sibling-hooks': 'error',
    }