如何让 Eslint 只更改代码行

问题描述 投票:0回答:4

我需要一种方法来仅在分支上已更改的代码行或块上运行 ESLint。我们的想法是,我们有一个庞大的旧代码库,并且我们希望至少向前执行 ESLint 规则。 我在 CI 中实现了它,对 PR 中更改的所有文件进行了检查。但是人们正在接触文件中的一行,突然他们必须修复 77 个 ESLint 错误。

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

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

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

需要澄清的是,我理解这个“要求”严格适用于像我这样的边缘情况,在这种情况下,整个文件更改的负担太大了。这不是最佳的。这是次优的,但如果我不这样做,我就什么也得不到,所以我必须选择我的战斗。

git github continuous-integration eslint
4个回答
9
投票

这个插件只允许您比较您已经上演的任何内容,并且我们在预提交中运行它。我们在 package.json 中的常规“lint”脚本不使用该插件,因此它仍然显示所有错误/警告。

这里有一个链接:

https://www.npmjs.com/package/eslint-plugin-diff


3
投票
Review Dog

这样的工具。它将根据仅作为差异一部分的 linter 结果添加对您的 PR/MR 的审核反馈:

reviewdog 提供了一种通过轻松与任何 linter 工具集成来自动将评论评论发布到代码托管服务(例如 GitHub)的方法。它使用 lint 工具的输出,如果发现的结果与要审查的补丁不同,则将其作为评论发布。

顺便说一句,这篇
文章

帮助我解决了这个问题,并为您的用例提出了替代解决方案(如果您感兴趣)。 干杯


3
投票

AIM

:在提交之前仅检查已更改的行,而不是检查暂存文件。 为了实现这一点,我们应该使用

Husky

(预提交钩子)、lint-staged 和一个名为 eslint-plugin-diff; 的特殊依赖项 这里的流程是:当你准备提交时,husky 将被触发,这将触发 lint-staged,它负责提取所有暂存的文件并在文件上运行 eslint。

我们必须配置 eslint 才能使其仅对提交中已更改的行进行 lint 检测。

执行此操作的步骤如下:

i)按照正常方式配置 husky 和 lint-staged

ii)您将拥有 .eslintrc 文件,您必须创建另一个文件“.eslint.husky.js”(在根目录中)

iii) 将

.eslintrc

中的所有代码复制到

.eslint.husky.js
文件
iv) 在 

.eslint.husky.js

文件中,在 extends 部分添加

"plugin:diff/diff"
(必须添加依赖项:eslint-plugin-diff) 参考:
https://www.npmjs.com/package/eslint-plugin-diff
v)这是您要做的主要步骤,配置 lint-staged 后,您将拥有

.lintstagedrc

文件。在该文件中,您必须配置应使用

.eslint.husky.js
中的配置进行 linting 的文件 该文件应该看起来像
{
  "**/*.{js,jsx,scss,}": ["eslint --config .eslintrc.husky.js"]
}

现在一切就绪,您可以提交并检查结果。
你可以问“为什么我要创建一个新文件并将“plugin:diff/diff”添加到扩展部分,我可以直接在
.eslintrc

文件中执行该操作”。

是的,你可以这样做,但所有的 linter 都被禁用,编辑器上不会出现错误,但它会在提交期间显示错误...仅此而已,希望有帮助🐇


0
投票
https://github.com/hallettj/git-format-staged

来源:

https://prettier.io/docs/en/precommit

仍然感谢 @patrick-eriksson 所做的所有艰苦的 eslint-plugin-diff 工作。

© www.soinside.com 2019 - 2024. All rights reserved.