贡献核心规则
ESLint 核心规则是指那些包括在 ESLint 包里的规则。
规则编写文档
全部可供参考的编写规则信息,均已列在自定义规则中。自定义规则和核心规则采用相同的 API。核心规则和自定义规则的主要差别在于:
- 核心规则包括在 
eslint包中。 - 核心规则必须遵守此页列出的规范。
 
文件结构
ESLint 中的每个核心规则均有三个以其标识符命名的文件(比如,no-extra-semi)。
- 在 
lib/rules目录中的源文件(比如,no-extra-semi.js) - 在 
tests/lib/rules目录中的测试文件(比如no-extra-semi.js) - 在 
docs/src/rules目录中的 Markdown 文档文件(比如no-extra-semi.md) 
重要:如果你向 ESLint 提交了一个核心规则,你必须遵守于下方解释的规范。
这是一个规则源文件的基础格式:
/**
 * @fileoverview Rule to disallow unnecessary semicolons
 * @author Nicholas C. Zakas
 */
"use strict";
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
/** @type {import('../shared/types').Rule} */
module.exports = {
    meta: {
        type: "suggestion",
        docs: {
            description: "disallow unnecessary semicolons",
            recommended: true,
            url: "https://eslint.org/docs/rules/no-extra-semi"
        },
        fixable: "code",
        schema: [] // 没有提供选项
    },
    create: function(context) {
        return {
            // 回调函数
        };
    }
};
规则单元测试
ESLint 核心中每个捆绑的规则都必须有一个单元测试集,方可被接受。测试文件和源文件名字相同但处于 tests/lib/ 中。比如,如果规则源文件是 lib/rules/foo.js,那么测试文件就应该是 tests/lib/rules/foo.js。
ESLint 提供了 RuleTester 实用工具来简化编写规则测试的难度。
性能测试
为了测试检查过程高效且不易察觉,在编写新的规则货修改已有规则时验证性能影响就很有必要。
要学习如何配置验证各规则的性能,可以参考自定义规则文档中的验证规则性能章节。
在 ESLint 核心仓库中开发,npm run perf 命令行提供了运行 ESLint 且启用全部核心规则时的高级概览。
$ git checkout main
Switched to branch 'main'
$ npm run perf
CPU Speed is 2200 with multiplier 7500000
Performance Run #1:  1394.689313ms
Performance Run #2:  1423.295351ms
Performance Run #3:  1385.09515ms
Performance Run #4:  1382.406982ms
Performance Run #5:  1409.68566ms
Performance budget ok:  1394.689313ms (limit: 3409.090909090909ms)
$ git checkout my-rule-branch
Switched to branch 'my-rule-branch'
$ npm run perf
CPU Speed is 2200 with multiplier 7500000
Performance Run #1:  1443.736547ms
Performance Run #2:  1419.193291ms
Performance Run #3:  1436.018228ms
Performance Run #4:  1473.605485ms
Performance Run #5:  1457.455283ms
Performance budget ok:  1443.736547ms (limit: 3409.090909090909ms)
规则命名规范
ESLint 规则命名规范遵守:
- 在两个词中间使用连接号。
 - 如果规则仅用于禁用某些特定行为,则以 
no-为前缀,如no-eval用于禁用eval()以及no-debugger用于禁用debugger。 - 如果规则强制包括某些特定行为,则使用短且不包括特殊前缀的名称。