Narcissistic Preening Monarch


    43.0.2 • Public • Published

    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


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


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

    	"name": "my-awesome-project",
    	"eslintConfig": {
    		"env": {
    			"es2022": true
    		"parserOptions": {
    			"ecmaVersion": "latest",
    			"sourceType": "module"
    		"plugins": [
    		"rules": {
    			"unicorn/better-regex": "error",
    			"unicorn/…": "error"


    Each rule has emojis denoting:

    • if it belongs to the recommended configuration
    • 🔧 if some problems reported by the rule are automatically fixable by the --fix command line option
    • 💡 if some problems reported by the rule are 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-destructuring Use destructured variables over properties. 🔧 💡
    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 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-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-push-push Enforce combining multiple Array#push() into one call. 🔧 💡
    no-array-reduce Disallow Array#reduce() and Array#reduceRight().
    no-await-expression-member Disallow member access from await expression. 🔧
    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-array Require Array.isArray() instead of instanceof Array. 🔧
    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-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-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-unreadable-array-destructuring Disallow unreadable array destructuring. 🔧
    no-unreadable-iife Disallow unreadable IIFEs.
    no-unsafe-regex Disallow unsafe regular expressions.
    no-unused-properties Disallow unused object properties.
    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(…) over the first 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() over Array#findIndex() when looking for the index of an item. 🔧 💡
    prefer-array-some Prefer .some(…) over .filter(…).length check and .find(…). 🔧 💡
    prefer-at Prefer .at() method for index access and String#charAt(). 🔧 💡
    prefer-code-point Prefer String#codePointAt(…) over String#charCodeAt(…) and String.fromCodePoint(…) over String.fromCharCode(…). 💡
    prefer-date-now Prefer 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-includes Prefer .includes() over .indexOf() 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-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 for {String,Array,TypedArray}#slice(), Array#splice() and Array#at(). 🔧
    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(). 🔧
    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-spread Prefer the spread operator over Array.from(…), Array#concat(…), Array#slice() and String#split(''). 🔧 💡
    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-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-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. 🔧 💡
    template-indent Fix whitespace-insensitive template indentation. 🔧
    text-encoding-identifier-case Enforce consistent case for text encoding identifiers. 🔧 💡
    throw-new-error Require new when throwing an error. 🔧

    Deprecated Rules

    See docs/

    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.

    Recommended config

    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"




    npm i eslint-plugin-unicorn

    DownloadsWeekly Downloads






    Unpacked Size

    531 kB

    Total Files


    Last publish


    • sindresorhus