
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
eslint-plugin-unicorn
Advanced tools
The eslint-plugin-unicorn package is a set of ESLint rules that aim to improve code quality by enforcing best practices, preventing common mistakes, and suggesting modern syntax and methods. It includes a variety of rules that are not covered by the core ESLint rules or other plugins, focusing on code enhancements and consistency.
Filename Case
Enforces a specific case for filenames, which can be configured to be kebab-case, camelCase, or snake_case. This helps maintain consistency in the naming of files across a project.
"unicorn/filename-case": ["error", {"case": "kebabCase"}]
Number Literal Case
Enforces lowercase identifier and uppercase value for number literals, improving readability and consistency in the code.
"unicorn/number-literal-case": "error"
Prevent Abbreviations
Discourages the use of abbreviations in variable names, function names, and other identifiers to improve code clarity and readability.
"unicorn/prevent-abbreviations": ["error", {"replacements": {"temp": false, "err": {"error": true}}}]
Better Regex
Suggests simpler and more optimized regular expressions to improve performance and readability.
"unicorn/better-regex": "error"
Consistent Function Scoping
Enforces that functions are defined at the highest possible level, which can help with readability and reduce the complexity of nested functions.
"unicorn/consistent-function-scoping": "error"
This plugin provides linting rules related to ES2015+ import/export syntax, helping to ensure proper import order, naming, and file path correctness. It is similar to eslint-plugin-unicorn in that it enforces best practices, but it focuses specifically on module import and export issues.
This plugin enforces best practices for JavaScript promises. It is similar to eslint-plugin-unicorn in its goal to improve code quality, but it focuses specifically on the use of promises and asynchronous code.
This plugin checks JSX code for accessibility issues, ensuring that web applications are accessible to users with disabilities. While eslint-plugin-unicorn focuses on general JavaScript code quality, eslint-plugin-jsx-a11y focuses on accessibility concerns in React and JSX.
This plugin provides React-specific linting rules. It is similar to eslint-plugin-unicorn in that it helps maintain code quality and consistency, but it is tailored specifically for React development.
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
Requires ESLint >=9.20.0
, 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/better-regex': '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-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 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. | β | ||
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 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. | β | ||
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-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-for-each | Prefer forβ¦of over the forEach method. | β βοΈ | π§ | π‘ |
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-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-builtins | Disallow instanceof with built-in objects | β βοΈ | π§ | π‘ |
no-invalid-fetch-options | Disallow invalid options in fetch() and new Request() . | β βοΈ | ||
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-magic-array-flat-depth | Disallow a magic number as the depth argument in Array#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() 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-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-thenable | Disallow then property. | β βοΈ | ||
no-this-assignment | Disallow assigning this to a variable. | β βοΈ | ||
no-typeof-undefined | Disallow comparing undefined using typeof . | β βοΈ | π§ | π‘ |
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-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-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() over on -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}() over Array#{findIndex,findLastIndex}() when looking for the index of an item. | β βοΈ | π§ | π‘ |
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-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-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-global-this | Prefer globalThis over window , self , and global . | β βοΈ | π§ | |
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-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-min-max | Prefer Math.min() and Math.max() over ternaries for simple comparisons. | β βοΈ | π§ | |
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 when possible. | β βοΈ | π§ | |
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() and .getElementsByName() . | β | π§ | |
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-set-size | Prefer using Set#size instead of Array#length . | β βοΈ | π§ | |
prefer-single-call | Enforce combining multiple Array#push() , Element#classList.{add,remove}() , and importScripts() into one call. | β βοΈ | π§ | π‘ |
prefer-spread | Prefer the spread operator over Array.from(β¦) , Array#concat(β¦) , Array#{slice,toSpliced}() and String#split('') . | β | π§ | π‘ |
prefer-string-raw | Prefer using the String.raw tag to avoid escaping \ . | β βοΈ | π§ | |
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-structured-clone | Prefer using structuredClone to create a deep clone. | β βοΈ | π‘ | |
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-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 targetOrigin argument with window.postMessage() . | π‘ | ||
string-content | Enforce better string content. | π§ | π‘ | |
switch-case-braces | Enforce consistent brace style for 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. | β βοΈ | π§ |
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/better-regex': '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/better-regex': 'warn',
},
},
];
FAQs
More than 100 powerful ESLint rules
The npm package eslint-plugin-unicorn receives a total of 3,938,296 weekly downloads. As such, eslint-plugin-unicorn popularity was classified as popular.
We found that eslint-plugin-unicorn demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last weekβs supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.