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-document-cookie": "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": "error",
"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-module": "error",
"unicorn/prefer-negative-index": "error",
"unicorn/prefer-node-protocol": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-object-has-own": "off",
"unicorn/prefer-optional-catch-binding": "error",
"unicorn/prefer-prototype-methods": "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-switch": "error",
"unicorn/prefer-ternary": "error",
"unicorn/prefer-type-error": "error",
"unicorn/prevent-abbreviations": "error",
"unicorn/require-array-join-separator": "error",
"unicorn/require-number-to-fixed-digits-argument": "error",
"unicorn/string-content": "off",
"unicorn/throw-new-error": "error"
}
}
}
Rules
Each rule has emojis denoting:
- β
if it belongs to the
recommended
configuration - π§ if some problems reported by the rule are automatically fixable by the
--fix
command line option - π‘ if some problems reported by the rule are manually fixable by editor suggestions
Name | Description | β | π§ | π‘ |
---|---|---|---|---|
better-regex | Improve regexes by making them shorter, consistent, and safer. | β | π§ | |
catch-error-name | Enforce a specific parameter name in catch clauses. | β | π§ | |
consistent-destructuring | Use destructured variables over properties. | β | π§ | π‘ |
consistent-function-scoping | Move function definitions to the highest possible scope. | β | ||
custom-error-definition | Enforce correct Error subclassing. |
π§ | ||
empty-brace-spaces | Enforce no spaces between braces. | β | π§ | |
error-message | Enforce passing a message value when creating a built-in error. |
β | ||
escape-case | Require escape sequences to use uppercase values. | β | π§ | |
expiring-todo-comments | Add expiration conditions to TODO comments. | β | ||
explicit-length-check | Enforce explicitly comparing the length or size property of a value. |
β | π§ | π‘ |
filename-case | Enforce a case style for filenames. | β | ||
import-index | Enforce importing index files with . . |
π§ | ||
import-style | Enforce specific import styles per module. | β | ||
new-for-builtins | Enforce the use of new for all builtins, except String , Number , Boolean , Symbol and BigInt . |
β | π§ | |
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 over Array#forEach(β¦) . |
β | π§ | |
no-array-push-push | Enforce combining multiple Array#push() into one call. |
β | π§ | π‘ |
no-array-reduce | Disallow Array#reduce() and Array#reduceRight() . |
β | ||
no-console-spaces | Do not use leading/trailing space between console.log parameters. |
β | π§ | |
no-document-cookie | Do not use document.cookie directly. |
β | ||
no-for-loop | Do not use a for loop that can be replaced with a for-of loop. |
β | π§ | |
no-hex-escape | Enforce the use of Unicode escapes instead of hexadecimal escapes. | β | π§ | |
no-instanceof-array | Require Array.isArray() instead of instanceof Array . |
β | π§ | |
no-keyword-prefix | Disallow identifiers starting with new or class . |
|||
no-lonely-if | Disallow if statements as the only statement in if blocks without else . |
β | π§ | |
no-nested-ternary | Disallow nested ternary expressions. | β | π§ | |
no-new-array | Disallow new Array() . |
β | π§ | π‘ |
no-new-buffer | Enforce the use of Buffer.from() and Buffer.alloc() instead of the deprecated new Buffer() . |
β | π§ | π‘ |
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. | β | π§ | |
no-this-assignment | Disallow assigning this to a variable. |
β | ||
no-unreadable-array-destructuring | Disallow unreadable array destructuring. | β | π§ | |
no-unsafe-regex | Disallow unsafe regular expressions. | |||
no-unused-properties | Disallow unused object properties. | |||
no-useless-undefined | Disallow useless undefined . |
β | π§ | |
no-zero-fractions | Disallow number literals with zero fractions or dangling dots. | β | π§ | |
number-literal-case | Enforce proper case for numeric literals. | β | π§ | |
numeric-separators-style | Enforce the style of numeric separators by correctly grouping digits. | β | π§ | |
prefer-add-event-listener | Prefer .addEventListener() and .removeEventListener() over on -functions. |
β | π§ | |
prefer-array-find | Prefer .find(β¦) over the first element from .filter(β¦) . |
β | π§ | π‘ |
prefer-array-flat | Prefer Array#flat() over legacy techniques to flatten arrays. |
β | π§ | |
prefer-array-flat-map | Prefer .flatMap(β¦) over .map(β¦).flat() . |
β | π§ | |
prefer-array-index-of | Prefer Array#indexOf() over Array#findIndex() when looking for the index of an item. |
β | π§ | π‘ |
prefer-array-some | Prefer .some(β¦) over .find(β¦) . |
β | π‘ | |
prefer-date-now | Prefer Date.now() to get the number of milliseconds since the Unix Epoch. |
β | π§ | |
prefer-default-parameters | Prefer default parameters over reassignment. | β | π§ | π‘ |
prefer-dom-node-append | Prefer Node#append() over Node#appendChild() . |
β | π§ | |
prefer-dom-node-dataset | Prefer using .dataset on DOM elements over .setAttribute(β¦) . |
β | π§ | |
prefer-dom-node-remove | Prefer childNode.remove() over parentNode.removeChild(childNode) . |
β | π§ | π‘ |
prefer-dom-node-text-content | Prefer .textContent over .innerText . |
β | π§ | |
prefer-includes | Prefer .includes() over .indexOf() and Array#some() when checking for existence or non-existence. |
β | π§ | π‘ |
prefer-keyboard-event-key | Prefer KeyboardEvent#key over KeyboardEvent#keyCode . |
β | π§ | |
prefer-math-trunc | Enforce the use of Math.trunc instead of bitwise operators. |
β | π§ | π‘ |
prefer-modern-dom-apis | Prefer .before() over .insertBefore() , .replaceWith() over .replaceChild() , prefer one of .before() , .after() , .append() or .prepend() over insertAdjacentText() and insertAdjacentElement() . |
β | π§ | |
prefer-module | Prefer JavaScript modules (ESM) over CommonJS. | β | π§ | π‘ |
prefer-negative-index | Prefer negative index over .length - index for {String,Array,TypedArray}#slice() , Array#splice() and Array#at() . |
β | π§ | |
prefer-node-protocol | Prefer using the node: protocol when importing Node.js builtin modules. |
β | π§ | |
prefer-number-properties | Prefer Number static properties over global ones. |
β | π§ | π‘ |
prefer-object-has-own | Prefer Object.hasOwn(β¦) over Object.prototype.hasOwnProperty.call(β¦) . |
π§ | ||
prefer-optional-catch-binding | Prefer omitting the catch binding parameter. |
β | π§ | |
prefer-prototype-methods | Prefer borrowing methods from the prototype instead of the instance. | β | π§ | |
prefer-query-selector | Prefer .querySelector() over .getElementById() , .querySelectorAll() over .getElementsByClassName() and .getElementsByTagName() . |
β | π§ | |
prefer-reflect-apply | Prefer Reflect.apply() over Function#apply() . |
β | π§ | |
prefer-regexp-test | Prefer RegExp#test() over String#match() and RegExp#exec() . |
β | π§ | |
prefer-set-has | Prefer Set#has() over Array#includes() when checking for existence or non-existence. |
β | π§ | π‘ |
prefer-spread | Prefer the spread operator over Array.from(β¦) , Array#concat(β¦) and Array#slice() . |
β | π§ | π‘ |
prefer-string-replace-all | Prefer String#replaceAll() over regex searches with the global flag. |
π§ | ||
prefer-string-slice | Prefer String#slice() over String#substr() and String#substring() . |
β | π§ | |
prefer-string-starts-ends-with | Prefer String#startsWith() & String#endsWith() over RegExp#test() . |
β | π§ | π‘ |
prefer-string-trim-start-end | Prefer String#trimStart() / String#trimEnd() over String#trimLeft() / String#trimRight() . |
β | π§ | |
prefer-switch | Prefer switch over multiple else-if . |
β | π§ | |
prefer-ternary | Prefer ternary expressions over simple if-else statements. |
β | π§ | |
prefer-type-error | Enforce throwing TypeError in type checking conditions. |
β | π§ | |
prevent-abbreviations | Prevent abbreviations. | β | π§ | |
require-array-join-separator | Enforce using the separator argument with Array#join() . |
β | π§ | |
require-number-to-fixed-digits-argument | Enforce using the digits argument with Number#toFixed() . |
β | π§ | |
string-content | Enforce better string content. | π§ | π‘ | |
throw-new-error | Require new when throwing an error. |
β | π§ |
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.