【问题标题】:Can I create an ESLint rule that will allow all globals matching a regular expression?我可以创建一个允许所有全局变量匹配正则表达式的 ESLint 规则吗?
【发布时间】:2017-02-05 14:18:24
【问题描述】:

我正在寻找no-undef 规则的例外,它允许未声明的全局变量与命名规则匹配。在这种情况下,应该允许使用像 [A-Z][a-z]*Model 这样的正则表达式,因此“CustomerModel”和“PatientModel”都将被允许,因为在每个单元中放置 /* global CustomerModel */ 太麻烦,而列出每个 @987654324 也太麻烦@global 即使在 eslint 全局配置中。

我想要这样的规则:

"rules": {
        "no-undef": [2, "[A-Z][a-z]*Model"],

上面的语法是我发明的,我希望显然意味着“只有在上面的 reg-expression 名称不匹配时才抱怨。”

如果有办法在 .eslintrc 文件全局列表中指定正则表达式匹配。

【问题讨论】:

  • 如果您使用JavaScript config file/[A-Z][a-z]*Model/ 正则表达式语法是否有效?
  • 所以基本上重命名我的 .eslintrc ?
  • 这就是我会尝试的。一些(大多数?)工具只是使用require 加载它们的配置,因此您通常可以使用 JS 文件而不是 JSON。如果您从 Rails 执行 env == PROD 操作,返回不同的配置非常好,但显然也允许真正的 RegExps。这只是消费工具是否会识别和使用它们的问题。
  • eslintrc.js 像这样,不起作用:module.exports = { "extends": "eslint:recommended", "env": { "browser": true }, "globals": { /[AZ][az]*Model/: true, ...

标签: javascript eslint


【解决方案1】:

好吧,如果您愿意,您可以创建自己的规则。

no-undef rule 的来源很短。可能你需要替换那里定义的条件

if (!considerTypeOf && hasTypeOfOperator(identifier)) {
    return;
}

类似的东西

if (/Model$/.test(identifier.name) || !considerTypeOf && hasTypeOfOperator(identifier)) {
    return;
}

确保以Model 结尾的全局标识符不会触发错误。

您可能还想参数化标识符格式,而不是在源代码中硬编码。 由于您是一位经验丰富的程序员,您肯定能够自己弄清楚这种方法的细节和注意事项。

这可能是工作中最简单的部分。仍然需要一些机器才能使您的自定义规则起作用。更多关于如何创建自定义规则的信息可以在这里找到:http://eslint.org/docs/developer-guide/working-with-rules

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2020-04-29
    • 2015-12-26
    • 2021-04-25
    • 2010-11-13
    • 2013-06-30
    • 2015-07-06
    相关资源
    最近更新 更多