Project Icon

eslint-plugin-unicorn

强大的ESLint插件 提供100多条高质量规则

eslint-plugin-unicorn是一款功能丰富的ESLint插件,提供超过100条精心设计的规则。这些规则旨在帮助开发者编写更清晰、一致和安全的JavaScript代码。该插件与最新版ESLint兼容,支持通过npm安装,并提供ES Module和CommonJS两种配置方式。通过使用eslint-plugin-unicorn,可以显著提高代码质量和可维护性,是JavaScript项目开发的有力工具。

eslint-plugin-unicorn 覆盖率状态 npm 版本

独角兽

超过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 中配置每个规则。

如果你不使用预设,确保你使用与下面相同的 envparserOptions 配置。

{
	"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强制显式比较值的 lengthsize 属性。🔧💡
filename-case强制文件名使用特定的大小写风格。
import-style为每个模块强制使用特定的导入风格。
new-for-builtins强制对所有内置对象使用 new,除了 StringNumberBooleanSymbolBigInt🔧
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禁止标识符以 newclass 开头。
no-length-as-slice-end禁止使用 .length 作为 {Array,String,TypedArray}#slice()end 参数。🔧
no-lonely-if禁止在没有 elseif 块中只有一个 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优先使用 StringNumberBigIntBooleanSymbol 直接进行类型转换。🔧
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🔧

已弃用的规则

请参阅 docs/deprecated-rules.md

预设配置 (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"
	}
}

维护者

前任

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号