You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP β†’
Socket
Book a DemoInstallSign in
Socket

eslint-plugin-unicorn-x

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-unicorn-x

More than 100 powerful ESLint rules

3.0.0
Source
npmnpm
Version published
Weekly downloads
4.8K
10.63%
Maintainers
1
Weekly downloads
Β 
Created
Source

eslint-plugin-unicorn-x

More than 100 powerful ESLint rules

A modern, faster and lighter fork of eslint-plugin-unicorn.

Install

npm install --save-dev eslint eslint-plugin-unicorn-x

Requires ESLint >=9.29.0 and flat config.

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-x';
import globals from 'globals';

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

Why this fork exists

This fork exists to provide various performance improvements and a reduced install footprint.

Much of this cannot be contributed upstream due to differences in opinion on dependency selection, backwards compatibility requirements, and so on.

We will contribute what we can upstream, and continue to track the original, allowing this plugin to exist as a mostly drop-in replacement to get an easy bump in lint performance.

Migration from eslint-plugin-unicorn

If you are migrating from eslint-plugin-unicorn, simply replace unicorn with unicorn-x in your rules and update the plugin import path:

{
	"rules": {
		// before
		"unicorn/better-regex": "error",

		// after
		"unicorn-x/better-regex": "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-regexImprove regexes by making them shorter, consistent, and safer.πŸ”§
catch-error-nameEnforce a specific parameter name in catch clauses.βœ…πŸ”§
consistent-assertEnforce consistent assertion style with node:assert.βœ…πŸ”§
consistent-date-clonePrefer passing Date directly to the constructor when cloning.βœ…πŸ”§
consistent-destructuringUse destructured variables over properties.πŸ’‘
consistent-empty-array-spreadPrefer consistent types when spreading a ternary in an array literal.βœ…πŸ”§
consistent-existence-index-checkEnforce consistent style for element existence checks with indexOf(), lastIndexOf(), findIndex(), and findLastIndex().βœ…πŸ”§
consistent-function-scopingMove function definitions to the highest possible scope.βœ…
custom-error-definitionEnforce correct Error subclassing.πŸ”§
empty-brace-spacesEnforce no spaces between braces.βœ…πŸ”§
error-messageEnforce passing a message value when creating a built-in error.βœ…
escape-caseRequire escape sequences to use uppercase or lowercase values.βœ…πŸ”§
expiring-todo-commentsAdd expiration conditions to TODO comments.βœ…
explicit-length-checkEnforce explicitly comparing the length or size property of a value.βœ…πŸ”§πŸ’‘
filename-caseEnforce a case style for filenames.βœ…
import-styleEnforce specific import styles per module.βœ…
new-for-builtinsEnforce the use of new for all builtins, except String, Number, Boolean, Symbol and BigInt.βœ…πŸ”§πŸ’‘
no-abusive-eslint-disableEnforce specifying rules to disable in eslint-disable comments.βœ…
no-accessor-recursionDisallow recursive access to this within getters and setters.βœ…
no-anonymous-default-exportDisallow anonymous functions and classes as the default export.βœ…πŸ’‘
no-array-callback-referencePrevent passing a function reference directly to iterator methods.βœ…πŸ’‘
no-array-for-eachPrefer for…of over the forEach method.βœ…πŸ”§πŸ’‘
no-array-method-this-argumentDisallow using the this argument in array methods.βœ…πŸ”§πŸ’‘
no-array-reduceDisallow Array#reduce() and Array#reduceRight().βœ…
no-await-expression-memberDisallow member access from await expression.βœ…πŸ”§
no-await-in-promise-methodsDisallow using await in Promise method parameters.βœ…πŸ’‘
no-console-spacesDo not use leading/trailing space between console.log parameters.βœ…πŸ”§
no-document-cookieDo not use document.cookie directly.βœ…
no-empty-fileDisallow empty files.βœ…
no-for-loopDo not use a for loop that can be replaced with a for-of loop.βœ…πŸ”§πŸ’‘
no-hex-escapeEnforce the use of Unicode escapes instead of hexadecimal escapes.βœ…πŸ”§
no-instanceof-builtinsDisallow instanceof with built-in objectsβœ…πŸ”§πŸ’‘
no-invalid-fetch-optionsDisallow invalid options in fetch() and new Request().βœ…
no-invalid-remove-event-listenerPrevent calling EventTarget#removeEventListener() with the result of an expression.βœ…
no-keyword-prefixDisallow identifiers starting with new or class.
no-lonely-ifDisallow if statements as the only statement in if blocks without else.βœ…πŸ”§
no-magic-array-flat-depthDisallow a magic number as the depth argument in Array#flat(…).βœ…
no-named-defaultDisallow named usage of default import and export.βœ…πŸ”§
no-negated-conditionDisallow negated conditions.βœ…πŸ”§
no-negation-in-equality-checkDisallow negated expression in equality check.βœ…πŸ’‘
no-nested-ternaryDisallow nested ternary expressions.βœ…πŸ”§
no-new-arrayDisallow new Array().βœ…πŸ”§πŸ’‘
no-new-bufferEnforce the use of Buffer.from() and Buffer.alloc() instead of the deprecated new Buffer().βœ…πŸ”§πŸ’‘
no-nullDisallow the use of the null literal.βœ…πŸ”§πŸ’‘
no-object-as-default-parameterDisallow the use of objects as default parameters.βœ…
no-process-exitDisallow process.exit().βœ…
no-single-promise-in-promise-methodsDisallow passing single-element arrays to Promise methods.βœ…πŸ”§πŸ’‘
no-static-only-classDisallow classes that only have static members.βœ…πŸ”§
no-thenableDisallow then property.βœ…
no-this-assignmentDisallow assigning this to a variable.βœ…
no-typeof-undefinedDisallow comparing undefined using typeof.βœ…πŸ”§πŸ’‘
no-unnecessary-array-flat-depthDisallow using 1 as the depth argument of Array#flat().βœ…πŸ”§
no-unnecessary-array-splice-countDisallow using .length or Infinity as the deleteCount or skipCount argument of Array#{splice,toSpliced}().βœ…πŸ”§
no-unnecessary-awaitDisallow awaiting non-promise values.βœ…πŸ”§
no-unnecessary-polyfillsEnforce the use of built-in methods instead of unnecessary polyfills.βœ…
no-unnecessary-slice-endDisallow using .length or Infinity as the end argument of {Array,String,TypedArray}#slice().βœ…πŸ”§
no-unreadable-array-destructuringDisallow unreadable array destructuring.βœ…πŸ”§
no-unreadable-iifeDisallow unreadable IIFEs.βœ…
no-unused-propertiesDisallow unused object properties.
no-useless-error-capture-stack-traceDisallow unnecessary Error.captureStackTrace(…).βœ…πŸ”§
no-useless-fallback-in-spreadDisallow useless fallback when spreading in object literals.βœ…πŸ”§
no-useless-length-checkDisallow useless array length check.βœ…πŸ”§
no-useless-promise-resolve-rejectDisallow returning/yielding Promise.resolve/reject() in async functions or promise callbacksβœ…πŸ”§
no-useless-spreadDisallow unnecessary spread.βœ…πŸ”§
no-useless-switch-caseDisallow useless case in switch statements.βœ…πŸ’‘
no-useless-undefinedDisallow useless undefined.βœ…πŸ”§
no-zero-fractionsDisallow number literals with zero fractions or dangling dots.βœ…πŸ”§
number-literal-caseEnforce proper case for numeric literals.βœ…πŸ”§
numeric-separators-styleEnforce the style of numeric separators by correctly grouping digits.βœ…πŸ”§
prefer-add-event-listenerPrefer .addEventListener() and .removeEventListener() over on-functions.βœ…πŸ”§
prefer-array-findPrefer .find(…) and .findLast(…) over the first or last element from .filter(…).βœ…πŸ”§πŸ’‘
prefer-array-flatPrefer Array#flat() over legacy techniques to flatten arrays.βœ…πŸ”§
prefer-array-flat-mapPrefer .flatMap(…) over .map(…).flat().βœ…πŸ”§
prefer-array-index-ofPrefer Array#{indexOf,lastIndexOf}() over Array#{findIndex,findLastIndex}() when looking for the index of an item.βœ…πŸ”§πŸ’‘
prefer-array-somePrefer .some(…) over .filter(…).length check and .{find,findLast,findIndex,findLastIndex}(…).βœ…πŸ”§πŸ’‘
prefer-atPrefer .at() method for index access and String#charAt().βœ…πŸ”§πŸ’‘
prefer-blob-reading-methodsPrefer Blob#arrayBuffer() over FileReader#readAsArrayBuffer(…) and Blob#text() over FileReader#readAsText(…).βœ…
prefer-class-fieldsPrefer class field declarations over this assignments in constructors.βœ…πŸ”§πŸ’‘
prefer-code-pointPrefer String#codePointAt(…) over String#charCodeAt(…) and String.fromCodePoint(…) over String.fromCharCode(…).βœ…πŸ’‘
prefer-date-nowPrefer Date.now() to get the number of milliseconds since the Unix Epoch.βœ…πŸ”§
prefer-default-parametersPrefer default parameters over reassignment.βœ…πŸ’‘
prefer-dom-node-appendPrefer Node#append() over Node#appendChild().βœ…πŸ”§
prefer-dom-node-datasetPrefer using .dataset on DOM elements over calling attribute methods.βœ…πŸ”§
prefer-dom-node-removePrefer childNode.remove() over parentNode.removeChild(childNode).βœ…πŸ”§πŸ’‘
prefer-dom-node-text-contentPrefer .textContent over .innerText.βœ…πŸ’‘
prefer-event-targetPrefer EventTarget over EventEmitter.βœ…
prefer-export-fromPrefer export…from when re-exporting.βœ…πŸ”§πŸ’‘
prefer-global-thisPrefer globalThis over window, self, and global.βœ…πŸ”§
prefer-import-meta-propertiesPrefer import.meta.{dirname,filename} over legacy techniques for getting file paths.πŸ”§
prefer-includesPrefer .includes() over .indexOf(), .lastIndexOf(), and Array#some() when checking for existence or non-existence.βœ…πŸ”§πŸ’‘
prefer-json-parse-bufferPrefer reading a JSON file as a buffer.πŸ”§
prefer-keyboard-event-keyPrefer KeyboardEvent#key over KeyboardEvent#keyCode.βœ…πŸ”§
prefer-logical-operator-over-ternaryPrefer using a logical operator over a ternary.βœ…πŸ’‘
prefer-math-min-maxPrefer Math.min() and Math.max() over ternaries for simple comparisons.βœ…πŸ”§
prefer-math-truncEnforce the use of Math.trunc instead of bitwise operators.βœ…πŸ”§πŸ’‘
prefer-modern-dom-apisPrefer .before() over .insertBefore(), .replaceWith() over .replaceChild(), prefer one of .before(), .after(), .append() or .prepend() over insertAdjacentText() and insertAdjacentElement().βœ…πŸ”§
prefer-modern-math-apisPrefer modern Math APIs over legacy patterns.βœ…πŸ”§
prefer-modulePrefer JavaScript modules (ESM) over CommonJS.βœ…πŸ”§πŸ’‘
prefer-native-coercion-functionsPrefer using String, Number, BigInt, Boolean, and Symbol directly.βœ…πŸ”§
prefer-negative-indexPrefer negative index over .length - index when possible.βœ…πŸ”§
prefer-node-protocolPrefer using the node: protocol when importing Node.js builtin modules.βœ…πŸ”§
prefer-number-propertiesPrefer Number static properties over global ones.βœ…πŸ”§πŸ’‘
prefer-object-from-entriesPrefer using Object.fromEntries(…) to transform a list of key-value pairs into an object.βœ…πŸ”§
prefer-optional-catch-bindingPrefer omitting the catch binding parameter.βœ…πŸ”§
prefer-prototype-methodsPrefer borrowing methods from the prototype instead of the instance.βœ…πŸ”§
prefer-query-selectorPrefer .querySelector() over .getElementById(), .querySelectorAll() over .getElementsByClassName() and .getElementsByTagName() and .getElementsByName().βœ…πŸ”§
prefer-reflect-applyPrefer Reflect.apply() over Function#apply().βœ…πŸ”§
prefer-regexp-testPrefer RegExp#test() over String#match() and RegExp#exec().βœ…πŸ”§πŸ’‘
prefer-set-hasPrefer Set#has() over Array#includes() when checking for existence or non-existence.βœ…πŸ”§πŸ’‘
prefer-set-sizePrefer using Set#size instead of Array#length.βœ…πŸ”§
prefer-single-callEnforce combining multiple Array#push(), Element#classList.{add,remove}(), and importScripts() into one call.βœ…πŸ”§πŸ’‘
prefer-spreadPrefer the spread operator over Array.from(…), Array#concat(…), Array#{slice,toSpliced}() and String#split('').βœ…πŸ”§πŸ’‘
prefer-string-rawPrefer using the String.raw tag to avoid escaping \.βœ…πŸ”§
prefer-string-replace-allPrefer String#replaceAll() over regex searches with the global flag.βœ…πŸ”§
prefer-string-slicePrefer String#slice() over String#substr() and String#substring().βœ…πŸ”§
prefer-string-starts-ends-withPrefer String#startsWith() & String#endsWith() over RegExp#test().βœ…πŸ”§πŸ’‘
prefer-string-trim-start-endPrefer String#trimStart() / String#trimEnd() over String#trimLeft() / String#trimRight().βœ…πŸ”§
prefer-structured-clonePrefer using structuredClone to create a deep clone.βœ…πŸ’‘
prefer-switchPrefer switch over multiple else-if.βœ…πŸ”§
prefer-ternaryPrefer ternary expressions over simple if-else statements.βœ…πŸ”§
prefer-top-level-awaitPrefer top-level await over top-level promises and async function calls.βœ…πŸ’‘
prefer-type-errorEnforce throwing TypeError in type checking conditions.βœ…πŸ”§
prevent-abbreviationsPrevent abbreviations.βœ…πŸ”§
relative-url-styleEnforce consistent relative URL style.βœ…πŸ”§πŸ’‘
require-array-join-separatorEnforce using the separator argument with Array#join().βœ…πŸ”§
require-number-to-fixed-digits-argumentEnforce using the digits argument with Number#toFixed().βœ…πŸ”§
require-post-message-target-originEnforce using the targetOrigin argument with window.postMessage().πŸ’‘
string-contentEnforce better string content.πŸ”§πŸ’‘
switch-case-bracesEnforce consistent brace style for case clauses.βœ…πŸ”§
template-indentFix whitespace-insensitive template indentation.βœ…πŸ”§
text-encoding-identifier-caseEnforce consistent case for text encoding identifiers.βœ…πŸ”§πŸ’‘
throw-new-errorRequire 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.

This plugin exports a recommended config that enforces good practices.

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

export default [
		// …
		eslintPluginUnicorn.configs.recommended,
		{
			rules: {
				'unicorn-x/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-x';

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

Keywords

eslint

FAQs

Package last updated on 29 Jun 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts