Package Exports
- eslint-plugin-unicorn
- eslint-plugin-unicorn/package.json
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (eslint-plugin-unicorn) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
eslint-plugin-unicorn 

Various awesome ESLint rules
You might want to check out XO, which includes this plugin.
Propose or contribute a new rule ➡
Install
$ npm install --save-dev eslint eslint-plugin-unicorn
Usage
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-static-only-class": "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": "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"
}
}
}
Rules
- 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-static-only-class - Forbid classes that only have static members. (partly fixable)
- 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 - Prefer
Array#flat()
over legacy techniques to flatten arrays. (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()
andArray#some()
when checking for existence or non-existence. (partly 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(…)
,Array#concat(…)
andArray#slice()
. (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)
Deprecated Rules
Recommended config
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.