More than 100 powerful ESLint rules
You might want to check out XO, which includes this plugin.
Most rules target JavaScript and TypeScript, but some also lint CSS, HTML, JSON, and Markdown when used with the matching ESLint language plugin.
Propose or contribute a new rule β‘
Fully AI-generated pull requests are not accepted. You can use AI, but should be verified and cleaned up by a human. Only Opus 4.6+ (high-effort) and Codex 5.4+ (extra high) are accepted models. Preferably created with Opus and verified by Codex.
npm install --save-dev eslint eslint-plugin-unicornRequires ESLint >=10.4, flat config, and ESM.
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/prefer-module': 'error',
'unicorn/β¦': 'error',
},
},
// β¦
];πΌ 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-dom-traversing | Prefer better DOM traversal APIs. | β βοΈ | π‘ | |
| catch-error-name | Enforce a specific parameter name in catch clauses. | β | π§ | |
| class-reference-in-static-methods | Enforce consistent class references in static methods. | β | π‘ | |
| comment-content | Enforce better comment content. | β | π§ | |
| consistent-assert | Enforce consistent assertion style with node:assert. |
β | π§ | |
| consistent-compound-words | Enforce consistent spelling of compound words in identifiers. | β βοΈ | π‘ | |
| 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-function-style | Enforce function syntax by role. | π‘ | ||
| consistent-json-file-read | Enforce consistent JSON file reads before JSON.parse(). |
β | π§ | |
| consistent-template-literal-escape | Enforce consistent style for escaping ${ in template literals. |
β | π§ | |
| custom-error-definition | Enforce correct Error subclassing. |
π§ | ||
| dom-node-dataset | Enforce consistent style for DOM element dataset access. | β βοΈ | π§ | |
| 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 and directory names. | β | ||
| id-match | Require identifiers to match a specified regular expression. | |||
| 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-fill-with-reference-type | Disallow using reference values as Array#fill() values. |
β βοΈ | ||
| no-array-for-each | Prefer forβ¦of over the forEach method. |
β βοΈ | π§ | π‘ |
| no-array-from-fill | Disallow .fill() after Array.from({length: β¦}). |
β βοΈ | ||
| 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-blob-to-file | Disallow unnecessary Blob to File conversion. |
β βοΈ | π‘ | |
| no-break-in-nested-loop | Disallow break and continue in nested loops and switches inside loops. |
β | ||
| no-canvas-to-image | Prefer drawing canvases directly instead of converting them to images. | β βοΈ | ||
| no-computed-property-existence-check | Disallow dynamic object property existence checks. | β | π‘ | |
| no-confusing-array-splice | Disallow confusing uses of Array#{splice,toSpliced}(). |
β | π‘ | |
| no-console-spaces | Do not use leading/trailing space between console.log parameters. |
β βοΈ | π§ | |
| no-declarations-before-early-exit | Disallow declarations before conditional early exits when they are only used after the exit. | β βοΈ | π§ | |
| no-document-cookie | Do not use document.cookie directly. |
β βοΈ | ||
| no-duplicate-loops | Disallow .map() and .filter() in forβ¦of and for awaitβ¦of loop headers. |
β | ||
| no-duplicate-set-values | Disallow duplicate values in Set constructor array literals. |
β | ||
| no-empty-file | Disallow empty files. | β βοΈ | ||
| no-error-property-assignment | Disallow assigning to built-in error properties. | β βοΈ | ||
| no-exports-in-scripts | Disallow exports in scripts. | β βοΈ | ||
| no-for-loop | Do not use a for loop that can be replaced with a for-of loop. |
β | π§ | π‘ |
| no-global-object-property-assignment | Disallow assigning properties on the global object. | β βοΈ | ||
| no-hex-escape | Enforce the use of Unicode escapes instead of hexadecimal escapes. | β βοΈ | π§ | |
| no-immediate-mutation | Disallow immediate mutation after variable assignment. | β | π§ | π‘ |
| no-incorrect-query-selector | Disallow incorrect querySelector() and querySelectorAll() usage. |
β | π§ | |
| no-incorrect-template-string-interpolation | Disallow incorrect template literal interpolation syntax. | β βοΈ | π‘ | |
| no-instanceof-builtins | Disallow instanceof with built-in objects |
β βοΈ | π§ | π‘ |
| no-invalid-fetch-options | Disallow invalid options in fetch() and new Request(). |
β βοΈ | ||
| no-invalid-file-input-accept | Disallow invalid accept values on file inputs. |
π§ | ||
| 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-late-current-target-access | Disallow accessing event.currentTarget after the synchronous event dispatch has finished. |
β | ||
| 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-manually-wrapped-comments | Disallow manually wrapped comments. | π§ | ||
| no-named-default | Disallow named usage of default import and export. | β βοΈ | π§ | |
| no-negated-comparison | Disallow negated comparisons. | β βοΈ | π§ | π‘ |
| 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-redundant-comparison | Disallow comparisons made redundant by an equality check in the same logical AND. | β βοΈ | π§ | π‘ |
| no-return-array-push | Disallow returning the result of Array#push() with arguments. |
β | π‘ | |
| 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-subtraction-comparison | Prefer comparing values directly over subtracting and comparing to 0. |
β βοΈ | π§ | π‘ |
| no-thenable | Disallow then property. |
β βοΈ | ||
| no-this-assignment | Disallow assigning this to a variable. |
β βοΈ | ||
| no-this-outside-of-class | Disallow this outside of classes. |
β | ||
| no-typeof-undefined | Disallow comparing undefined using typeof. |
β βοΈ | π§ | π‘ |
| no-undeclared-class-members | Require class members to be declared. | β | π‘ | |
| 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-global-this | Disallow unnecessary globalThis references. |
β βοΈ | π§ | |
| no-unnecessary-nested-ternary | Disallow unnecessary nested ternary expressions. | β βοΈ | π§ | |
| 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-unnecessary-splice | Disallow Array#splice() when simpler alternatives exist. |
β | π§ | |
| no-unreadable-array-destructuring | Disallow unreadable array destructuring. | β βοΈ | π§ | |
| no-unreadable-iife | Disallow unreadable IIFEs. | β βοΈ | π‘ | |
| no-unreadable-new-expression | Disallow unreadable new expressions. |
β | ||
| no-unreadable-object-destructuring | Disallow unreadable object destructuring. | β βοΈ | ||
| no-unsafe-string-replacement | Disallow non-literal replacement values in String#replace() and String#replaceAll(). |
β | ||
| no-unused-array-method-return | Disallow ignoring the return value of selected array methods. | β βοΈ | ||
| no-unused-properties | Disallow unused object properties. | |||
| no-useless-boolean-cast | Disallow unnecessary Boolean() casts in array predicate callbacks. |
β βοΈ | π§ | |
| no-useless-collection-argument | Disallow useless values or fallbacks in Set, Map, WeakSet, or WeakMap. |
β βοΈ | π§ | π‘ |
| no-useless-concat | Disallow useless concatenation of literals. | β βοΈ | π§ | |
| no-useless-else | Disallow else after a statement that exits. |
β | π§ | |
| 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-recursion | Disallow simple recursive function calls that can be replaced with a loop. | β | ||
| 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-add-event-listener-options | Prefer an options object over a boolean in .addEventListener(). |
β βοΈ | π§ | |
| 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-from-map | Prefer using the Array.from() mapping function argument. |
β βοΈ | π‘ | |
| prefer-array-index-of | Prefer Array#{indexOf,lastIndexOf}() over Array#{findIndex,findLastIndex}() when looking for the index of an item. |
β βοΈ | π§ | π‘ |
| prefer-array-last-methods | Prefer last-oriented array methods over Array#reverse() or Array#toReversed() followed by a method. |
β βοΈ | π‘ | |
| 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-await | Prefer await over promise chaining. |
β βοΈ | ||
| 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-direct-iteration | Prefer direct iteration over default iterator method calls. | β βοΈ | π§ | |
| prefer-dispose | Prefer using using/await using over manual try/finally resource disposal. |
π‘ | ||
| prefer-dom-node-append | Prefer Element#append() over Node#appendChild(). |
β βοΈ | π§ | |
| prefer-dom-node-html-methods | Prefer .getHTML() and .setHTML() over .innerHTML. |
β | π§ | π‘ |
| prefer-dom-node-remove | Prefer childNode.remove() over parentNode.removeChild(childNode). |
β βοΈ | π§ | π‘ |
| prefer-dom-node-text-content | Prefer .textContent over .innerText. |
β βοΈ | π‘ | |
| prefer-early-return | Prefer early returns over full-function conditional wrapping. | β βοΈ | ||
| prefer-event-target | Prefer EventTarget over EventEmitter. |
β βοΈ | ||
| prefer-export-from | Prefer exportβ¦from when re-exporting. |
β | π§ | π‘ |
| prefer-get-or-insert-computed | Prefer .getOrInsertComputed() when the default value has side effects. |
β | π§ | |
| prefer-global-number-constants | Prefer global numeric constants over Number static properties. |
β βοΈ | π§ | |
| prefer-global-this | Prefer globalThis over window, self, and global. |
β βοΈ | π§ | |
| prefer-https | Prefer HTTPS over HTTP. | β | π§ | |
| prefer-identifier-import-export-specifiers | Prefer identifiers over string literals in import and export specifiers. | β βοΈ | π§ | |
| 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-includes-over-repeated-comparisons | Prefer .includes() over repeated equality comparisons. |
β | ||
| prefer-iterable-in-constructor | Prefer passing iterables directly to constructors instead of filling empty collections. | β βοΈ | π§ | |
| prefer-iterator-concat | Prefer Iterator.concat(β¦) over temporary spread arrays. |
π§ | π‘ | |
| prefer-iterator-to-array | Prefer Iterator#toArray() over temporary arrays from iterator spreads. |
β | π§ | π‘ |
| prefer-iterator-to-array-at-end | Prefer moving .toArray() to the end of iterator helper chains. |
β βοΈ | π‘ | |
| prefer-keyboard-event-key | Prefer KeyboardEvent#key over deprecated keyboard event properties. |
β βοΈ | π§ | π‘ |
| prefer-location-assign | Prefer location.assign() over assigning to location.href. |
β | π§ | |
| prefer-logical-operator-over-ternary | Prefer using a logical operator over a ternary. | β βοΈ | π‘ | |
| prefer-math-abs | Prefer Math.abs() over manual absolute value expressions and symmetric range checks. |
β βοΈ | π§ | |
| prefer-math-min-max | Prefer Math.min() and Math.max() over ternaries for simple comparisons. |
β βοΈ | π§ | |
| prefer-math-trunc | Prefer Math.trunc() for truncating numbers. |
β βοΈ | π§ | π‘ |
| prefer-modern-dom-apis | Prefer modern DOM APIs. | β βοΈ | π§ | |
| 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-coercion | Prefer Number() over parseFloat() and base-10 parseInt(). |
β βοΈ | π‘ | |
| prefer-number-is-safe-integer | Prefer Number.isSafeInteger() over Number.isInteger(). |
β | π‘ | |
| prefer-number-properties | Prefer Number static methods over global functions and optionally static properties over global constants. |
β βοΈ | π§ | π‘ |
| prefer-object-from-entries | Prefer using Object.fromEntries(β¦) to transform a list of key-value pairs into an object. |
β βοΈ | π§ | |
| prefer-object-iterable-methods | Prefer the most specific Object iterable method. |
β βοΈ | π§ | |
| prefer-optional-catch-binding | Prefer omitting the catch binding parameter. |
β βοΈ | π§ | |
| prefer-private-class-fields | Prefer private class fields over the underscore-prefix convention. | β | π§ | |
| prefer-prototype-methods | Prefer borrowing methods from the prototype instead of the instance. | β βοΈ | π§ | |
| prefer-query-selector | Prefer .querySelector() and .querySelectorAll() over older DOM query methods. |
β | π§ | |
| prefer-queue-microtask | Prefer queueMicrotask() over process.nextTick(), setImmediate(), and setTimeout(β¦, 0). |
β βοΈ | π§ | |
| prefer-reflect-apply | Prefer Reflect.apply() over Function#apply(). |
β βοΈ | π§ | |
| prefer-regexp-test | Prefer RegExp#test() over String#match(), String#search(), and RegExp#exec(). |
β βοΈ | π§ | π‘ |
| prefer-response-static-json | Prefer Response.json() over new Response(JSON.stringify()). |
β βοΈ | π§ | |
| prefer-scoped-selector | Prefer :scope when using element query selector methods. |
β | π‘ | |
| 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-short-arrow-method | Prefer arrow function properties over methods with a single return. | β | π§ | |
| prefer-simple-condition-first | Prefer simple conditions first in logical expressions. | β βοΈ | π§ | π‘ |
| prefer-simple-sort-comparator | Prefer a simple comparison function for Array#sort(). |
β βοΈ | π‘ | |
| prefer-single-array-predicate | Prefer a single Array#some() or Array#every() with a combined predicate. |
β βοΈ | π‘ | |
| prefer-single-call | Enforce combining multiple Array#{push,unshift}(), Element#classList.{add,remove}(), and importScripts() into one call. |
β βοΈ | π§ | π‘ |
| prefer-single-object-destructuring | Prefer a single object destructuring declaration per local const source. | β | π§ | |
| prefer-split-limit | Prefer String#split() with a limit. |
β βοΈ | π§ | |
| prefer-spread | Prefer the spread operator over Array.from(β¦), Array#concat(β¦), and Array#{slice,toSpliced}(). |
β | π§ | π‘ |
| prefer-string-match-all | Prefer String#matchAll() over RegExp#exec() loops. |
β βοΈ | π§ | |
| prefer-string-pad-start-end | Prefer String#padStart() and String#padEnd() over manual string padding. |
β βοΈ | π§ | π‘ |
| prefer-string-raw | Prefer using the String.raw tag to avoid escaping \. |
β βοΈ | π§ | |
| prefer-string-repeat | Prefer String#repeat() for repeated whitespace. |
β βοΈ | π§ | |
| prefer-string-replace-all | Prefer String#replaceAll() over regex searches with the global flag and String#split().join(). |
β βοΈ | π§ | |
| 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() and String#indexOf() === 0. |
β βοΈ | π§ | π‘ |
| 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-temporal | Prefer Temporal over Date. |
π§ | π‘ | |
| 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. |
β βοΈ | π§ | |
| prefer-type-literal-last | Require type literals to be last in union and intersection types. | β βοΈ | π§ | |
| prefer-uint8array-base64 | Prefer Uint8Array#toBase64() and Uint8Array.fromBase64() over atob(), btoa(), and Buffer base64 conversions. |
β βοΈ | π‘ | |
| 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-array-sort-compare | Require a compare function when calling Array#sort() or Array#toSorted(). |
β βοΈ | π‘ | |
| require-css-escape | Require CSS.escape() for interpolated values in CSS selectors. |
β βοΈ | π§ | |
| 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-passive-events | Require passive event listeners for high-frequency events. | β βοΈ | π§ | |
| require-post-message-target-origin | Enforce using the targetOrigin argument with window.postMessage(). |
π‘ | ||
| require-proxy-trap-boolean-return | Require boolean-returning Proxy traps to return booleans. | β βοΈ | π§ | |
| 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. |
β βοΈ | π§ | |
| try-complexity | Limit the complexity of try blocks. |
While most rules target JavaScript and TypeScript, some also lint other file types when used with the corresponding ESLint language plugin such as @eslint/css, @eslint/json, @eslint/markdown, or @html-eslint/eslint-plugin. Each such rule declares this with the meta.languages field.
These rules work on any file type:
These rules also work on specific non-JavaScript languages:
| Name | CSS | HTML | JSON | Markdown |
|---|---|---|---|---|
expiring-todo-comments |
β | β | ||
no-empty-file |
β | β | β | β |
no-invalid-file-input-accept |
β |
See the list.
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';
export default [
// β¦
eslintPluginUnicorn.configs.recommended,
{
rules: {
'unicorn/prefer-module': 'warn',
},
},
];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/prefer-module': 'warn',
},
},
];