【问题标题】:How can I Eslint only changed lines of code我如何 Eslint 只更改代码行
【发布时间】:2020-09-16 08:22:16
【问题描述】:

我需要一种方法来仅在分支上已更改的代码行或块上运行 ESLint。我们的想法是,我们有一个庞大的旧代码库,我们希望至少继续执行 ESLint 规则。

我在 CI 中实现了它,对 PR 中更改的所有文件进行 linting。但是人们正在触摸文件中的一行,突然间他们必须修复 77 个 ESLint 错误。

就我个人而言,我一点也不担心他们,但他们比我更大更强壮,我想我需要在这里迈出一些小步。

这样我就可以获得针对特定分支更改的所有文件的列表。而且我怀疑我可以做一个 diff 并解析它并提取所有更改的行号,然后运行 ​​ESLint 并按行号过滤结果,但这听起来像一个巨大的痛苦。

我的问题是没有更好的实际方法来做到这一点吗?我不是第一个需要这个的人。

为了清楚起见,我明白这个“要求”严格适用于像我这样的边缘情况,其中整个文件更改的负担太大了。这不是最佳的。这是次优的,但如果我不这样做,我什么也得不到,所以我必须选择我的战斗。

【问题讨论】:

  • 但如果你只是查看差异,你仍然会错过问题。假设您有let x = 42;,然后是foo(x)。一次提交会删除函数调用。现在您有一个未使用的变量x,但扫描更改的行并没有发现这一点。您也可以遇到相反的问题,提交添加了bar(y)。但是y 从未定义过。仅通过扫描更改无法找到此问题。
  • 我喜欢,反对的理由越多越好。我的计划是只使用行级别的东西,比如 react/no-spread-props 这可能会导致你随着越来越深入而不得不更改许多文件(更多证据表明这是一条重要规则)。这样人们会停止这样做,但如果他们用一个文件更改文件,他们不会完全搞砸。

标签: git github continuous-integration eslint


【解决方案1】:

我为这个确切的用例编写了一个 ESLint 插件。我们有一个现有的配置,想要对配置进行大修,但不想一次性修复所有错误(以前被定义为非错误),因为这将是一个糟糕的 RIO .

这个插件允许你只区分你已经上演的任何东西,我们在预提交中运行它。我们在 package.json 中的常规“lint”脚本不使用插件,所以它仍然在那里显示所有错误/警告。

这是一个链接:https://www.npmjs.com/package/eslint-plugin-diff

【讨论】:

  • 哇!非常感谢帕特里克。我希望更漂亮的 --write 也有类似的东西。
  • 嗨帕特里克,我安装了你的插件,但我注意到它似乎没有与我在 VSCode 中的差异运行。我的 .eslintrc 中有这个:``` "extends": [ "plugin:diff/diff", "eslint:recommended" ], ``` 当我删除 "plugin:diff/diff" 时,我的 ESLint 运行针对包括我的差异在内的所有内容,但是当我添加“插件:差异/差异”时,它不会针对任何内容运行。你知道为什么会这样吗?
【解决方案2】:

我认为您可以使用Review Dog 之类的工具。它将根据仅作为差异一部分的 linter 结果添加对您的 PR/MR 的评论反馈:

reviewdog 提供了一种将评论 cmets 发布到代码托管服务(例如 GitHub)的方法,该方法可以轻松地与任何 linter 工具集成。它使用 lint 工具的输出并将它们作为评论发布,如果发现与要审查的补丁不同。

顺便说一句,这个article 帮助我解决了这个问题,如果您有兴趣,可以为您的用例提出替代解决方案。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2018-10-07
    • 2016-08-03
    • 2011-07-21
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多