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.
- AirBnB: https://github.com/airbnb/javascript
- Import: https://github.com/benmosher/eslint-plugin-import
- ESLint Comments: https://github.com/mysticatea/eslint-plugin-eslint-comments
- SonarJS: https://github.com/SonarSource/eslint-plugin-sonarjs
- Promise: https://github.com/xjamundx/eslint-plugin-promise
- Prettier-ESLint compatibility: https://github.com/prettier/eslint-config-prettier
- Unicorn: https://github.com/sindresorhus/eslint-plugin-unicorn
Occasionally look here for new good stuff.
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',
},
}
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',
}