Huge news!Announcing our $20M Series A led by Andreessen Horowitz.Learn more β†’
Socket
Socket
Log inDemoInstall

eslint-plugin-unicorn

Package Overview
Dependencies
142
Maintainers
2
Versions
97
Issues
File Explorer

Advanced tools

Install Socket

Protect your apps from supply chain attacks

Install

eslint-plugin-unicorn

More than 100 powerful ESLint rules

    49.0.0latest
    GitHub
    npm

Version published
Maintainers
2
Weekly downloads
1,925,526
increased by8.89%

Weekly downloads

Readme

Source

eslint-plugin-unicorn Coverage Status npm version

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

Usage

Use a preset config or configure each rule in package.json.

If you don't use the preset, ensure you use the same env and parserOptions config as below.

{
	"name": "my-awesome-project",
	"eslintConfig": {
		"env": {
			"es2024": true
		},
		"parserOptions": {
			"ecmaVersion": "latest",
			"sourceType": "module"
		},
		"plugins": [
			"unicorn"
		],
		"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-regexImprove regexes by making them shorter, consistent, and safer.βœ…πŸ”§
catch-error-nameEnforce a specific parameter name in catch clauses.βœ…πŸ”§
consistent-destructuringUse destructured variables over properties.βœ…πŸ”§πŸ’‘
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 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-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-push-pushEnforce combining multiple Array#push() into one call.βœ…πŸ”§πŸ’‘
no-array-reduceDisallow Array#reduce() and Array#reduceRight().βœ…
no-await-expression-memberDisallow member access from await expression.βœ…πŸ”§
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-arrayRequire Array.isArray() instead of instanceof Array.βœ…πŸ”§
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-negated-conditionDisallow negated conditions.βœ…πŸ”§
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-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-awaitDisallow awaiting non-promise values.βœ…πŸ”§
no-unreadable-array-destructuringDisallow unreadable array destructuring.βœ…πŸ”§
no-unreadable-iifeDisallow unreadable IIFEs.βœ…
no-unused-propertiesDisallow unused object properties.
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}(…).βœ…πŸ”§πŸ’‘
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-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-includesPrefer .includes() over .indexOf() 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-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().βœ…πŸ”§
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-spreadPrefer the spread operator over Array.from(…), Array#concat(…), Array#{slice,toSpliced}() and String#split('').βœ…πŸ”§πŸ’‘
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-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 throwing an error.βœ…πŸ”§

Deprecated Rules

See docs/deprecated-rules.md

Preset configs

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

Note: Preset configs will also enable the correct parser options and environment.

This plugin exports a recommended config that enforces good practices.

{
	"name": "my-awesome-project",
	"eslintConfig": {
		"extends": "plugin:unicorn/recommended"
	}
}

All config

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

{
	"name": "my-awesome-project",
	"eslintConfig": {
		"extends": "plugin:unicorn/all"
	}
}

Maintainers

Former

Keywords

FAQs

Last updated on 29 Oct 2023

Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install
SocketSocket SOC 2 Logo

Product

  • Package Issues
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚑️ by Socket Inc