eslint-plugin-unicorn
More than 100 powerful ESLint rules
Last updated 14 days ago by sindresorhus .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install eslint-plugin-unicorn 
SYNC missed versions from official npm registry.

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.
☑️ Set in the unopinionated 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.
consistent-template-literal-escape Enforce consistent style for escaping ${ in template literals. ????
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. ✅ ☑️
isolated-functions Prevent usage of variables from outside the scope of isolated functions.
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-immediate-mutation Disallow immediate mutation after variable assignment. ???? ????
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-collection-argument Disallow useless values or fallbacks in Set, Map, WeakSet, or WeakMap. ✅ ☑️ ???? ????
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-iterator-to-array Disallow unnecessary .toArray() on iterators. ✅ ☑️ ???? ????
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-bigint-literals Prefer BigInt literals over the constructor. ✅ ☑️ ???? ????
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-classlist-toggle Prefer using Element#classList.toggle() to toggle class names. ✅ ☑️ ???? ????
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-response-static-json Prefer Response.json() over new Response(JSON.stringify()). ✅ ☑️ ????
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-simple-condition-first Prefer simple conditions first in logical expressions. ✅ ☑️ ???? ????
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-attributes Require non-empty module attributes for imports and exports ✅ ☑️ ????
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. ????
switch-case-break-position Enforce consistent break/return/continue/throw position in 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

Current Tags

  • 64.0.0                                ...           latest (14 days ago)

118 Versions

  • 64.0.0                                ...           14 days ago
  • 63.0.0                                ...           2 months ago
  • 62.0.0                                ...           6 months ago
  • 61.0.2                                ...           7 months ago
  • 61.0.1                                ...           7 months ago
  • 61.0.0                                ...           7 months ago
  • 60.0.0                                ...           9 months ago
  • 59.0.1                                ...           a year ago
  • 59.0.0                                ...           a year ago
  • 58.0.0                                ...           a year ago
  • 57.0.0                                ...           a year ago
  • 56.0.1                                ...           a year ago
  • 56.0.0                                ...           2 years ago
  • 55.0.0                                ...           2 years ago
  • 54.0.0                                ...           2 years ago
  • 53.0.0                                ...           2 years ago
  • 52.0.0                                ...           2 years ago
  • 51.0.1                                ...           2 years ago
  • 51.0.0                                ...           2 years ago
  • 50.0.1                                ...           2 years ago
  • 50.0.0                                ...           2 years ago
  • 49.0.0                                ...           2 years ago
  • 48.0.1                                ...           3 years ago
  • 48.0.0                                ...           3 years ago
  • 47.0.0                                ...           3 years ago
  • 46.0.1                                ...           3 years ago
  • 46.0.0                                ...           3 years ago
  • 45.0.2                                ...           3 years ago
  • 45.0.1                                ...           3 years ago
  • 45.0.0                                ...           3 years ago
  • 44.0.2                                ...           4 years ago
  • 44.0.1                                ...           4 years ago
  • 44.0.0                                ...           4 years ago
  • 43.0.2                                ...           4 years ago
  • 43.0.1                                ...           4 years ago
  • 43.0.0                                ...           4 years ago
  • 42.0.0                                ...           4 years ago
  • 41.0.1                                ...           4 years ago
  • 41.0.0                                ...           4 years ago
  • 40.1.0                                ...           4 years ago
  • 40.0.0                                ...           4 years ago
  • 39.0.0                                ...           4 years ago
  • 38.0.1                                ...           4 years ago
  • 38.0.0                                ...           4 years ago
  • 37.0.1                                ...           4 years ago
  • 37.0.0                                ...           5 years ago
  • 36.0.0                                ...           5 years ago
  • 35.0.0                                ...           5 years ago
  • 34.0.1                                ...           5 years ago
  • 34.0.0                                ...           5 years ago
  • 33.0.1                                ...           5 years ago
  • 33.0.0                                ...           5 years ago
  • 32.0.1                                ...           5 years ago
  • 32.0.0                                ...           5 years ago
  • 31.0.0                                ...           5 years ago
  • 30.0.0                                ...           5 years ago
  • 29.0.0                                ...           5 years ago
  • 28.0.2                                ...           5 years ago
  • 28.0.1                                ...           5 years ago
  • 28.0.0                                ...           5 years ago
  • 27.0.0                                ...           5 years ago
  • 26.0.1                                ...           5 years ago
  • 26.0.0                                ...           5 years ago
  • 25.0.1                                ...           5 years ago
  • 25.0.0                                ...           5 years ago
  • 24.0.0                                ...           5 years ago
  • 23.0.0                                ...           5 years ago
  • 22.0.0                                ...           6 years ago
  • 21.0.0                                ...           6 years ago
  • 20.1.0                                ...           6 years ago
  • 20.0.0                                ...           6 years ago
  • 19.0.1                                ...           6 years ago
  • 19.0.0                                ...           6 years ago
  • 18.0.1                                ...           6 years ago
  • 18.0.0                                ...           6 years ago
  • 17.2.0                                ...           6 years ago
  • 17.1.0                                ...           6 years ago
  • 17.0.1                                ...           6 years ago
  • 17.0.0                                ...           6 years ago
  • 16.1.1                                ...           6 years ago
  • 16.1.0                                ...           6 years ago
  • 16.0.0                                ...           6 years ago
  • 15.0.1                                ...           6 years ago
  • 15.0.0                                ...           6 years ago
  • 14.0.1                                ...           6 years ago
  • 14.0.0                                ...           6 years ago
  • 13.0.0                                ...           6 years ago
  • 12.1.0                                ...           7 years ago
  • 12.0.2                                ...           7 years ago
  • 12.0.1                                ...           7 years ago
  • 12.0.0                                ...           7 years ago
  • 11.0.2                                ...           7 years ago
  • 11.0.1                                ...           7 years ago
  • 11.0.0                                ...           7 years ago
  • 10.0.0                                ...           7 years ago
  • 9.1.1                                ...           7 years ago
  • 9.1.0                                ...           7 years ago
  • 9.0.0                                ...           7 years ago
  • 8.0.2                                ...           7 years ago
  • 8.0.1                                ...           7 years ago
  • 8.0.0                                ...           7 years ago
  • 7.1.0                                ...           7 years ago
  • 7.0.0                                ...           7 years ago
  • 6.0.1                                ...           8 years ago
  • 6.0.0                                ...           8 years ago
  • 5.0.0                                ...           8 years ago
  • 4.0.3                                ...           8 years ago
  • 4.0.2                                ...           8 years ago
  • 4.0.1                                ...           8 years ago
  • 4.0.0                                ...           8 years ago
  • 3.0.1                                ...           8 years ago
  • 3.0.0                                ...           8 years ago
  • 2.1.2                                ...           9 years ago
  • 2.1.1                                ...           9 years ago
  • 2.1.0                                ...           9 years ago
  • 2.0.1                                ...           9 years ago
  • 2.0.0                                ...           9 years ago
  • 1.0.0                                ...           10 years ago

Copyright 2013 - present © cnpmjs.org | Home |