如何为ForOfStatement关闭ESLint的无限制语法规则?

Mik*_*lor 23 ecmascript-6 eslint for-of-loop

我使用ESLint作为我的ES6程序,使用AirBNB规则集.由于充分和充分的原因,我for...of在我的代码中使用构造,但ESLint对它反对,发出no-restricted-syntax错误.

http://eslint.org/docs/rules/no-restricted-syntax上的文档解释了我如何在我的.eslint文件中指定它所反对的语法树节点集:例如,如果我不喜欢的是with语句, 我可以用:

"无限制语法":["警告","WithStatement"]

但是我不想指定一整套未经批准的结构,我只想说我认为这样的结构可以.在概念上类似的东西

ESlint.rules [ '没有限制的语法'] removeEntry( 'ForOfStatement');

有没有办法在ESLint文件中执行此操作?或者,如果失败了,至少有一种方法可以让它告诉我它当前的no-restricted-syntax配置是什么,所以我可以从中手动删除ForOfStatement吗?

btm*_*lls 30

检查现有配置

基于当前主分支,eslint-config-airbnb当前禁用四种语法形式:

  1. ForInStatement
  2. ForOfStatement
  3. LabeledStatement
  4. WithStatement

您可以使用ESLint的--print-configCLI标志验证这一点或查看是否存在任何差异:

$ eslint --print-config file.js
Run Code Online (Sandbox Code Playgroud)

ESLint将打印出用于lint file.js的配置,您可以在no-restricted-syntax那里找到规则的配置.

覆盖 no-restricted-syntax

如果您想覆盖Airbnb的预设,您可以在文件rules部分中执行此.eslintrc.json操作:

{
    "rules": {
        "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"]
    }
}
Run Code Online (Sandbox Code Playgroud)

no-restricted-syntax除了单一语法形式之外,没有办法将规则配置为使用继承自Airbnb预设的配置.

  • 如何启用“ForInStatement”和“ForOfStatement”? (3认同)
  • 谢谢,btmills。我缺少的一个难题是“--print-config”,它至少允许我手工制作一个“.eslint”规则配置,对我继承的内容进行最小的更改。 (2认同)
  • 遗憾的是没有办法让`.eslintrc` 修改和现有的规则配置而不是替换它;但既然事情就是这样,你的回答告诉我所有需要知道的。一找到合适的按钮我就接受! (2认同)

Ale*_*nov 1

可以,但前提是您使用 JS 配置文件。

在旧的配置系统(.eslintrc.js)中:

const styleConfig = require('eslint-config-airbnb-base/rules/style');
const [_severity, ...restrictedSyntax] = styleConfig.rules['no-restricted-syntax'];
Run Code Online (Sandbox Code Playgroud)

新的平面配置( eslint.config.js) 中:

const compat = new FlatCompat({
  baseDirectory: __dirname,
  recommendedConfig: js.configs.recommended,
});

const airbnb = compat.extends('airbnb');
const [_severity, ...restrictedSyntax] = airbnb.find(c => c.rules?.['no-restricted-syntax']);
Run Code Online (Sandbox Code Playgroud)

然后restrictedSyntax根据需要操纵变量。