Tslint: 开始弃用 no-unused-variable 规则

创建于 2016-08-13  ·  30评论  ·  资料来源: palantir/tslint

我刚刚注意到 v2.0 中的这些新编译器检查: --noUnusedParameters--noUnusedLocals 。 这些基本上使no-unused-variable规则过时了。 由于这是一个非常核心的规则,我认为我们不应该立即删除它。

提议:

  • 在 v4.0 中从tslint:latesttslint:recommended中删除no-unused-variable
  • 在 v4.0 中将规则标记为已弃用

    • 也许在失败消息中?

  • 在 TSLint v5.0 中完全删除规则实现
Won't Fix Breaking Change

最有用的评论

一个小反馈。 当您收到 linter 警告时,在 tslint 中使用这些规则非常方便,但您的代码仍然可以编译。 我个人认为,由于未使用的变量、参数或导入导致编译器失败非常烦人,尤其是在执行快速代码更改(如重构或尝试一个想法)时。

所有30条评论

这里的一个很好的特性是编译器提供了一个选择退出:给变量名一个前导下划线,编译器不会标记它。 这应该使那些想要启用编译器检查但可能有一两个他们不想更改的边缘情况的人更容易。

@JKillian这仅适用于参数,对吗?

@glen-84 - 很好,我认为你是对的。

@adidahiya只是要注意--noUnusedLocalsno-unused-variable的操作方式完全不同。

--noUnusedLocals似乎也检查类属性(在 TS 版本 2.0.2 中)。

@charsleysa是的,实现方式略有不同。 我认为编译器选项比 TSLint 规则更好,这就是我想要支持它的原因。 如原始问题帖子中所述,我们将从 TSLint 核心中缓慢删除它。

我认为您应该在版本 4 中删除它。应该有许多预览版本,所有开发人员都应该看到弃用警告。 无论如何,您已经删除了其他有利于编译器选项的规则。

PD:在 dev-1 版本中,我认为这是推荐的设置。

作为一些反馈,我今晚遇到了这个问题,即使在找到这个问题之后,我也花了一点时间才明白--noUnusedLocals--noUnusedParameters是 tsc 配置而不是 tslint。 在错误消息中澄清这一点可能很有用。

@ryanguill感谢您的反馈。 我提交了一项更改以澄清消息

一个小反馈。 当您收到 linter 警告时,在 tslint 中使用这些规则非常方便,但您的代码仍然可以编译。 我个人认为,由于未使用的变量、参数或导入导致编译器失败非常烦人,尤其是在执行快速代码更改(如重构或尝试一个想法)时。

我认为编译器以更好的方式处理这个问题,我支持你,因为它不应该完全编译,但是如果你使用 webpack 之类的东西,例如,错误将会被抛出,但编译不会停止。

@zubivan

同意。 我更喜欢将此警告保留在 lint 阶段。 我的工作流程是:

any file/code changes => run ts-compile => run tests => run ts-lint

我可以快速更改任何脏代码并先测试结果,然后履行 tslint 的保护。 在任何测试之前强迫你编写干净的代码真的很烦人。

@michaeljota

虽然我更喜欢在测试后显示警告,但有没有 webpack 示例可以实现目标?

我想知道 TSLint 是否可以只运行编译器,并将其警告解析并输出为 TSLint 警告? 他将使 TSLint 不必维护规则的实现,但让用户仍然能够使用有用的禁用/忽略 TSLint 注释以及其他优点。

@xareelee在我的个人资料中,您可以看到带有 TS 编译的 Angular 2 设置而不会抛出。

我不明白为什么这些是编译器的一部分。 它们纯粹是风格,不会影响代码的正确性,因此它们作为 linter 选项看起来更自然。 我也希望能够在某些情况下覆盖这些警告,我可以使用 tslint 但不能使用 tsc。

为什么这些现在是编译器的一部分,这里不讨论。 由于已经暴露的原因,我认为他们不会阅读此规则。

对于寻找解决方案的其他人,因为他们不想使用编译器选项,因为它们会阻止快速本地开发(注释掉一些代码等会导致编译失败),您可以执行类似的操作这:

const Rule = require('tslint/lib/rules/noUnusedVariableRule').Rule;

// Hide deprecation message
Rule.metadata.deprecationMessage = '';
Rule.metadata.ruleName = 'no-unused-variable-wrapped';

module.exports.Rule = Rule;

在您自己的规则noUnusedVariableWrapped.js文件中,然后通过"no-unused-variable-wrapped": true启用它。

我想指出,根据编译器规则而不是 tslint 规则,丢失的一件事是自动修复和删除未使用的导入/变量的能力。

看起来人们对保留这条规则很感兴趣。 我继续合并#2256,它取消了该规则。 内置配置中仍然不会鼓励它,但它会在选择加入的基础上提供。

好像如果你的 tsconfig 有"jsx": "react"那么 tslint 应该会因为缺少反应导入而抛出错误。

@ccorcos “缺少导入”是与“没有未使用的变量”完全不同的错误。 tsc应该可以帮助你。

听起来不错。 我只是在 VSCode 中没有看到这个错误......:/

@adidahiya

感谢您收回这条规则。 问题是,什么时候发布? 正如我所见,它尚未包含在 5.1.0 中。

@javier-tarazaga 它在 v5 中就在那里,就像它一直以来一样。 虽然它没有在tslint:recommended配置中启用。

@adidahiya

嗯很奇怪。 当我在 tslint 5.1.0 版本中包含规则时,我收到以下错误,

Could not find implementations for the following rules specified in the configuration:
    no-unused-vars
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

那是因为你使用了错误的文件名。 它不是未使用的变量,不是
没有未使用的变量

上午 02.05.2017 09:33 schrieb "Javier Tarazaga" [email protected]

@adidahiya https://github.com/adidahiya

嗯很奇怪。 当我在 tslint 5.1.0 版本中包含规则时,我得到
跟随错误,

找不到配置中指定的以下规则的实现:
没有未使用的变量
尝试升级 TSLint 和/或确保您已安装所有必要的自定义规则。
如果最近升级了 TSLint,您可能配置了需要清理的旧规则。


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/palantir/tslint/issues/1481#issuecomment-298527837
或使线程静音
https://github.com/notifications/unsubscribe-auth/ALaeKKYydi8vQ8MAhxOwBk3uL02jgzKNks5r1txLgaJpZM4JjuQh
.

感谢您的提醒! 现在我面临#2650,所以我无法真正验证它。

我安装了https://github.com/blakeembrey/tslint-config-standard
无论如何要摆脱这些警告,我不确定是否与标准或只是 tslint 有关

> [email protected] lint /Users/nikos/WebstormProjects/common
> tslint 'src/**/*.ts' 'test/**/*.ts'

Warning: The 'await-promise' rule requires type information.
Warning: The 'no-unused-variable' rule requires type information.
Warning: The 'no-use-before-declare' rule requires type information.
Warning: The 'return-undefined' rule requires type information.
Warning: The 'no-floating-promises' rule requires type information.
Warning: The 'no-unnecessary-qualifier' rule requires type information.
Warning: The 'no-unnecessary-type-assertion' rule requires type information.
Warning: The 'strict-type-predicates' rule requires type information.

@QuantumInformation您是否尝试过使用--project

是的,这行得通

🤖哔哔! 👉 TSLint 已弃用👈,你应该切换到typescript-eslint ! 🤖

🔒 此问题已被锁定,以防止进一步不必要的讨论。 谢谢! 👋

此页面是否有帮助?
0 / 5 - 0 等级