import { A, B, C } from './file';
console.log('No imports used');
export const D = 4;
tslint.json
構成の場合:
{
"rules": {
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
}
}
The 'no-unused-variable' rule threw an error in '/Users/andrew.mitchell/Documents/Projects/test/test.ts':
TypeError: Cannot read property '1' of null
at walk (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:105:54)
at Rule.AbstractRule.applyWithFunction (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/language/rule/abstractRule.js:39:9)
at Rule.applyWithProgram (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:32:21)
at Linter.applyRule (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:194:29)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:85
at Object.flatMap (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/utils.js:151:29)
at Linter.getAllFailures (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:32)
at Linter.lint (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:99:33)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/runner.js:209:32
at step (/Users/andrew.mitchell/Documents/test/node_modules/tslint/node_modules/tslib/tslib.js:133:27)
ルールは、1行目でAll imports in import declaration are unused.
を警告する必要があります。
これは、 noUnusedVariableRule.ts#L123が原因です。これは、 failure
メッセージがAll imports in import declaration are unused.
であり、正規表現が検索するための変数名が含まれていないためです。
ignore-pattern
オプションが指定されていない場合、変数名をチェックしようとしないため、このルールは正しく機能します。
@hotforfeatureを見つけてください。 この問題を悪化させるだけのTS2.9で予定されているいくつかの変更に関連しているため、 https://github.com/palantir/tslint/pull/3919でこれに対処し始めました。
私のPRは例外がスローされるのを防ぎますが、あなたが言及した場合、それは単にignorePattern
を無視します。 インポートの自動修正に対して今行っているような複雑なコードを追加する必要があると思います:/
このルールを廃止することについて考えるべきかどうか疑問に思います。 tscは、警告を無視する方法を提供し、IDEを介した警告の自動修正のサポートを提供します。
私が見る限り、このルールの主な利点はignore-pattern
ですが、tsc診断に依存するようにルールが記述されている方法でそれを正しく実装することは困難です。 TSLintは、特定のファイルのルールを無効にすることに関して、tscよりも少し柔軟性があります。 @suchanleeこれについて何か考えはありますか? 最近このルールを修正したことを知っています
このルールの私の主な使用例は、リンティング時にgitフックでコミットする際の問題を自動修正することです。 したがって、tscがIDE統合を介して何かを提供している場合でも、ここには大きな価値があると思います。
@JKillian TSLintがTypescriptの複数のバージョンをサポートし、Typescriptの動作が継続的に変更されているため、ルールのサポートにかかる費用がますます高くなっていると思います。 Typescriptはこの機能をサポートしているので、それを使用することに傾倒する必要があります。 しかし、以前のバージョンのTSはそれをサポートしていないので、削除する必要があるとは思いません。 ただし、ルールの廃止について考え始め、TSの人々と協力して、TSを使用した現在のTSLintワークフローをより適切にサポートする必要があると思います。
@suchanleeの提案を2番目にします。 このルールは多くの問題で出てくるようです。 最近のTSバージョンが問題について適切に警告していることを考えると多すぎます。 段階的に廃止しましょう!
@ hotforfeature-ユースケースを認め、それが合理的であると判断します。 ただし、ルールが複雑なため、非推奨にする予定です(#3919を参照)。
いつものように、誰でもルールのソースコードをコピーして外部パッケージに移動し、そのように使用/改善し続けることができます。
それが価値があるもののために:
{
"compilerOptions": {
"noUnusedLocals": true,
"noUnusedParameters": true,
}
}
上記をtsconfig
使用すると、 no-unused-variable
lintルールを無効にできます。
no-unused-variable
は非推奨になり、上記のcompilerOptions
が正式なソリューションになりました。
定義noUnusedLocals
とnoUnusedParameters
でcompilerOptions
tslintのと全く同じではありませんno-unused-variable
。 現在のところ、未使用の変数はビルドをクラッシュさせるか、気付かれずに残り、警告モードはもうありません😞
@ giladgray 、 @ killtheliterateは書いた:
上記をtsconfigで使用すると、un-unused-variablelintルールを無効にできます。
@kachkaevが書いたように、私はこのルールを無効にしたくありません
定義
noUnusedLocals
とnoUnusedParameters
でcompilerOptions
tslintのと全く同じではありませんno-unused-variable
私のユースケースは生成されたコードです。 手動で記述したコードにこのルールを適用したいのですが、コードジェネレーターが非常に複雑になるのを避けるために、生成されたコード(または少なくとも生成されたコードの一部のセクション)でこのルールを無効にしたいのです。 TypeScriptコンパイラオプションを使用して実行しないでください😞
少なくとも、この非推奨はTSLint Webサイトに文書化する必要がありますが
この非推奨はばかげています。 コンパイラフラグはひどい置き換えです。 彼らはビルドを壊し、自分自身を修正しません。 人々を指し示すための合理的な解決策はどのようになっていますか? ignore-pattern
オプションが難しすぎて今すぐ機能しない場合は、代わりに非推奨にします。
👋皆さん-これをhttps://github.com/palantir/tslint/issues/4232にリンクするだけno-unused-variable
十分な代替品ではないことはよく理解され、同意されています。 ルールの元の実装は他のTSツールとうまく機能せず、無効にする必要がありました。 #4232は、それを再び有効にする方法を見つけることを追跡します。
それまでの間、組み込みのチェックを使用するための個別のツールとしてtsc --noEmit --noUnusedLocals --noUnusedParameters
ようなものを使用できます。 はい、それは構成可能なno-unused-variables
ほど良くありません。
#4100&#4232で議論を続ける
最も参考になるコメント
定義
noUnusedLocals
とnoUnusedParameters
でcompilerOptions
tslintのと全く同じではありませんno-unused-variable
。 現在のところ、未使用の変数はビルドをクラッシュさせるか、気付かれずに残り、警告モードはもうありません😞