【问题标题】:Is it safe to apply autofix from ESLint?从 ESLint 应用自动修复是否安全?
【发布时间】:2018-10-21 16:57:21
【问题描述】:

我想格式化几个文件,但我担心破坏代码

当我说是否安全时,我是说之前和之后的代码执行完全相同。

例如,有些规则看起来很安全,可以应用(例如缩进)。我想改变空格的数量不会影响代码的执行。

然后,有些规则看起来并不那么安全。例如,将 var 更改为 let 或 const 可能会导致不同的执行,因为 var 与 let 并不完全相同。

所以,我想知道 ESLint 是否有任何自动修复规则可以更改代码,因此在应用 --fix 事物时执行会有所不同。

【问题讨论】:

  • @num8er 我用更多细节扩展了这个问题。我应该添加其他内容吗?
  • 我已撤回关闭和否决票,现在可以了。关于自动修复:我经常使用它,并且在我的 package.json 中有这样的脚本可以让我的生活更轻松:joxi.ru/L2133QH8K691rX
  • 鼓励各个插件的作者只进行安全且不破坏代码的更改。但可能有插件明确不这样做。您可以查看问题eqeqeq: Don't autofix #4578 以查看有关=== 的讨论。

标签: javascript eslint


【解决方案1】:

是的,它是安全的,因为 --fix 标志并不能解决您的所有 JS 问题 [1]。 所以你必须自己修复一些 eslint 警告/错误。

[1]https://eslint.org/docs/user-guide/command-line-interface#--fix

【讨论】:

    【解决方案2】:

    大多数情况下是的,但我最近在使用自动修复选项时遇到了一个问题。我使用的代码库使用 Mithril v.0.2,它使用 new 关键字初始化组件的控制器。 new 关键字仅适用于构造函数,但 eslint --fix 命令(特别是 prefer-arrow-callback 用箭头函数替换了我的一些匿名函数。这导致了一些错误,因为箭头函数不是构造函数。

    所以我的情况是这样的:

    const component = {};
    // My method in this object used to be a regular function like the one below
    component.normalFunction = function () {
        return {
            test: true
        };
    }
    
    // Eslint autofix changed it to be an arrow function
    component.arrowFunction = () => {
        return {
            test: true
        };
    }
    
    try {
      new component.normalFunction();
      new component.arrowFunction();
    } catch (err) {
      document.body.prepend(err);
    }

    到目前为止,这是我在自动修复规则中发现的唯一问题。就我而言,我运行 eslint autofix 排除了该规则。

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2019-03-01
      • 2017-01-26
      相关资源
      最近更新 更多