是否存在可禁止代码中特定文本字符串的ESLint规则?
问题解答
ESLint 没有提供专门用于「禁止包含指定文本的字符串」的独立命名规则,但可以直接通过内置的通用语法校验规则no-restricted-syntax零插件实现这个需求,完全可以达到禁止任意字符串包含foo这类内容的校验效果。
实现配置
你只需要在ESLint配置文件中添加如下规则,即可覆盖普通单/双引号字符串、模板字符串两类场景的校验:
{ "rules": { "no-restricted-syntax": [ "error", // 匹配普通单/双引号字符串 { "selector": "Literal[value=/foo/]", "message": "代码中的字符串不允许包含「foo」内容" }, // 匹配 ` 包裹的模板字符串 { "selector": "TemplateLiteral[quasis.element.value.raw=/foo/]", "message": "代码中的模板字符串不允许包含「foo」内容" } ] } }
配置说明
- 上述配置中的
/foo/是匹配目标文本的正则,你可以根据需求替换成任意正则规则:比如要同时禁止包含foo和bar的字符串,可以改成/foo|bar/;如果需要精确匹配完全等于foo的字符串,加上首尾锚点改成/^foo$/即可,此时不会误报foobar这类仅包含子串的内容。 - 如果你需要更细粒度的控制,比如排除作为对象key的字符串、只校验特定作用域下的字符串,只需要调整AST选择器的匹配条件即可,
no-restricted-syntax支持全量AST节点属性的匹配,灵活度足够覆盖绝大多数自定义校验场景。 - 配置里的
message字段可以自定义成你需要的报错提示内容,命中规则时会直接展示给开发者。
内容的提问来源于stack exchange,提问作者Stewart
相关产品推荐
相关产品推荐

