All Projects → sindresorhus → Eslint Plugin Unicorn

sindresorhus / Eslint Plugin Unicorn

Licence: mit
Various awesome ESLint rules

Programming Languages

javascript
184084 projects - #8 most used programming language
EJS
674 projects

Projects that are alternatives of or similar to Eslint Plugin Unicorn

Xo
❤️ JavaScript/TypeScript linter (ESLint wrapper) with great defaults
Stars: ✭ 6,277 (+191.01%)
Mutual labels:  eslint, eslint-plugin, unicorns, eslint-rules, xo
eslint-config-get-off-my-lawn
A highly opinionated, sharable config of ESLint rules to produce beautiful, readable JavaScript.
Stars: ✭ 44 (-97.96%)
Mutual labels:  eslint, eslint-plugin, eslint-config, eslint-rules
eslint-config-xo-flow
ESLint shareable config for Flow to be used with eslint-config-xo
Stars: ✭ 24 (-98.89%)
Mutual labels:  eslint-config, eslint-rules, xo
eslint-plugin
Enforcing best practices for Effector
Stars: ✭ 69 (-96.8%)
Mutual labels:  eslint, eslint-plugin, eslint-config
Eslint Plugin Simple Import Sort
Easy autofixable import sorting.
Stars: ✭ 493 (-77.14%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Sonarjs
SonarJS rules for ESLint
Stars: ✭ 458 (-78.77%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Jest
ESLint plugin for Jest
Stars: ✭ 699 (-67.59%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Vue I18n
🌐 ESLint plugin for Vue I18n
Stars: ✭ 50 (-97.68%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Html
An ESLint plugin to extract and lint scripts from HTML files.
Stars: ✭ 333 (-84.56%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Node
Additional ESLint's rules for Node.js
Stars: ✭ 740 (-65.69%)
Mutual labels:  eslint, eslint-plugin
Eslint Import Resolver Alias
a simple Node behavior import resolution plugin for eslint-plugin-import, supporting module alias
Stars: ✭ 121 (-94.39%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Babel
An ESlint rule plugin companion to babel-eslint
Stars: ✭ 391 (-81.87%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Testing Library
ESLint plugin to follow best practices and anticipate common mistakes when writing tests with Testing Library
Stars: ✭ 384 (-82.2%)
Mutual labels:  eslint, eslint-plugin
Sowing Machine
🌱A React UI toolchain & JSX alternative
Stars: ✭ 64 (-97.03%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Typescript
TypeScript plugin for ESLint
Stars: ✭ 342 (-84.14%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin
ESLint configurations and additional rules for me
Stars: ✭ 19 (-99.12%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Monorepo
ESLint Plugin for monorepos
Stars: ✭ 56 (-97.4%)
Mutual labels:  eslint, eslint-plugin
Eslint Mdx
ESLint Parser/Plugin for MDX
Stars: ✭ 89 (-95.87%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin I18n Json
Fully extendable eslint plugin for JSON i18n translation files.
Stars: ✭ 101 (-95.32%)
Mutual labels:  eslint, eslint-plugin
Eslint Plugin Import
ESLint plugin with rules that help validate proper imports.
Stars: ✭ 3,722 (+72.55%)
Mutual labels:  eslint-plugin, eslint

eslint-plugin-unicorn Coverage Status npm version

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": "latest",
			"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-method-this-argument": "error",
			"unicorn/no-array-push-push": "error",
			"unicorn/no-array-reduce": "error",
			"unicorn/no-await-expression-member": "error",
			"unicorn/no-console-spaces": "error",
			"unicorn/no-document-cookie": "error",
			"unicorn/no-empty-file": "error",
			"unicorn/no-for-loop": "error",
			"unicorn/no-hex-escape": "error",
			"unicorn/no-instanceof-array": "error",
			"unicorn/no-invalid-remove-event-listener": "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-fallback-in-spread": "error",
			"unicorn/no-useless-length-check": "error",
			"unicorn/no-useless-spread": "error",
			"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-code-point": "error",
			"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-export-from": "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-from-entries": "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": "off",
			"unicorn/string-content": "off",
			"unicorn/template-indent": "warn",
			"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-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 Forbid 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 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-fallback-in-spread Forbid useless fallback when spreading in object literals. 🔧
no-useless-length-check Disallow useless array length check. 🔧
no-useless-spread Disallow unnecessary spread. 🔧
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 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-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-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-from-entries Prefer using Object.fromEntries(…) to transform a list of key-value pairs into an object. 🔧
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(…), 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. 🔧
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. 🔧
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.

All config

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

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

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

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

Maintainers

Former

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].