Preferring ES6, readability and low ambiguities. Extends the recommended ruleset with some useful additions.
Follow the below steps to setup ESLint using this custom configuration
npm install eslint --save-dev
npm install @thomaschaplin/eslint-config --save-dev
touch .eslintrc
- Add the below snippet into your
.eslintrc
file - Add the below script snippet into your
package.json
file
{
"extends": ["@thomaschaplin"]
}
"scripts": {
"lint:js": "./node_modules/eslint/bin/eslint.js 'src/**/*.js'",
"lintFull": "npm run lint:js -- --fix"
}
Follow all of the steps for the JavaScript setup
npm install typescript --save-dev
npm install @typescript-eslint/eslint-plugin --save-dev
npm install @typescript-eslint/parser --save-dev
- Add the below snippet into your
.eslintrc
file - Add the below script snippet into your
package.json
file
{
"extends": ["@thomaschaplin"],
"plugins": ["@typescript-eslint"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"modules": true
}
}
}
"scripts": {
"lint:ts": "./node_modules/eslint/bin/eslint.js 'src/**/*.ts'",
"lintFull": "npm run lint:ts -- --fix"
}
Environments: node
, es6
, browser
Unless noted, all rules are errors.
Rule | Description |
---|---|
arrow-parens | Always wrap function arguments in brackets. |
brace-style | Curly brackets start after the keyword, not underneath. |
comma-dangle | Dangling commas in multiline objects, functions, arrays. |
complexity | Maximum cyclomatic complexity of 3 to enforce highly maintaineable code (warning). |
curly | Curly brackets after if statements to avoid ambiguity when line breaks occur. |
eol-last | Empty line at the end of the file. |
func-call-spacing | Brackets () to invoke a function have to stand right next to the function name. |
global-require | require() statements should be at the top of the file (warning). |
linebreak-style | UNIX linebreaks. |
no-await-in-loop | Disallow await in loops (should use Promise.all() instead). |
no-default-export | Only allow named exports for increased consistency and clarity when importing modules. |
no-floating-decimal | Numbers have to be clear, i.e. 0.4 instead of .4 . |
no-implicit-coercion | Converting types from one to another have to be explicit. |
no-lone-blocks | No curly brackets unless necessary. |
no-lonely-if | Use else if instead of a lonely if wrapped inside an else . |
no-loop-func | Functions cannot be declared inside loops, they should be declared outside. |
no-template-curly-in-string | Avoid confusion whether a string is templated or not. |
no-throw-literal | Throw errors explicitly, not just strings or values. |
no-var | Use ES6 block-scopedconst and let , never var . |
one-var | Don't declare multiple variables in one line. |
prefer-const | let should only be used where reassignment is necessary. |
prefer-promise-reject-errors | Promises should be reject ed with a clear error, not a simple value. |
prefer-spread | Use ES6 spread operator instead of difficult to understand ES5 .apply() . |
prefer-template | Use template strings instead of string concatenation (warning). |
quotes | Use unescaped double quotes. |
require-await | async functions should perform an await , otherwise async keyword is unnecessary. |
semi | Don't use semicolons. |
yoda | Don't use unintuitive conditions. |