eslint-plugin-unicorn

More than 100 powerful ESLint rules

Latest version: 60.0.0 registry icon
Maintenance score
100
Safety score
100
Popularity score
81
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
60.0.0 0 0 0 0 0
59.0.1 0 0 0 0 0
59.0.0 0 0 0 0 0
58.0.0 0 0 0 0 0
57.0.0 0 0 0 0 0
56.0.1 0 0 0 0 0
56.0.0 0 0 0 0 0
55.0.0 0 0 0 0 0
54.0.0 0 0 0 0 0
53.0.0 0 0 0 0 0
52.0.0 0 0 0 0 0
51.0.1 0 0 0 0 0
51.0.0 0 0 0 0 0
50.0.1 0 0 0 0 0
50.0.0 0 0 0 0 0
49.0.0 0 0 0 0 0
48.0.1 0 0 0 0 0
48.0.0 0 0 0 0 0
47.0.0 0 0 0 0 0
46.0.1 0 0 0 0 0
46.0.0 0 0 0 0 0
45.0.2 0 0 0 0 0
45.0.1 0 0 0 0 0
45.0.0 0 0 0 0 0
44.0.2 0 0 0 0 0
44.0.1 0 0 0 0 0
44.0.0 0 0 0 0 0
43.0.2 0 0 0 0 0
43.0.1 0 0 0 0 0
43.0.0 0 0 0 0 0
42.0.0 0 0 0 0 0
41.0.1 0 0 0 0 0
41.0.0 0 0 0 0 0
40.1.0 0 0 0 0 0
40.0.0 0 0 0 0 0
39.0.0 0 0 0 0 0
38.0.1 0 0 0 0 0
38.0.0 0 0 0 0 0
37.0.1 0 0 0 0 0
37.0.0 0 0 0 0 0
36.0.0 0 0 0 0 0
35.0.0 0 0 0 0 0
34.0.1 0 0 0 0 0
34.0.0 0 0 0 0 0
33.0.1 0 0 0 0 0
33.0.0 0 0 0 0 0
32.0.1 0 0 0 0 0
32.0.0 0 0 0 0 0
31.0.0 0 0 0 0 0
30.0.0 0 0 0 0 0
29.0.0 0 0 0 0 0
28.0.2 0 0 0 0 0
28.0.1 0 0 0 0 0
28.0.0 0 0 0 0 0
27.0.0 0 0 0 0 0
26.0.1 0 0 0 0 0
26.0.0 0 0 0 0 0
25.0.1 0 0 0 0 0
25.0.0 0 0 0 0 0
24.0.0 0 0 0 0 0
23.0.0 0 0 0 0 0
22.0.0 0 0 0 0 0
21.0.0 0 0 0 0 0
20.1.0 0 0 0 0 0
20.0.0 0 0 0 0 0
19.0.1 0 0 0 0 0
19.0.0 0 0 0 0 0
18.0.1 0 0 0 0 0
18.0.0 0 0 0 0 0
17.2.0 0 0 0 0 0
17.1.0 0 0 0 0 0
17.0.1 0 0 0 0 0
17.0.0 0 0 0 0 0
16.1.1 0 0 0 0 0
16.1.0 0 0 0 0 0
16.0.0 0 0 0 0 0
15.0.1 0 0 0 0 0
15.0.0 0 0 0 0 0
14.0.1 0 0 0 0 0
14.0.0 0 0 0 0 0
13.0.0 0 0 0 0 0
12.1.0 0 0 0 0 0
12.0.2 0 0 0 0 0
12.0.1 0 0 0 0 0
12.0.0 0 0 0 0 0
11.0.2 0 0 0 0 0
11.0.1 0 0 0 0 0
11.0.0 0 0 0 0 0
10.0.0 0 0 0 0 0
9.1.1 0 0 0 0 0
9.1.0 0 0 0 0 0
9.0.0 0 0 0 0 0
8.0.2 0 0 0 0 0
8.0.1 0 0 0 0 0
8.0.0 0 0 0 0 0
7.1.0 0 0 0 0 0
7.0.0 0 0 0 0 0
6.0.1 0 0 0 0 0
6.0.0 0 0 0 0 0
5.0.0 0 0 0 0 0
4.0.3 0 0 0 0 0
4.0.2 0 0 0 0 0
4.0.1 0 0 0 0 0
4.0.0 0 0 0 0 0
3.0.1 0 0 0 0 0
3.0.0 0 0 0 0 0
2.1.2 0 0 0 0 0
2.1.1 0 0 0 0 0
2.1.0 0 0 0 0 0
2.0.1 0 0 0 0 0
2.0.0 0 0 0 0 0
1.0.0 0 0 0 0 0

Stability
Latest release:

60.0.0 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant



eslint-plugin-unicorn Coverage Status npm version

Unicorn

More than 100 powerful 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

Requires ESLint >=9.20.0, flat config, and ESM.

Usage

Use a preset config or configure each rule in eslint.config.js.

If you don't use the preset, ensure you use the same languageOptions config as below.

import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals';

export default [
	{
		languageOptions: {
			globals: globals.builtin,
		},
		plugins: {
			unicorn: eslintPluginUnicorn,
		},
		rules: {
			'unicorn/better-regex': 'error',
			'unicorn/…': 'error',
		},
	},
	// …
];

Rules

πŸ’Ό Configurations enabled in.
βœ… Set in the recommended configuration.
πŸ”§ Automatically fixable by the --fix CLI option.
πŸ’‘ 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-assert Enforce consistent assertion style with node:assert. βœ… πŸ”§
consistent-date-clone Prefer passing Date directly to the constructor when cloning. βœ… πŸ”§
consistent-destructuring Use destructured variables over properties. πŸ’‘
consistent-empty-array-spread Prefer consistent types when spreading a ternary in an array literal. βœ… πŸ”§
consistent-existence-index-check Enforce consistent style for element existence checks with indexOf(), lastIndexOf(), findIndex(), and findLastIndex(). βœ… πŸ”§
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 or lowercase 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-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-accessor-recursion Disallow recursive access to this within getters and setters. βœ…
no-anonymous-default-export Disallow anonymous functions and classes as the default export. βœ… πŸ’‘
no-array-callback-reference Prevent passing a function reference directly to iterator methods. βœ… πŸ’‘
no-array-for-each Prefer for…of over the forEach method. βœ… πŸ”§ πŸ’‘
no-array-method-this-argument Disallow using the this argument in array methods. βœ… πŸ”§ πŸ’‘
no-array-reduce Disallow Array#reduce() and Array#reduceRight(). βœ…
no-array-reverse Prefer Array#toReversed() over Array#reverse(). βœ… πŸ’‘
no-array-sort Prefer Array#toSorted() over Array#sort(). βœ… πŸ’‘
no-await-expression-member Disallow member access from await expression. βœ… πŸ”§
no-await-in-promise-methods Disallow using await in Promise method parameters. βœ… πŸ’‘
no-console-spaces Do not use leading/trailing space between console.log parameters. βœ… πŸ”§
no-document-cookie Do not use document.cookie directly. βœ…
no-empty-file Disallow empty files. βœ…
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-builtins Disallow instanceof with built-in objects βœ… πŸ”§ πŸ’‘
no-invalid-fetch-options Disallow invalid options in fetch() and new Request(). βœ…
no-invalid-remove-event-listener Prevent calling EventTarget#removeEventListener() with the result of an expression. βœ…
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-magic-array-flat-depth Disallow a magic number as the depth argument in Array#flat(…). βœ…
no-named-default Disallow named usage of default import and export. βœ… πŸ”§
no-negated-condition Disallow negated conditions. βœ… πŸ”§
no-negation-in-equality-check Disallow negated expression in equality check. βœ… πŸ’‘
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-single-promise-in-promise-methods Disallow passing single-element arrays to Promise methods. βœ… πŸ”§ πŸ’‘
no-static-only-class Disallow classes that only have static members. βœ… πŸ”§
no-thenable Disallow then property. βœ…
no-this-assignment Disallow assigning this to a variable. βœ…
no-typeof-undefined Disallow comparing undefined using typeof. βœ… πŸ”§ πŸ’‘
no-unnecessary-array-flat-depth Disallow using 1 as the depth argument of Array#flat(). βœ… πŸ”§
no-unnecessary-array-splice-count Disallow using .length or Infinity as the deleteCount or skipCount argument of Array#{splice,toSpliced}(). βœ… πŸ”§
no-unnecessary-await Disallow awaiting non-promise values. βœ… πŸ”§
no-unnecessary-polyfills Enforce the use of built-in methods instead of unnecessary polyfills. βœ…
no-unnecessary-slice-end Disallow using .length or Infinity as the end argument of {Array,String,TypedArray}#slice(). βœ… πŸ”§
no-unreadable-array-destructuring Disallow unreadable array destructuring. βœ… πŸ”§
no-unreadable-iife Disallow unreadable IIFEs. βœ…
no-unused-properties Disallow unused object properties.
no-useless-error-capture-stack-trace Disallow unnecessary Error.captureStackTrace(…). βœ… πŸ”§
no-useless-fallback-in-spread Disallow useless fallback when spreading in object literals. βœ… πŸ”§
no-useless-length-check Disallow useless array length check. βœ… πŸ”§
no-useless-promise-resolve-reject Disallow returning/yielding Promise.resolve/reject() in async functions or promise callbacks βœ… πŸ”§
no-useless-spread Disallow unnecessary spread. βœ… πŸ”§
no-useless-switch-case Disallow useless case in switch statements. βœ… πŸ’‘
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(…) and .findLast(…) over the first or last 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,lastIndexOf}() over Array#{findIndex,findLastIndex}() when looking for the index of an item. βœ… πŸ”§ πŸ’‘
prefer-array-some Prefer .some(…) over .filter(…).length check and .{find,findLast,findIndex,findLastIndex}(…). βœ… πŸ”§ πŸ’‘
prefer-at Prefer .at() method for index access and String#charAt(). βœ… πŸ”§ πŸ’‘
prefer-blob-reading-methods Prefer Blob#arrayBuffer() over FileReader#readAsArrayBuffer(…) and Blob#text() over FileReader#readAsText(…). βœ…
prefer-class-fields Prefer class field declarations over this assignments in constructors. βœ… πŸ”§ πŸ’‘
prefer-code-point Prefer String#codePointAt(…) over String#charCodeAt(…) and String.fromCodePoint(…) over String.fromCharCode(…). βœ… πŸ’‘
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 calling attribute methods. βœ… πŸ”§
prefer-dom-node-remove Prefer childNode.remove() over parentNode.removeChild(childNode). βœ… πŸ”§ πŸ’‘
prefer-dom-node-text-content Prefer .textContent over .innerText. βœ… πŸ’‘
prefer-event-target Prefer EventTarget over EventEmitter. βœ…
prefer-export-from Prefer export…from when re-exporting. βœ… πŸ”§ πŸ’‘
prefer-global-this Prefer globalThis over window, self, and global. βœ… πŸ”§
prefer-import-meta-properties Prefer import.meta.{dirname,filename} over legacy techniques for getting file paths. πŸ”§
prefer-includes Prefer .includes() over .indexOf(), .lastIndexOf(), and Array#some() when checking for existence or non-existence. βœ… πŸ”§ πŸ’‘
prefer-json-parse-buffer Prefer reading a JSON file as a buffer. πŸ”§
prefer-keyboard-event-key Prefer KeyboardEvent#key over KeyboardEvent#keyCode. βœ… πŸ”§
prefer-logical-operator-over-ternary Prefer using a logical operator over a ternary. βœ… πŸ’‘
prefer-math-min-max Prefer Math.min() and Math.max() over ternaries for simple comparisons. βœ… πŸ”§
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-modern-math-apis Prefer modern Math APIs over legacy patterns. βœ… πŸ”§
prefer-module Prefer JavaScript modules (ESM) over CommonJS. βœ… πŸ”§ πŸ’‘
prefer-native-coercion-functions Prefer using String, Number, BigInt, Boolean, and Symbol directly. βœ… πŸ”§
prefer-negative-index Prefer negative index over .length - index when possible. βœ… πŸ”§
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-from-entries Prefer using Object.fromEntries(…) to transform a list of key-value pairs into an object. βœ… πŸ”§
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() and .getElementsByName(). βœ… πŸ”§
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-set-size Prefer using Set#size instead of Array#length. βœ… πŸ”§
prefer-single-call Enforce combining multiple Array#push(), Element#classList.{add,remove}(), and importScripts() into one call. βœ… πŸ”§ πŸ’‘
prefer-spread Prefer the spread operator over Array.from(…), Array#concat(…), Array#{slice,toSpliced}() and String#split(''). βœ… πŸ”§ πŸ’‘
prefer-string-raw Prefer using the String.raw tag to avoid escaping \. βœ… πŸ”§
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-structured-clone Prefer using structuredClone to create a deep clone. βœ… πŸ’‘
prefer-switch Prefer switch over multiple else-if. βœ… πŸ”§
prefer-ternary Prefer ternary expressions over simple if-else statements. βœ… πŸ”§
prefer-top-level-await Prefer top-level await over top-level promises and async function calls. βœ… πŸ’‘
prefer-type-error Enforce throwing TypeError in type checking conditions. βœ… πŸ”§
prevent-abbreviations Prevent abbreviations. βœ… πŸ”§
relative-url-style Enforce consistent relative URL style. βœ… πŸ”§ πŸ’‘
require-array-join-separator Enforce using the separator argument with Array#join(). βœ… πŸ”§
require-module-specifiers Require non-empty specifier list in import and export statements. βœ… πŸ”§ πŸ’‘
require-number-to-fixed-digits-argument Enforce using the digits argument with Number#toFixed(). βœ… πŸ”§
require-post-message-target-origin Enforce using the targetOrigin argument with window.postMessage(). πŸ’‘
string-content Enforce better string content. πŸ”§ πŸ’‘
switch-case-braces Enforce consistent brace style for case clauses. βœ… πŸ”§
template-indent Fix whitespace-insensitive template indentation. βœ… πŸ”§
text-encoding-identifier-case Enforce consistent case for text encoding identifiers. βœ… πŸ”§ πŸ’‘
throw-new-error Require new when creating an error. βœ… πŸ”§

Deleted and deprecated rules

See the list.

Preset configs

See the ESLint docs for more information about extending config files.

Note: Preset configs will also enable the correct language options.

Recommended config

This plugin exports a recommended config that enforces good practices.

import eslintPluginUnicorn from 'eslint-plugin-unicorn';

export default [
		// …
		eslintPluginUnicorn.configs.recommended,
		{
			rules: {
				'unicorn/better-regex': 'warn',
			},
		},
];

All config

This plugin exports an all that makes use of all rules (except for deprecated ones).

import eslintPluginUnicorn from 'eslint-plugin-unicorn';

export default [
		// …
		eslintPluginUnicorn.configs.all,
		{
			rules: {
				'unicorn/better-regex': 'warn',
			},
		},
];

Maintainers

Former