Tslint: no-unused-variable TypeError:nullのプロパティ「1」を読み取れません

作成日 2018年05月17日  ·  14コメント  ·  ソース: palantir/tslint

バグレポート

  • __TSLintバージョン__:5.10.0
  • __TypeScriptバージョン__:2.8.1
  • __TSLintの実行__:CLI

リンティングされているTypeScriptコード

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オプションが指定されていない場合、変数名をチェックしようとしないため、このルールは正しく機能します。

Fixed Bug

最も参考になるコメント

定義noUnusedLocalsnoUnusedParameterscompilerOptions tslintのと全く同じではありませんno-unused-variable 。 現在のところ、未使用の変数はビルドをクラッシュさせるか、気付かれずに残り、警告モードはもうありません😞

全てのコメント14件

@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が正式なソリューションになりました。

定義noUnusedLocalsnoUnusedParameterscompilerOptions tslintのと全く同じではありませんno-unused-variable 。 現在のところ、未使用の変数はビルドをクラッシュさせるか、気付かれずに残り、警告モードはもうありません😞

@ giladgray@ killtheliterateは書いた:

上記をtsconfigで使用すると、un-unused-variablelintルールを無効にできます。

@kachkaevが書いたように、私はこのルールを無効にしたくありません

定義noUnusedLocalsnoUnusedParameterscompilerOptions 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で議論を続ける

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

DanielKucal picture DanielKucal  ·  3コメント

denkomanceski picture denkomanceski  ·  3コメント

rajinder-yadav picture rajinder-yadav  ·  3コメント

zewa666 picture zewa666  ·  3コメント

avanderhoorn picture avanderhoorn  ·  3コメント