版本

貢獻核心規則

ESLint 核心規則是包含在 ESLint 套件中的規則。

規則編寫文件

關於編寫規則的完整參考資訊,請參閱 自訂規則。自訂規則和核心規則都具有相同的 API。核心規則和自訂規則之間的主要差異在於

  1. 核心規則包含在 eslint 套件中。
  2. 核心規則必須遵守本頁文件中記錄的慣例。

檔案結構

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.dev.org.tw/docs/rules/no-extra-semi"
        },
        fixable: "code",
        schema: [] // no options
    },
    create: function(context) {
        return {
            // callback functions
        };
    }
};

規則單元測試

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- 前綴,例如禁止 eval()no-eval 和禁止 debuggerno-debugger
  • 如果您的規則是強制包含某事物,請使用不帶特殊前綴的簡短名稱。

凍結規則

當規則功能完整時,它們會被標記為凍結(在文件中以 ❄️ 表示)。當規則的預期目的已完全實現,使其捕獲 80% 或更多預期的違規行為並涵蓋大多數常見例外情況時,規則被認為是功能完整的。在那之後,我們希望使用者在發現未涵蓋的邊緣情況時使用 停用註解

當規則被凍結時,表示

  • 錯誤修復:我們仍將修復已確認的錯誤。
  • 新的 ECMAScript 功能:我們將確保與新的 ECMAScript 功能的相容性,這表示規則不會在新語法上崩潰。
  • 新選項:除非選項是修復錯誤或支援新增加的 ECMAScript 功能的唯一方法,否則我們不會新增任何新選項。

如果您發現凍結的規則透過變更對您來說會更好用,我們建議複製規則原始碼並修改它以符合您的需求。

變更語言