Package Exports
- eslint-plugin-unicorn
Readme
eslint-plugin-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-unicornRequires 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 Datedirectly 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(), andfindLastIndex(). | β βοΈ | π§ | |
| consistent-function-scoping | Move function definitions to the highest possible scope. | β | ||
| custom-error-definition | Enforce correct Errorsubclassing. | π§ | ||
| empty-brace-spaces | Enforce no spaces between braces. | β | π§ | |
| error-message | Enforce passing a messagevalue 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 lengthorsizeproperty 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 newfor all builtins, exceptString,Number,Boolean,SymbolandBigInt. | β βοΈ | π§ | π‘ | 
| no-abusive-eslint-disable | Enforce specifying rules to disable in eslint-disablecomments. | β βοΈ | ||
| no-accessor-recursion | Disallow recursive access to thiswithin 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β¦ofover theforEachmethod. | β βοΈ | π§ | π‘ | 
| no-array-method-this-argument | Disallow using the thisargument in array methods. | β βοΈ | π§ | π‘ | 
| no-array-reduce | Disallow Array#reduce()andArray#reduceRight(). | β | ||
| no-array-reverse | Prefer Array#toReversed()overArray#reverse(). | β βοΈ | π‘ | |
| no-array-sort | Prefer Array#toSorted()overArray#sort(). | β βοΈ | π‘ | |
| no-await-expression-member | Disallow member access from await expression. | β | π§ | |
| no-await-in-promise-methods | Disallow using awaitinPromisemethod parameters. | β βοΈ | π‘ | |
| no-console-spaces | Do not use leading/trailing space between console.logparameters. | β βοΈ | π§ | |
| no-document-cookie | Do not use document.cookiedirectly. | β βοΈ | ||
| no-empty-file | Disallow empty files. | β βοΈ | ||
| no-for-loop | Do not use a forloop that can be replaced with afor-ofloop. | β | π§ | π‘ | 
| no-hex-escape | Enforce the use of Unicode escapes instead of hexadecimal escapes. | β βοΈ | π§ | |
| no-instanceof-builtins | Disallow instanceofwith built-in objects | β βοΈ | π§ | π‘ | 
| no-invalid-fetch-options | Disallow invalid options in fetch()andnew Request(). | β βοΈ | ||
| no-invalid-remove-event-listener | Prevent calling EventTarget#removeEventListener()with the result of an expression. | β βοΈ | ||
| no-keyword-prefix | Disallow identifiers starting with neworclass. | |||
| no-lonely-if | Disallow ifstatements as the only statement inifblocks withoutelse. | β βοΈ | π§ | |
| no-magic-array-flat-depth | Disallow a magic number as the depthargument inArray#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()andBuffer.alloc()instead of the deprecatednew Buffer(). | β βοΈ | π§ | π‘ | 
| no-null | Disallow the use of the nullliteral. | β | π§ | π‘ | 
| 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 Promisemethods. | β βοΈ | π§ | π‘ | 
| no-static-only-class | Disallow classes that only have static members. | β βοΈ | π§ | |
| no-thenable | Disallow thenproperty. | β βοΈ | ||
| no-this-assignment | Disallow assigning thisto a variable. | β βοΈ | ||
| no-typeof-undefined | Disallow comparing undefinedusingtypeof. | β βοΈ | π§ | π‘ | 
| no-unnecessary-array-flat-depth | Disallow using 1as thedepthargument ofArray#flat(). | β βοΈ | π§ | |
| no-unnecessary-array-splice-count | Disallow using .lengthorInfinityas thedeleteCountorskipCountargument ofArray#{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 .lengthorInfinityas theendargument 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()overon-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}()overArray#{findIndex,findLastIndex}()when looking for the index of an item. | β βοΈ | π§ | π‘ | 
| prefer-array-some | Prefer .some(β¦)over.filter(β¦).lengthcheck and.{find,findLast,findIndex,findLastIndex}(β¦). | β βοΈ | π§ | π‘ | 
| prefer-at | Prefer .at()method for index access andString#charAt(). | β βοΈ | π§ | π‘ | 
| prefer-bigint-literals | Prefer BigIntliterals over the constructor. | β βοΈ | π§ | π‘ | 
| prefer-blob-reading-methods | Prefer Blob#arrayBuffer()overFileReader#readAsArrayBuffer(β¦)andBlob#text()overFileReader#readAsText(β¦). | β βοΈ | ||
| prefer-class-fields | Prefer class field declarations over thisassignments in constructors. | β βοΈ | π§ | π‘ | 
| prefer-classlist-toggle | Prefer using Element#classList.toggle()to toggle class names. | β βοΈ | π§ | π‘ | 
| prefer-code-point | Prefer String#codePointAt(β¦)overString#charCodeAt(β¦)andString.fromCodePoint(β¦)overString.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()overNode#appendChild(). | β βοΈ | π§ | |
| prefer-dom-node-dataset | Prefer using .dataseton DOM elements over calling attribute methods. | β βοΈ | π§ | |
| prefer-dom-node-remove | Prefer childNode.remove()overparentNode.removeChild(childNode). | β βοΈ | π§ | π‘ | 
| prefer-dom-node-text-content | Prefer .textContentover.innerText. | β βοΈ | π‘ | |
| prefer-event-target | Prefer EventTargetoverEventEmitter. | β βοΈ | ||
| prefer-export-from | Prefer exportβ¦fromwhen re-exporting. | β | π§ | π‘ | 
| prefer-global-this | Prefer globalThisoverwindow,self, andglobal. | β βοΈ | π§ | |
| prefer-import-meta-properties | Prefer import.meta.{dirname,filename}over legacy techniques for getting file paths. | π§ | ||
| prefer-includes | Prefer .includes()over.indexOf(),.lastIndexOf(), andArray#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#keyoverKeyboardEvent#keyCode. | β βοΈ | π§ | |
| prefer-logical-operator-over-ternary | Prefer using a logical operator over a ternary. | β βοΈ | π‘ | |
| prefer-math-min-max | Prefer Math.min()andMath.max()over ternaries for simple comparisons. | β βοΈ | π§ | |
| prefer-math-trunc | Enforce the use of Math.truncinstead of bitwise operators. | β βοΈ | π§ | π‘ | 
| prefer-modern-dom-apis | Prefer .before()over.insertBefore(),.replaceWith()over.replaceChild(), prefer one of.before(),.after(),.append()or.prepend()overinsertAdjacentText()andinsertAdjacentElement(). | β βοΈ | π§ | |
| prefer-modern-math-apis | Prefer modern MathAPIs over legacy patterns. | β βοΈ | π§ | |
| prefer-module | Prefer JavaScript modules (ESM) over CommonJS. | β βοΈ | π§ | π‘ | 
| prefer-native-coercion-functions | Prefer using String,Number,BigInt,Boolean, andSymboldirectly. | β βοΈ | π§ | |
| prefer-negative-index | Prefer negative index over .length - indexwhen possible. | β βοΈ | π§ | |
| prefer-node-protocol | Prefer using the node:protocol when importing Node.js builtin modules. | β βοΈ | π§ | |
| prefer-number-properties | Prefer Numberstatic 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 catchbinding 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()overFunction#apply(). | β βοΈ | π§ | |
| prefer-regexp-test | Prefer RegExp#test()overString#match()andRegExp#exec(). | β βοΈ | π§ | π‘ | 
| prefer-set-has | Prefer Set#has()overArray#includes()when checking for existence or non-existence. | β βοΈ | π§ | π‘ | 
| prefer-set-size | Prefer using Set#sizeinstead ofArray#length. | β βοΈ | π§ | |
| prefer-single-call | Enforce combining multiple Array#push(),Element#classList.{add,remove}(), andimportScripts()into one call. | β βοΈ | π§ | π‘ | 
| prefer-spread | Prefer the spread operator over Array.from(β¦),Array#concat(β¦),Array#{slice,toSpliced}()andString#split(''). | β | π§ | π‘ | 
| prefer-string-raw | Prefer using the String.rawtag to avoid escaping\. | β βοΈ | π§ | |
| prefer-string-replace-all | Prefer String#replaceAll()over regex searches with the global flag. | β βοΈ | π§ | |
| prefer-string-slice | Prefer String#slice()overString#substr()andString#substring(). | β βοΈ | π§ | |
| prefer-string-starts-ends-with | Prefer String#startsWith()&String#endsWith()overRegExp#test(). | β βοΈ | π§ | π‘ | 
| prefer-string-trim-start-end | Prefer String#trimStart()/String#trimEnd()overString#trimLeft()/String#trimRight(). | β βοΈ | π§ | |
| prefer-structured-clone | Prefer using structuredCloneto create a deep clone. | β βοΈ | π‘ | |
| prefer-switch | Prefer switchover multipleelse-if. | β βοΈ | π§ | |
| prefer-ternary | Prefer ternary expressions over simple if-elsestatements. | β βοΈ | π§ | |
| prefer-top-level-await | Prefer top-level await over top-level promises and async function calls. | β βοΈ | π‘ | |
| prefer-type-error | Enforce throwing TypeErrorin 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 targetOriginargument withwindow.postMessage(). | π‘ | ||
| string-content | Enforce better string content. | π§ | π‘ | |
| switch-case-braces | Enforce consistent brace style for caseclauses. | β | π§ | |
| template-indent | Fix whitespace-insensitive template indentation. | β | π§ | |
| text-encoding-identifier-case | Enforce consistent case for text encoding identifiers. | β βοΈ | π§ | π‘ | 
| throw-new-error | Require newwhen 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',
            },
        },
];