Various awesome ESLint rules
You might want to check out XO, which includes this plugin.
Propose or contribute a new rule ➡
$ npm install --save-dev eslint eslint-plugin-unicorn
Configure it in package.json
.
{
"name": "my-awesome-project",
"eslintConfig": {
"env": {
"es6": true
},
"parserOptions": {
"ecmaVersion": 2021,
"sourceType": "module"
},
"plugins": [
"unicorn"
],
"rules": {
"unicorn/better-regex": "error",
"unicorn/catch-error-name": "error",
"unicorn/consistent-destructuring": "error",
"unicorn/consistent-function-scoping": "error",
"unicorn/custom-error-definition": "off",
"unicorn/empty-brace-spaces": "error",
"unicorn/error-message": "error",
"unicorn/escape-case": "error",
"unicorn/expiring-todo-comments": "error",
"unicorn/explicit-length-check": "error",
"unicorn/filename-case": "error",
"unicorn/import-index": "off",
"unicorn/import-style": "error",
"unicorn/new-for-builtins": "error",
"unicorn/no-abusive-eslint-disable": "error",
"unicorn/no-array-callback-reference": "error",
"unicorn/no-array-for-each": "error",
"unicorn/no-array-push-push": "error",
"unicorn/no-array-reduce": "error",
"unicorn/no-console-spaces": "error",
"unicorn/no-for-loop": "error",
"unicorn/no-hex-escape": "error",
"unicorn/no-instanceof-array": "error",
"unicorn/no-keyword-prefix": "off",
"unicorn/no-lonely-if": "error",
"no-nested-ternary": "off",
"unicorn/no-nested-ternary": "error",
"unicorn/no-new-array": "error",
"unicorn/no-new-buffer": "error",
"unicorn/no-null": "error",
"unicorn/no-object-as-default-parameter": "error",
"unicorn/no-process-exit": "error",
"unicorn/no-this-assignment": "error",
"unicorn/no-unreadable-array-destructuring": "error",
"unicorn/no-unsafe-regex": "off",
"unicorn/no-unused-properties": "off",
"unicorn/no-useless-undefined": "error",
"unicorn/no-zero-fractions": "error",
"unicorn/number-literal-case": "error",
"unicorn/numeric-separators-style": "off",
"unicorn/prefer-add-event-listener": "error",
"unicorn/prefer-array-find": "error",
"unicorn/prefer-array-flat-map": "error",
"unicorn/prefer-array-index-of": "error",
"unicorn/prefer-array-some": "error",
"unicorn/prefer-date-now": "error",
"unicorn/prefer-default-parameters": "error",
"unicorn/prefer-dom-node-append": "error",
"unicorn/prefer-dom-node-dataset": "error",
"unicorn/prefer-dom-node-remove": "error",
"unicorn/prefer-dom-node-text-content": "error",
"unicorn/prefer-includes": "error",
"unicorn/prefer-keyboard-event-key": "error",
"unicorn/prefer-math-trunc": "error",
"unicorn/prefer-modern-dom-apis": "error",
"unicorn/prefer-negative-index": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-optional-catch-binding": "error",
"unicorn/prefer-query-selector": "error",
"unicorn/prefer-reflect-apply": "error",
"unicorn/prefer-regexp-test": "error",
"unicorn/prefer-set-has": "error",
"unicorn/prefer-spread": "error",
"unicorn/prefer-string-replace-all": "off",
"unicorn/prefer-string-slice": "error",
"unicorn/prefer-string-starts-ends-with": "error",
"unicorn/prefer-string-trim-start-end": "error",
"unicorn/prefer-ternary": "off",
"unicorn/prefer-type-error": "error",
"unicorn/prevent-abbreviations": "error",
"unicorn/string-content": "off",
"unicorn/throw-new-error": "error"
}
}
}
- better-regex - Improve regexes by making them shorter, consistent, and safer. (fixable)
- catch-error-name - Enforce a specific parameter name in catch clauses. (fixable)
- consistent-destructuring - Use destructured variables over properties. (partly fixable)
- consistent-function-scoping - Move function definitions to the highest possible scope.
- custom-error-definition - Enforce correct
Error
subclassing. (fixable) - empty-brace-spaces - Enforce no spaces between braces. (fixable)
- error-message - Enforce passing a
message
value when creating a built-in error. - escape-case - Require escape sequences to use uppercase values. (fixable)
- expiring-todo-comments - Add expiration conditions to TODO comments.
- explicit-length-check - Enforce explicitly comparing the
length
property of a value. (partly fixable) - filename-case - Enforce a case style for filenames.
- import-index - Enforce importing index files with
.
. (fixable) - import-style - Enforce specific import styles per module.
- new-for-builtins - Enforce the use of
new
for all builtins, exceptString
,Number
,Boolean
,Symbol
andBigInt
. (partly fixable) - no-abusive-eslint-disable - Enforce specifying rules to disable in
eslint-disable
comments. - no-array-callback-reference - Prevent passing a function reference directly to iterator methods.
- no-array-for-each - Prefer
for…of
overArray#forEach(…)
. (partly fixable) - no-array-push-push - Enforce combining multiple
Array#push()
into one call. (partly fixable) - no-array-reduce - Disallow
Array#reduce()
andArray#reduceRight()
. - no-console-spaces - Do not use leading/trailing space between
console.log
parameters. (fixable) - no-for-loop - Do not use a
for
loop that can be replaced with afor-of
loop. (partly fixable) - no-hex-escape - Enforce the use of Unicode escapes instead of hexadecimal escapes. (fixable)
- no-instanceof-array - Require
Array.isArray()
instead ofinstanceof Array
. (fixable) - no-keyword-prefix - Disallow identifiers starting with
new
orclass
. - no-lonely-if - Disallow
if
statements as the only statement inif
blocks withoutelse
. (fixable) - no-nested-ternary - Disallow nested ternary expressions. (partly fixable)
- no-new-array - Disallow
new Array()
. (partly fixable) - no-new-buffer - Enforce the use of
Buffer.from()
andBuffer.alloc()
instead of the deprecatednew Buffer()
. (partly fixable) - no-null - Disallow the use of the
null
literal. - no-object-as-default-parameter - Disallow the use of objects as default parameters.
- no-process-exit - Disallow
process.exit()
. - no-this-assignment - Disallow assigning
this
to a variable. - no-unreadable-array-destructuring - Disallow unreadable array destructuring. (partly fixable)
- no-unsafe-regex - Disallow unsafe regular expressions.
- no-unused-properties - Disallow unused object properties.
- no-useless-undefined - Disallow useless
undefined
. (fixable) - no-zero-fractions - Disallow number literals with zero fractions or dangling dots. (fixable)
- number-literal-case - Enforce proper case for numeric literals. (fixable)
- numeric-separators-style - Enforce the style of numeric separators by correctly grouping digits. (fixable)
- prefer-add-event-listener - Prefer
.addEventListener()
and.removeEventListener()
overon
-functions. (partly fixable) - prefer-array-find - Prefer
.find(…)
over the first element from.filter(…)
. (partly fixable) - prefer-array-flat-map - Prefer
.flatMap(…)
over.map(…).flat()
. (fixable) - prefer-array-index-of - Prefer
Array#indexOf()
overArray#findIndex()
when looking for the index of an item. (partly fixable) - prefer-array-some - Prefer
.some(…)
over.find(…)
. - prefer-date-now - Prefer
Date.now()
to get the number of milliseconds since the Unix Epoch. (fixable) - prefer-default-parameters - Prefer default parameters over reassignment. (fixable)
- prefer-dom-node-append - Prefer
Node#append()
overNode#appendChild()
. (fixable) - prefer-dom-node-dataset - Prefer using
.dataset
on DOM elements over.setAttribute(…)
. (fixable) - prefer-dom-node-remove - Prefer
childNode.remove()
overparentNode.removeChild(childNode)
. (fixable) - prefer-dom-node-text-content - Prefer
.textContent
over.innerText
. (fixable) - prefer-includes - Prefer
.includes()
over.indexOf()
when checking for existence or non-existence. (fixable) - prefer-keyboard-event-key - Prefer
KeyboardEvent#key
overKeyboardEvent#keyCode
. (partly fixable) - prefer-math-trunc - Enforce the use of
Math.trunc
instead of bitwise operators. (partly fixable) - prefer-modern-dom-apis - Prefer
.before()
over.insertBefore()
,.replaceWith()
over.replaceChild()
, prefer one of.before()
,.after()
,.append()
or.prepend()
overinsertAdjacentText()
andinsertAdjacentElement()
. (fixable) - prefer-negative-index - Prefer negative index over
.length - index
for{String,Array,TypedArray}#slice()
andArray#splice()
. (fixable) - prefer-number-properties - Prefer
Number
static properties over global ones. (fixable) - prefer-optional-catch-binding - Prefer omitting the
catch
binding parameter. (fixable) - prefer-query-selector - Prefer
.querySelector()
over.getElementById()
,.querySelectorAll()
over.getElementsByClassName()
and.getElementsByTagName()
. (partly fixable) - prefer-reflect-apply - Prefer
Reflect.apply()
overFunction#apply()
. (fixable) - prefer-regexp-test - Prefer
RegExp#test()
overString#match()
andRegExp#exec()
. (fixable) - prefer-set-has - Prefer
Set#has()
overArray#includes()
when checking for existence or non-existence. (fixable) - prefer-spread - Prefer the spread operator over
Array.from()
andArray#concat()
. (partly fixable) - prefer-string-replace-all - Prefer
String#replaceAll()
over regex searches with the global flag. (fixable) - prefer-string-slice - Prefer
String#slice()
overString#substr()
andString#substring()
. (partly fixable) - prefer-string-starts-ends-with - Prefer
String#startsWith()
&String#endsWith()
overRegExp#test()
. (fixable) - prefer-string-trim-start-end - Prefer
String#trimStart()
/String#trimEnd()
overString#trimLeft()
/String#trimRight()
. (fixable) - prefer-ternary - Prefer ternary expressions over simple
if-else
statements. (fixable) - prefer-type-error - Enforce throwing
TypeError
in type checking conditions. (fixable) - prevent-abbreviations - Prevent abbreviations. (partly fixable)
- string-content - Enforce better string content. (fixable)
- throw-new-error - Require
new
when throwing an error. (fixable)
This plugin exports a recommended
config that enforces good practices.
Enable it in your package.json
with the extends
option:
{
"name": "my-awesome-project",
"eslintConfig": {
"extends": "plugin:unicorn/recommended"
}
}
See the ESLint docs for more information about extending config files.
Note: This config will also enable the correct parser options and environment.