$ cnpm install eslint-plugin-unicorn
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": 2020,
"sourceType": "module"
},
"plugins": [
"unicorn"
],
"rules": {
"unicorn/better-regex": "error",
"unicorn/catch-error-name": "error",
"unicorn/consistent-function-scoping": "error",
"unicorn/custom-error-definition": "off",
"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": "error",
"unicorn/new-for-builtins": "error",
"unicorn/no-abusive-eslint-disable": "error",
"unicorn/no-array-instanceof": "error",
"unicorn/no-console-spaces": "error",
"unicorn/no-fn-reference-in-iterator": "error",
"unicorn/no-for-loop": "error",
"unicorn/no-hex-escape": "error",
"unicorn/no-keyword-prefix": "off",
"no-nested-ternary": "off",
"unicorn/no-nested-ternary": "error",
"unicorn/no-new-buffer": "error",
"unicorn/no-null": "error",
"unicorn/no-object-as-default-parameter": "error",
"unicorn/no-process-exit": "error",
"unicorn/no-reduce": "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/prefer-add-event-listener": "error",
"unicorn/prefer-array-find": "error",
"unicorn/prefer-dataset": "error",
"unicorn/prefer-event-key": "error",
"unicorn/prefer-flat-map": "error",
"unicorn/prefer-includes": "error",
"unicorn/prefer-modern-dom-apis": "error",
"unicorn/prefer-negative-index": "error",
"unicorn/prefer-node-append": "error",
"unicorn/prefer-node-remove": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-optional-catch-binding": "error",
"unicorn/prefer-query-selector": "error",
"unicorn/prefer-reflect-apply": "error",
"unicorn/prefer-replace-all": "off",
"unicorn/prefer-set-has": "error",
"unicorn/prefer-spread": "error",
"unicorn/prefer-starts-ends-with": "error",
"unicorn/prefer-string-slice": "error",
"unicorn/prefer-text-content": "error",
"unicorn/prefer-trim-start-end": "error",
"unicorn/prefer-type-error": "error",
"unicorn/prevent-abbreviations": "error",
"unicorn/string-content": "off",
"unicorn/throw-new-error": "error"
}
}
}
Error
subclassing. (fixable)message
value when throwing a built-in error.length
property of a value. (partly fixable).
. (fixable)new
for all builtins, except String
, Number
, Boolean
, Symbol
and BigInt
. (fixable)eslint-disable
comments.Array.isArray()
instead of instanceof Array
. (fixable)console.log
parameters. (fixable)for
loop that can be replaced with a for-of
loop. (partly fixable)new
or class
.Buffer.from()
and Buffer.alloc()
instead of the deprecated new Buffer()
. (fixable)null
literal.process.exit()
.Array#reduce()
and Array#reduceRight()
.undefined
. (fixable).addEventListener()
and .removeEventListener()
over on
-functions. (partly fixable).find(…)
over the first element from .filter(…)
. (partly fixable).dataset
on DOM elements over .setAttribute(…)
. (fixable)KeyboardEvent#key
over KeyboardEvent#keyCode
. (partly fixable).flatMap(…)
over .map(…).flat()
. (fixable).includes()
over .indexOf()
when checking for existence or non-existence. (fixable).before()
over .insertBefore()
, .replaceWith()
over .replaceChild()
, prefer one of .before()
, .after()
, .append()
or .prepend()
over insertAdjacentText()
and insertAdjacentElement()
. (fixable).length - index
for {String,Array,TypedArray}#slice()
and Array#splice()
. (fixable)Node#append()
over Node#appendChild()
. (fixable)childNode.remove()
over parentNode.removeChild(childNode)
. (fixable)Number
static properties over global ones. (fixable)catch
binding parameter. (fixable).querySelector()
over .getElementById()
, .querySelectorAll()
over .getElementsByClassName()
and .getElementsByTagName()
. (partly fixable)Reflect.apply()
over Function#apply()
. (fixable)String#replaceAll()
over regex searches with the global flag. (fixable)Set#has()
over Array#includes()
when checking for existence or non-existence. (fixable)Array.from()
. (fixable)String#startsWith()
& String#endsWith()
over more complex alternatives. (partly fixable)String#slice()
over String#substr()
and String#substring()
. (partly fixable).textContent
over .innerText
. (fixable)String#trimStart()
/ String#trimEnd()
over String#trimLeft()
/ String#trimRight()
. (fixable)TypeError
in type checking conditions. (fixable)new
when throwing an error. (fixable)prefer-exponentiation-operator
rule instead.better-regex
.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.
Copyright 2013 - present © cnpmjs.org