版本

id-match

要求标识符匹配指定的正则表达式

❄️ 已冻结

此规则目前处于冻结状态,不接受功能请求。

“计算机科学中只有两件难事:缓存失效和命名。” — Phil Karlton

在一个项目中一致地命名事物是代码创建中经常被低估的一个方面。如果做得正确,它可以为您的团队节省数小时不必要的挠头和误入歧途。此规则允许您精确定义和强制执行团队应使用的变量和函数名称。不再将自己限制为 camelCase、snake_case、PascalCase 或 HungarianNotation。id-match 涵盖您的所有需求!

规则详情

此规则要求赋值和 function 定义中的标识符匹配指定的正则表达式。

选项

此规则有一个字符串选项,用于指定正则表达式。

例如,要强制执行驼峰命名约定

{
    "id-match": ["error", "^[a-z]+([A-Z][a-z]+)*$"]
}

对于此规则,使用 "^[a-z]+([A-Z][a-z]+)*$" 选项的错误代码示例

在 Playground 中打开
/*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$"]*/

const my_favorite_color = "#112C85";
const _myFavoriteColor  = "#112C85";
const myFavoriteColor_  = "#112C85";
const MY_FAVORITE_COLOR = "#112C85";
function do_something() {
    // ...
}

class My_Class {}

class myClass {
    do_something() {}
}

class anotherClass {
    #do_something() {}
}

对于此规则,使用 "^[a-z]+([A-Z][a-z]+)*$" 选项的正确代码示例

在 Playground 中打开
/*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$"]*/

const myFavoriteColor   = "#112C85";
const foo = bar.baz_boom;
const buz = { qux: bar.baz_boom };
do_something();
const obj = {
    my_pref: 1
};

class myClass {}

class anotherClass {
    doSomething() {}
}

class oneMoreClass {
    #doSomething() {}
}

此规则有一个对象选项

  • "properties": false (默认) 不检查对象属性
  • "properties": true 要求对象字面量属性和成员表达式赋值属性与指定的正则表达式匹配
  • "classFields": false (默认) 不检查类字段名称
  • "classFields": true 要求类字段名称与指定的正则表达式匹配
  • "onlyDeclarations": false (默认) 要求所有变量名与指定的正则表达式匹配
  • "onlyDeclarations": true 仅要求 varconstletfunctionclass 声明与指定的正则表达式匹配
  • "ignoreDestructuring": false (默认) 对解构的标识符强制执行 id-match
  • "ignoreDestructuring": true 不检查解构的标识符

properties

对于此规则,使用 "^[a-z]+([A-Z][a-z]+)*$", { "properties": true } 选项的错误代码示例

在 Playground 中打开
/*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$", { "properties": true }]*/

const obj = {
    my_pref: 1
};

obj.do_something = function() {
    // ...
};

classFields

对于此规则,使用 "^[a-z]+([A-Z][a-z]+)*$", { "classFields": true } 选项的错误代码示例

在 Playground 中打开
/*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$", { "classFields": true }]*/

class myClass {
    my_pref = 1;
}

class anotherClass {
    #my_pref = 1;
}

onlyDeclarations

对于此规则,使用 "^[a-z]+([A-Z][a-z]+)*$", { "onlyDeclarations": true } 选项的正确代码示例

在 Playground 中打开
/*eslint id-match: [2, "^[a-z]+([A-Z][a-z]+)*$", { "onlyDeclarations": true }]*/

foo = __dirname;

ignoreDestructuring: false

对于此规则,使用默认的 "^[^_]+$", { "ignoreDestructuring": false } 选项的错误代码示例

在 Playground 中打开
/*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": false }]*/

const { category_id } = query;

const { categoryid_Default = 1 } = query;

const { category_ids: category_ids } = query;

const { category_id: category_Alias } = query;

const { category_id: category_IdRenamed, ...other_Props } = query;

ignoreDestructuring: true

对于此规则,使用 "^[^_]+$", { "ignoreDestructuring": true } 选项的错误代码示例

在 Playground 中打开
/*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": true }]*/

const { category_id: category_alias } = query;

const { category_id: category_Id, ...other_props } = query;

对于此规则,使用 "^[^_]+$", { "ignoreDestructuring": true } 选项的正确代码示例

在 Playground 中打开
/*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": true }]*/

const { category_id } = query;

const { category_Id = 1 } = query;

const { category_alias: category_alias } = query;

何时不使用

如果您不想对所有标识符强制执行任何特定的命名约定,或者您的命名约定过于复杂而无法通过配置此规则来强制执行,则您不应启用此规则。

版本

此规则在 ESLint v1.0.0 中引入。

资源

更改语言