eslint-plugin-unicorn
超过100个强大的 ESLint 规则
你可能想看看 XO,它包含了这个插件。
安装
npm install --save-dev eslint eslint-plugin-unicorn
使用方法 (eslint.config.js
)
需要 ESLint >=8.56.0
。
使用预设配置或在 eslint.config.js
中配置每个规则。
如果你不使用预设,确保你使用与下面相同的 languageOptions
配置。
ES 模块(推荐)
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',
},
},
// …
];
CommonJS
'use strict';
const eslintPluginUnicorn = require('eslint-plugin-unicorn');
const globals = require('globals');
module.exports = [
{
languageOptions: {
globals: globals.builtin,
},
plugins: {
unicorn: eslintPluginUnicorn,
},
rules: {
'unicorn/better-regex': 'error',
'unicorn/…': 'error',
},
},
// …
];
使用方法(旧版:.eslintrc.*
或 package.json
)
使用预设配置或在 package.json
中配置每个规则。
如果你不使用预设,确保你使用与下面相同的 env
和 parserOptions
配置。
{
"name": "my-awesome-project",
"eslintConfig": {
"env": {
"es2024": true
},
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"unicorn"
],
"rules": {
"unicorn/better-regex": "error",
"unicorn/…": "error"
}
}
}
规则
💼 在配置中启用。
✅ 在recommended
配置中设置。
🔧 可通过--fix
CLI 选项自动修复。
💡 可通过编辑器建议手动修复。
名称 | 描述 | 💼 | 🔧 | 💡 |
---|---|---|---|---|
better-regex | 通过使正则表达式更简短、一致和安全来改进它们。 | ✅ | 🔧 | |
catch-error-name | 在 catch 子句中强制使用特定的参数名。 | ✅ | 🔧 | |
consistent-destructuring | 使用解构变量而不是属性。 | 🔧 | 💡 | |
consistent-empty-array-spread | 在数组字面量中展开三元运算符时,倾向于使用一致的类型。 | ✅ | 🔧 | |
consistent-function-scoping | 将函数定义移到最高可能的作用域。 | ✅ | ||
custom-error-definition | 强制正确的 Error 子类化。 | 🔧 | ||
empty-brace-spaces | 强制大括号之间不留空格。 | ✅ | 🔧 | |
error-message | 在创建内置错误时强制传递 message 值。 | ✅ | ||
escape-case | 要求转义序列使用大写值。 | ✅ | 🔧 | |
expiring-todo-comments | 为 TODO 注释添加过期条件。 | ✅ | ||
explicit-length-check | 强制显式比较值的 length 或 size 属性。 | ✅ | 🔧 | 💡 |
filename-case | 强制文件名使用特定的大小写风格。 | ✅ | ||
import-style | 为每个模块强制使用特定的导入风格。 | ✅ | ||
new-for-builtins | 强制对所有内置对象使用 new ,除了 String 、Number 、Boolean 、Symbol 和 BigInt 。 | ✅ | 🔧 | |
no-abusive-eslint-disable | 强制在 eslint-disable 注释中指定要禁用的规则。 | ✅ | ||
no-anonymous-default-export | 禁止将匿名函数和类作为默认导出。 | ✅ | 💡 | |
no-array-callback-reference | 防止直接将函数引用传递给迭代器方法。 | ✅ | 💡 | |
no-array-for-each | 优先使用 for…of 而不是 forEach 方法。 | ✅ | 🔧 | 💡 |
no-array-method-this-argument | 禁止在数组方法中使用 this 参数。 | ✅ | 🔧 | 💡 |
no-array-push-push | 强制将多个 Array#push() 合并为一次调用。 | ✅ | 🔧 | 💡 |
no-array-reduce | 禁止使用 Array#reduce() 和 Array#reduceRight() 。 | ✅ | ||
no-await-expression-member | 禁止对 await 表达式进行成员访问。 | ✅ | 🔧 | |
no-await-in-promise-methods | 禁止在 Promise 方法参数中使用 await 。 | ✅ | 💡 | |
no-console-spaces | 不要在 console.log 参数之间使用前导/尾随空格。 | ✅ | 🔧 | |
no-document-cookie | 不要直接使用 document.cookie 。 | ✅ | ||
no-empty-file | 禁止空文件。 | ✅ | ||
no-for-loop | 不要使用可以被 for-of 循环替代的 for 循环。 | ✅ | 🔧 | 💡 |
no-hex-escape | 强制使用 Unicode 转义而不是十六进制转义。 | ✅ | 🔧 | |
no-instanceof-array | 要求使用 Array.isArray() 而不是 instanceof Array 。 | ✅ | 🔧 | |
no-invalid-fetch-options | 禁止在 fetch() 和 new Request() 中使用无效选项。 | ✅ | ||
no-invalid-remove-event-listener | 防止使用表达式的结果调用 EventTarget#removeEventListener() 。 | ✅ | ||
no-keyword-prefix | 禁止标识符以 new 或 class 开头。 | |||
no-length-as-slice-end | 禁止使用 .length 作为 {Array,String,TypedArray}#slice() 的 end 参数。 | ✅ | 🔧 | |
no-lonely-if | 禁止在没有 else 的 if 块中只有一个 if 语句。 | ✅ | 🔧 | |
no-magic-array-flat-depth | 禁止在 Array#flat(…) 中使用魔术数字作为 depth 参数。 | ✅ | ||
no-negated-condition | 禁止使用否定条件。 | ✅ | 🔧 | |
no-negation-in-equality-check | 禁止在相等性检查中使用否定表达式。 | ✅ | 💡 | |
no-nested-ternary | 禁止嵌套的三元表达式。 | ✅ | 🔧 | |
no-new-array | 禁止使用 new Array() 。 | ✅ | 🔧 | 💡 |
no-new-buffer | 强制使用 Buffer.from() 和 Buffer.alloc() 而不是已弃用的 new Buffer() 。 | ✅ | 🔧 | 💡 |
no-null | 禁止使用 null 字面量。 | ✅ | 🔧 | 💡 |
no-object-as-default-parameter | 禁止将对象作为默认参数。 | ✅ | ||
no-process-exit | 禁止使用 process.exit() 。 | ✅ | ||
no-single-promise-in-promise-methods | 禁止将单元素数组传递给 Promise 方法。 | ✅ | 🔧 | 💡 |
no-static-only-class | 禁止只包含静态成员的类。 | ✅ | 🔧 | |
no-thenable | 禁止使用 then 属性。 | ✅ | ||
no-this-assignment | 禁止将 this 赋值给变量。 | ✅ | ||
no-typeof-undefined | 禁止使用 typeof 比较 undefined 。 | ✅ | 🔧 | 💡 |
no-unnecessary-await | 禁止对非 Promise 值使用 await。 | ✅ | 🔧 | |
no-unnecessary-polyfills | 强制使用内置方法而不是不必要的 polyfills。 | ✅ | ||
no-unreadable-array-destructuring | 禁止不可读的数组解构。 | ✅ | 🔧 | |
no-unreadable-iife | 禁止不可读的立即执行函数表达式(IIFE)。 | ✅ | ||
no-unused-properties | 禁止未使用的对象属性。 | |||
no-useless-fallback-in-spread | 禁止在对象字面量展开时使用无用的回退。 | ✅ | 🔧 | |
no-useless-length-check | 禁止无用的数组长度检查。 | ✅ | 🔧 | |
no-useless-promise-resolve-reject | 禁止在异步函数或 Promise 回调中返回/产生 Promise.resolve/reject() 。 | ✅ | 🔧 | |
no-useless-spread | 禁止不必要的展开运算符。 | ✅ | 🔧 | |
no-useless-switch-case | 禁止 switch 语句中无用的 case。 | ✅ | 💡 | |
no-useless-undefined | 禁止无用的 undefined 。 | ✅ | 🔧 | |
no-zero-fractions | 禁止带有零小数或悬空小数点的数字字面量。 | ✅ | 🔧 | |
number-literal-case | 强制数字字面量使用正确的大小写。 | ✅ | 🔧 | |
numeric-separators-style | 通过正确分组数字来强制数字分隔符的样式。 | ✅ | 🔧 | |
prefer-add-event-listener | 优先使用 .addEventListener() 和 .removeEventListener() 而不是 on 函数。 | ✅ | 🔧 | |
prefer-array-find | 优先使用 .find(…) 和 .findLast(…) 而不是 .filter(…) 的第一个或最后一个元素。 | ✅ | 🔧 | 💡 |
prefer-array-flat | 优先使用 Array#flat() 而不是传统的数组扁平化技术。 | ✅ | 🔧 | |
prefer-array-flat-map | 优先使用 .flatMap(…) 而不是 .map(…).flat() 。 | ✅ | 🔧 | |
prefer-array-index-of | 在查找项目索引时,优先使用 Array#{indexOf,lastIndexOf}() 而不是 Array#{findIndex,findLastIndex}() 。 | ✅ | 🔧 | 💡 |
prefer-array-some | 优先使用 .some(…) 而不是 .filter(…).length 检查和 .{find,findLast,findIndex,findLastIndex}(…) 。 | ✅ | 🔧 | 💡 |
prefer-at | 优先使用 .at() 方法进行索引访问和 String#charAt() 。 | ✅ | 🔧 | 💡 |
prefer-blob-reading-methods | 优先使用 Blob#arrayBuffer() 而不是 FileReader#readAsArrayBuffer(…) ,优先使用 Blob#text() 而不是 FileReader#readAsText(…) 。 | ✅ | ||
prefer-code-point | 优先使用 String#codePointAt(…) 而不是 String#charCodeAt(…) ,优先使用 String.fromCodePoint(…) 而不是 String.fromCharCode(…) 。 | ✅ | 💡 | |
prefer-date-now | 优先使用 Date.now() 获取自 Unix 纪元以来的毫秒数。 | ✅ | 🔧 | |
prefer-default-parameters | 优先使用默认参数而不是重新赋值。 | ✅ | 🔧 | 💡 |
prefer-dom-node-append | 优先使用 Node#append() 而不是 Node#appendChild() 。 | ✅ | 🔧 | |
prefer-dom-node-dataset | 优先在 DOM 元素上使用 .dataset 而不是调用属性方法。 | ✅ | 🔧 | |
prefer-dom-node-remove | 优先使用 childNode.remove() 而不是 parentNode.removeChild(childNode) 。 | ✅ | 🔧 | 💡 |
prefer-dom-node-text-content | 优先使用 .textContent 而不是 .innerText 。 | ✅ | 💡 | |
prefer-event-target | 优先使用 EventTarget 而不是 EventEmitter 。 | ✅ | ||
prefer-export-from | 在重新导出时优先使用 export…from 。 | ✅ | 🔧 | 💡 |
prefer-includes | 在检查存在或不存在时,优先使用 .includes() 而不是 .indexOf() 、.lastIndexOf() 和 Array#some() 。 | ✅ | 🔧 | 💡 |
prefer-json-parse-buffer | 优先将 JSON 文件读取为缓冲区。 | 🔧 | ||
prefer-keyboard-event-key | 优先使用 KeyboardEvent#key 而不是 KeyboardEvent#keyCode 。 | ✅ | 🔧 | |
prefer-logical-operator-over-ternary | 优先使用逻辑运算符而不是三元运算符。 | ✅ | 💡 | |
prefer-math-trunc | 强制使用 Math.trunc 而不是位运算符。 | ✅ | 🔧 | 💡 |
prefer-modern-dom-apis | 优先使用 .before() 而不是 .insertBefore() ,.replaceWith() 而不是 .replaceChild() ,优先使用 .before() 、.after() 、.append() 或 .prepend() 中的一个而不是 insertAdjacentText() 和 insertAdjacentElement() 。 | ✅ | 🔧 | |
prefer-modern-math-apis | 优先使用现代 Math API 而不是传统模式。 | ✅ | 🔧 | |
prefer-module | 优先使用 JavaScript 模块(ESM)而不是 CommonJS。 | ✅ | 🔧 | 💡 |
prefer-native-coercion-functions | 优先使用 String 、Number 、BigInt 、Boolean 和 Symbol 直接进行类型转换。 | ✅ | 🔧 | |
prefer-negative-index | 在可能的情况下,优先使用负索引而不是 .length - index 。 | ✅ | 🔧 | |
prefer-node-protocol | 导入 Node.js 内置模块时,优先使用 node: 协议。 | ✅ | 🔧 | |
prefer-number-properties | 优先使用 Number 的静态属性而不是全局属性。 | ✅ | 🔧 | 💡 |
prefer-object-from-entries | 优先使用 Object.fromEntries(…) 将键值对列表转换为对象。 | ✅ | 🔧 | |
prefer-optional-catch-binding | 优先省略 catch 绑定参数。 | ✅ | 🔧 | |
prefer-prototype-methods | 优先从原型而不是实例借用方法。 | ✅ | 🔧 | |
prefer-query-selector | 优先使用 .querySelector() 而不是 .getElementById() ,使用 .querySelectorAll() 而不是 .getElementsByClassName() 、.getElementsByTagName() 和 .getElementsByName() 。 | ✅ | 🔧 | |
prefer-reflect-apply | 优先使用 Reflect.apply() 而不是 Function#apply() 。 | ✅ | 🔧 | |
prefer-regexp-test | 优先使用 RegExp#test() 而不是 String#match() 和 RegExp#exec() 。 | ✅ | 🔧 | 💡 |
prefer-set-has | 检查元素是否存在或不存在时,优先使用 Set#has() 而不是 Array#includes() 。 | ✅ | 🔧 | 💡 |
prefer-set-size | 优先使用 Set#size 而不是 Array#length 。 | ✅ | 🔧 | |
prefer-spread | 优先使用扩展运算符而不是 Array.from(…) 、Array#concat(…) 、Array#{slice,toSpliced}() 和 String#split('') 。 | ✅ | 🔧 | 💡 |
prefer-string-raw | 优先使用 String.raw 标签以避免转义 \ 。 | ✅ | 🔧 | |
prefer-string-replace-all | 优先使用 String#replaceAll() 而不是带有全局标志的正则表达式搜索。 | ✅ | 🔧 | |
prefer-string-slice | 优先使用 String#slice() 而不是 String#substr() 和 String#substring() 。 | ✅ | 🔧 | |
prefer-string-starts-ends-with | 优先使用 String#startsWith() 和 String#endsWith() 而不是 RegExp#test() 。 | ✅ | 🔧 | 💡 |
prefer-string-trim-start-end | 优先使用 String#trimStart() / String#trimEnd() 而不是 String#trimLeft() / String#trimRight() 。 | ✅ | 🔧 | |
prefer-structured-clone | 优先使用 structuredClone 来创建深克隆。 | ✅ | 💡 | |
prefer-switch | 优先使用 switch 而不是多个 else-if 。 | ✅ | 🔧 | |
prefer-ternary | 对于简单的 if-else 语句,优先使用三元表达式。 | ✅ | 🔧 | |
prefer-top-level-await | 优先使用顶层 await 而不是顶层 Promise 和异步函数调用。 | ✅ | 💡 | |
prefer-type-error | 在类型检查条件中强制抛出 TypeError 。 | ✅ | 🔧 | |
prevent-abbreviations | 防止使用缩写。 | ✅ | 🔧 | |
relative-url-style | 强制使用一致的相对 URL 样式。 | ✅ | 🔧 | 💡 |
require-array-join-separator | 强制在使用 Array#join() 时提供分隔符参数。 | ✅ | 🔧 | |
require-number-to-fixed-digits-argument | 强制在使用 Number#toFixed() 时提供小数位数参数。 | ✅ | 🔧 | |
require-post-message-target-origin | 强制在使用 window.postMessage() 时提供 targetOrigin 参数。 | 💡 | ||
string-content | 强制使用更好的字符串内容。 | 🔧 | 💡 | |
switch-case-braces | 强制 case 子句使用一致的大括号样式。 | ✅ | 🔧 | |
template-indent | 修复对空白不敏感的模板缩进。 | ✅ | 🔧 | |
text-encoding-identifier-case | 强制文本编码标识符使用一致的大小写。 | ✅ | 🔧 | 💡 |
throw-new-error | 创建错误时要求使用 new 。 | ✅ | 🔧 |
已弃用的规则
预设配置 (eslint.config.js
)
有关扩展配置文件的更多信息,请参阅 ESLint 文档。
注意:预设配置还将启用正确的语言选项。
推荐配置
该插件导出了一个强制执行良好实践的 recommended
配置。
ES 模块(推荐)
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
export default [
// …
eslintPluginUnicorn.configs['flat/recommended'],
{
rules: {
'unicorn/better-regex': 'warn',
},
},
];
CommonJS
'use strict';
const eslintPluginUnicorn = require('eslint-plugin-unicorn');
module.exports = [
// …
eslintPluginUnicorn.configs['flat/recommended'],
{
rules: {
'unicorn/better-regex': 'warn',
},
},
];
所有配置
该插件导出了一个使用所有规则(除已弃用的规则外)的 all
配置。
ES 模块(推荐)
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
export default [
// …
eslintPluginUnicorn.configs['flat/all'],
{
rules: {
'unicorn/better-regex': 'warn',
},
},
];
CommonJS
'use strict';
const eslintPluginUnicorn = require('eslint-plugin-unicorn');
module.exports = [
// …
eslintPluginUnicorn.configs['flat/all'],
{
rules: {
'unicorn/better-regex': 'warn',
},
},
];
预设配置(.eslintrc.*
或 package.json
)
有关扩展配置文件的更多信息,请参阅 ESLint 文档。
推荐配置
该插件导出了一个强制执行良好实践的 recommended
配置。
{
"name": "my-awesome-project",
"eslintConfig": {
"extends": "plugin:unicorn/recommended",
"rules": {
"unicorn/better-regex": "warn"
}
}
}
所有配置
该插件导出了一个使用所有规则(除已弃用的规则外)的 all
配置。
{
"name": "my-awesome-project",
"eslintConfig": {
"extends": "plugin:unicorn/all"
}
}