为什么要对调用者应用 eslint 规则? (新上限)
Why is an eslint rule applied against the caller? (new-cap)
我用 google 风格设置了 eslint,发现下面的代码被标记为 new-cap
:
import {Deserialize} from 'cerialize';
//...
const someVar = Deserialize(someJson, someType);
好吧,这个想法是有道理的,eslint 希望它是驼峰式的。但那是第三方代码,我真的没有很好的解决办法。
- 我不想全局禁用新上限规则,因为我愿意在我的代码中强制执行该规则。
- 我不想
// eslint-disable-next-line
每次调用那个函数,因为感觉很蠢。
- 也不会因为同样的原因为每个导入添加别名:
import {Deserialize as deserializeFunc} from 'cerialize';
根本问题是,为什么要针对调用者检查规则?我的代码似乎并没有受到指责,它是来自另一个库的被调用者,他没有遵循该命名规则。当然,这甚至不是他们的责任,因为该库的作者可能正在使用其他编码风格。
eslint 是为了强制我禁止不具有相同样式的库吗?还是我遗漏了任何修复或 options?
它旨在让您修复 您的 代码(如果您碰巧控制了导出)。 linter 不够智能,无法确定您是否这样做,因此如果可以的话,它会提示您修复它。
在这种情况下,您不控制该库,因此您应该 add an exception 用于 Deserialize
(以及任何其他具有奇怪大写名称的此类导入)。
"new-cap": ["error", { "capIsNewExceptions": ["Deserialize"] }]
This rule is basically copied from JSHint for compatibility with existing style guides. This came back from before ESM, so there was no way to tell if something was library code or not.
(https://github.com/eslint/eslint/discussions/15722#discussioncomment-2434062)
事实证明,这不是预期的设计,而是 pre-ESM linter 规则的限制。
我用 google 风格设置了 eslint,发现下面的代码被标记为 new-cap
:
import {Deserialize} from 'cerialize';
//...
const someVar = Deserialize(someJson, someType);
好吧,这个想法是有道理的,eslint 希望它是驼峰式的。但那是第三方代码,我真的没有很好的解决办法。
- 我不想全局禁用新上限规则,因为我愿意在我的代码中强制执行该规则。
- 我不想
// eslint-disable-next-line
每次调用那个函数,因为感觉很蠢。 - 也不会因为同样的原因为每个导入添加别名:
import {Deserialize as deserializeFunc} from 'cerialize';
根本问题是,为什么要针对调用者检查规则?我的代码似乎并没有受到指责,它是来自另一个库的被调用者,他没有遵循该命名规则。当然,这甚至不是他们的责任,因为该库的作者可能正在使用其他编码风格。
eslint 是为了强制我禁止不具有相同样式的库吗?还是我遗漏了任何修复或 options?
它旨在让您修复 您的 代码(如果您碰巧控制了导出)。 linter 不够智能,无法确定您是否这样做,因此如果可以的话,它会提示您修复它。
在这种情况下,您不控制该库,因此您应该 add an exception 用于 Deserialize
(以及任何其他具有奇怪大写名称的此类导入)。
"new-cap": ["error", { "capIsNewExceptions": ["Deserialize"] }]
This rule is basically copied from JSHint for compatibility with existing style guides. This came back from before ESM, so there was no way to tell if something was library code or not.
(https://github.com/eslint/eslint/discussions/15722#discussioncomment-2434062)
事实证明,这不是预期的设计,而是 pre-ESM linter 规则的限制。