What is eslint-plugin-unicorn?
The eslint-plugin-unicorn package is a set of ESLint rules that aim to improve code quality by enforcing best practices, preventing common mistakes, and suggesting modern syntax and methods. It includes a variety of rules that are not covered by the core ESLint rules or other plugins, focusing on code enhancements and consistency.
What are eslint-plugin-unicorn's main functionalities?
Filename Case
Enforces a specific case for filenames, which can be configured to be kebab-case, camelCase, or snake_case. This helps maintain consistency in the naming of files across a project.
"unicorn/filename-case": ["error", {"case": "kebabCase"}]
Number Literal Case
Enforces lowercase identifier and uppercase value for number literals, improving readability and consistency in the code.
"unicorn/number-literal-case": "error"
Prevent Abbreviations
Discourages the use of abbreviations in variable names, function names, and other identifiers to improve code clarity and readability.
"unicorn/prevent-abbreviations": ["error", {"replacements": {"temp": false, "err": {"error": true}}}]
Better Regex
Suggests simpler and more optimized regular expressions to improve performance and readability.
"unicorn/better-regex": "error"
Consistent Function Scoping
Enforces that functions are defined at the highest possible level, which can help with readability and reduce the complexity of nested functions.
"unicorn/consistent-function-scoping": "error"
Other packages similar to eslint-plugin-unicorn
eslint-plugin-import
This plugin provides linting rules related to ES2015+ import/export syntax, helping to ensure proper import order, naming, and file path correctness. It is similar to eslint-plugin-unicorn in that it enforces best practices, but it focuses specifically on module import and export issues.
eslint-plugin-promise
This plugin enforces best practices for JavaScript promises. It is similar to eslint-plugin-unicorn in its goal to improve code quality, but it focuses specifically on the use of promises and asynchronous code.
eslint-plugin-jsx-a11y
This plugin checks JSX code for accessibility issues, ensuring that web applications are accessible to users with disabilities. While eslint-plugin-unicorn focuses on general JavaScript code quality, eslint-plugin-jsx-a11y focuses on accessibility concerns in React and JSX.
eslint-plugin-react
This plugin provides React-specific linting rules. It is similar to eslint-plugin-unicorn in that it helps maintain code quality and consistency, but it is tailored specifically for React development.
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-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-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"
}
}
}
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, except String
, Number
, Boolean
, Symbol
and BigInt
. (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-reduce - Disallow
Array#reduce()
and Array#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 a for-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 of instanceof Array
. (fixable) - 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
. (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()
and Buffer.alloc()
instead of the deprecated new Buffer()
. (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-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
. (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()
over on
-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()
over Array#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()
over Node#appendChild()
. (fixable) - prefer-dom-node-dataset - Prefer using
.dataset
on DOM elements over .setAttribute(…)
. (fixable) - prefer-dom-node-remove - Prefer
childNode.remove()
over parentNode.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
over KeyboardEvent#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()
over insertAdjacentText()
and insertAdjacentElement()
. (fixable) - prefer-negative-index - Prefer negative index over
.length - index
for {String,Array,TypedArray}#slice()
and Array#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()
over Function#apply()
. (fixable) - prefer-regexp-test - Prefer
RegExp#test()
over String#match()
and RegExp#exec()
. (fixable) - prefer-set-has - Prefer
Set#has()
over Array#includes()
when checking for existence or non-existence. (fixable) - prefer-spread - Prefer the spread operator over
Array.from()
. (fixable) - prefer-string-replace-all - Prefer
String#replaceAll()
over regex searches with the global flag. (fixable) - prefer-string-slice - Prefer
String#slice()
over String#substr()
and String#substring()
. (partly fixable) - prefer-string-starts-ends-with - Prefer
String#startsWith()
& String#endsWith()
over RegExp#test()
. (fixable) - prefer-string-trim-start-end - Prefer
String#trimStart()
/ String#trimEnd()
over String#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
See docs/deprecated-rules.md
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.
Maintainers
Former