Skip to content

nikolai-katkov/eslint-plugin-unicorn

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

eslint-plugin-unicorn Coverage Status

Various awesome 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

Configure it in package.json.

{
	"name": "my-awesome-project",
	"eslintConfig": {
		"env": {
			"es6": true
		},
		"parserOptions": {
			"ecmaVersion": 2021,
			"sourceType": "module"
		},
		"plugins": [
			"unicorn"
		],
		"rules": {
			"unicorn/better-regex": "error",
			"unicorn/catch-error-name": "error",
			"unicorn/consistent-destructuring": "error",
			"unicorn/consistent-function-scoping": "error",
			"unicorn/custom-error-definition": "off",
			"unicorn/empty-brace-spaces": "error",
			"unicorn/error-message": "error",
			"unicorn/escape-case": "error",
			"unicorn/expiring-todo-comments": "error",
			"unicorn/explicit-length-check": "error",
			"unicorn/filename-case": "error",
			"unicorn/import-index": "off",
			"unicorn/import-style": "error",
			"unicorn/new-for-builtins": "error",
			"unicorn/no-abusive-eslint-disable": "error",
			"unicorn/no-array-callback-reference": "error",
			"unicorn/no-array-for-each": "error",
			"unicorn/no-array-push-push": "error",
			"unicorn/no-array-reduce": "error",
			"unicorn/no-console-spaces": "error",
			"unicorn/no-document-cookie": "error",
			"unicorn/no-for-loop": "error",
			"unicorn/no-hex-escape": "error",
			"unicorn/no-instanceof-array": "error",
			"unicorn/no-keyword-prefix": "off",
			"unicorn/no-lonely-if": "error",
			"no-nested-ternary": "off",
			"unicorn/no-nested-ternary": "error",
			"unicorn/no-new-array": "error",
			"unicorn/no-new-buffer": "error",
			"unicorn/no-null": "error",
			"unicorn/no-object-as-default-parameter": "error",
			"unicorn/no-process-exit": "error",
			"unicorn/no-static-only-class": "error",
			"unicorn/no-this-assignment": "error",
			"unicorn/no-unreadable-array-destructuring": "error",
			"unicorn/no-unsafe-regex": "off",
			"unicorn/no-unused-properties": "off",
			"unicorn/no-useless-undefined": "error",
			"unicorn/no-zero-fractions": "error",
			"unicorn/number-literal-case": "error",
			"unicorn/numeric-separators-style": "error",
			"unicorn/prefer-add-event-listener": "error",
			"unicorn/prefer-array-find": "error",
			"unicorn/prefer-array-flat": "error",
			"unicorn/prefer-array-flat-map": "error",
			"unicorn/prefer-array-index-of": "error",
			"unicorn/prefer-array-some": "error",
			"unicorn/prefer-at": "off",
			"unicorn/prefer-date-now": "error",
			"unicorn/prefer-default-parameters": "error",
			"unicorn/prefer-dom-node-append": "error",
			"unicorn/prefer-dom-node-dataset": "error",
			"unicorn/prefer-dom-node-remove": "error",
			"unicorn/prefer-dom-node-text-content": "error",
			"unicorn/prefer-includes": "error",
			"unicorn/prefer-keyboard-event-key": "error",
			"unicorn/prefer-math-trunc": "error",
			"unicorn/prefer-modern-dom-apis": "error",
			"unicorn/prefer-module": "error",
			"unicorn/prefer-negative-index": "error",
			"unicorn/prefer-node-protocol": "error",
			"unicorn/prefer-number-properties": "error",
			"unicorn/prefer-object-has-own": "off",
			"unicorn/prefer-optional-catch-binding": "error",
			"unicorn/prefer-prototype-methods": "error",
			"unicorn/prefer-query-selector": "error",
			"unicorn/prefer-reflect-apply": "error",
			"unicorn/prefer-regexp-test": "error",
			"unicorn/prefer-set-has": "error",
			"unicorn/prefer-spread": "error",
			"unicorn/prefer-string-replace-all": "off",
			"unicorn/prefer-string-slice": "error",
			"unicorn/prefer-string-starts-ends-with": "error",
			"unicorn/prefer-string-trim-start-end": "error",
			"unicorn/prefer-switch": "error",
			"unicorn/prefer-ternary": "error",
			"unicorn/prefer-top-level-await": "off",
			"unicorn/prefer-type-error": "error",
			"unicorn/prevent-abbreviations": "error",
			"unicorn/require-array-join-separator": "error",
			"unicorn/require-number-to-fixed-digits-argument": "error",
			"unicorn/require-post-message-target-origin": "error",
			"unicorn/string-content": "off",
			"unicorn/throw-new-error": "error"
		}
	}
}

Rules

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-index Enforce importing index files with .. πŸ”§
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 Array#forEach(…). βœ… πŸ”§
no-array-push-push Enforce combining multiple Array#push() into one call. βœ… πŸ”§ πŸ’‘
no-array-reduce Disallow Array#reduce() and Array#reduceRight(). βœ…
no-console-spaces Do not use leading/trailing space between console.log parameters. βœ… πŸ”§
no-document-cookie Do not use document.cookie directly. βœ…
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-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 Forbid classes that only have static members. βœ… πŸ”§
no-this-assignment Disallow assigning this to a variable. βœ…
no-unreadable-array-destructuring Disallow unreadable array destructuring. βœ… πŸ”§
no-unsafe-regex Disallow unsafe regular expressions.
no-unused-properties Disallow unused object properties.
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-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() over Node#appendChild(). βœ… πŸ”§
prefer-dom-node-dataset Prefer using .dataset on DOM elements over .setAttribute(…). βœ… πŸ”§
prefer-dom-node-remove Prefer childNode.remove() over parentNode.removeChild(childNode). βœ… πŸ”§ πŸ’‘
prefer-dom-node-text-content Prefer .textContent over .innerText. βœ… πŸ”§
prefer-includes Prefer .includes() over .indexOf() and Array#some() when checking for existence or non-existence. βœ… πŸ”§ πŸ’‘
prefer-keyboard-event-key Prefer KeyboardEvent#key over KeyboardEvent#keyCode. βœ… πŸ”§
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-module Prefer JavaScript modules (ESM) over CommonJS. βœ… πŸ”§ πŸ’‘
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-has-own Prefer Object.hasOwn(…) over Object.prototype.hasOwnProperty.call(…). πŸ”§
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(…) and Array#slice(). βœ… πŸ”§ πŸ’‘
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. βœ… πŸ”§
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. πŸ”§ πŸ’‘
throw-new-error Require new when throwing an error. βœ… πŸ”§

Deprecated Rules

See docs/deprecated-rules.md

Recommended config

This plugin exports a recommended config that enforces good practices.

Enable it in your package.json with the extends option:

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

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

Note: This config will also enable the correct parser options and environment.

Maintainers

Former

About

Various awesome ESLint rules

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 99.9%
  • EJS 0.1%