Tslint: 機能リクエスト:特定のルールのファイルを除外することを許可する

作成日 2016年03月25日  ·  14コメント  ·  ソース: palantir/tslint

問題

生成される1つのファイルを除いて、プロジェクト内のすべてのTypeScriptファイルに「クラス名」ルールを使用したいと思います。

現在のルールオプション設定フォーマット

ドキュメントに基づく

Rule-optionsは、ルールが使用されているかどうかを示すブール値のtrue / false値、またはブール値が非リストの場合と同じように提供されるリスト[boolean、...]のいずれかであり、リストの残りの部分は次のとおりです。何をチェックするかを決定するルールのオプション

したがって、基本的にルールを有効にしたい場合は、ここに示すように、ルールオプションの形式に関して2つのオプションしかありません。

{
    "rules": {
        "class-name": true,
        "some-otherrule": [ true, arg1, arg2, arg3],
        ...
    }
}

そのため、現在の形式では、一部のファイルに対して特定のルールを有効/無効にすることができません。 1つのファイルをエラーのチェックから除外したい場合は、すべてのルールでそのファイルを除外する必要があります。

追加のルールオプション構成フォーマットの提案

一部のファイルを除外できるようにするには、高度な形式

list [boolean、...]ここで、booleanは非リストの場合と同じように提供します
"some-otherrule": [ true, arg1, arg2, arg3],

含まれる/除外されるファイルを定義する最初の引数がブール値(現在のように)または配列(またはオブジェクトが配列と比較してより明確になる可能性がありますか?)のいずれかになるように拡張できます。

私は次の構文を念頭に置いています:
"some-otherrule": [ [includeGlobPattern, excludeGlobPattern], arg1, arg2, arg3],
例えば
"some-otherrule": [ ["**/*", "**/generated.ts"], arg1, arg2, arg3],
または、配列の代わりにオブジェクトを使用する場合は、follwogin構文がさらに簡単になります。
"some-otherrule": [ {exclude: "**/generated.ts"}, arg1, arg2, arg3],
ここで、includeプロパティはデフォルトですべてのファイルになります。

API Feature Request

最も参考になるコメント

@Chowarmaanと同様のユースケースがあります。

私はテストがファイルを持っている*.test.ts私はdevの依存関係を使用した、例えばenzyme
tslint.jsonで、 no-implicit-dependenciesルールを有効にしましたが、 *.test.tsに対してのみこのルールを無効にします。 これらのテストファイルはすべて同じフォルダーにあるわけではないので、今は次のように配置する必要があります。

/* tslint:disable:no-implicit-dependencies */

迷惑な各テストファイルの最初に

全てのコメント14件

単純に使用してみませんか:

/* tslint:disable:class-name */
// your generated file here

これは機能しませんか?

それは確かにそれを機能させるために使用できますが、TypeScriptジェネレーターの変更を避けるために(または生成されたファイルの前にtslintヒントを付けることで、生成プロセスを複雑にするために)この機能リクエストを提出しました。
ワイルドカードを使用すると、各ファイルからではなく、tslint configから特定のタイプのソース(main / unitTests / e2eTests)にのみ特定のルールを宣言的に適用することも有益です。

どう思いますか?

ファイルにコメントを入れたくない場合は、リンティングのためにファイルをtslintに渡さないでください。

(部分的な)ファイルの除外を実現する手段が少なくとも2つある場合、他の場所にオプションを追加するには重すぎると感じます

ファイルにコメントを入れたくない場合は、単にファイルをtslintに渡してリンティングしないでください。

それはまさに私がしたことですが、今ではどのルールも除外されたファイルに対してチェックされていません。

(部分的な)ファイルの除外を実現する手段が少なくとも2つある場合、他の場所にオプションを追加するには重すぎると感じます

ええ、それは私が答えとして期待したものです;)私はいくつかの疑問も持っていました-少なくとも実装について(私はできるだけシンプルにしようとしました)。

実際には、これを実装する場合は、包含パターンと除外パターンの定数を定義できると便利です。そのため、フィルタリングするすべてのルールに同じ包含/除外パターンをコピーして貼り付ける必要はありません。同じファイル...例をもっと複雑にするのは合理的ではないかもしれないと思いましたが、私はそのようなsmthを念頭に置いていました:

{
    "constants": {
        "generatedFilesGlob": "**/generated.ts",
        "someOtherConstant": "some other value, that could be reused",
        ...
    },
    "rules": {
        "class-name": true,
        "some-otherrule": [ true, "arg1", "arg2", "arg3"],
        "rule-with-exclude": [ {"exclude": "generatedFilesGlob"}, "arg1", "arg2", "arg3"],
        ...
    }
}

しかし、それは設定ファイルの解析を難しくします。 そのため、jsonファイルに加えて、構成用にjsファイルをサポートすることを考えました。 例えば:

const generatedFilesGlob = "**/generated.ts";
const allExceptGenerated = {exclude: generatedFilesGlob};
module.exports = {
    "rules": {
        "class-name": true,
        "some-otherrule": [ true, "arg1", "arg2", "arg3"],
        "rule-with-exclude": [ allExceptGenerated , "arg1", "arg2", "arg3"],
        "another-rule-with-the-same-exclude-pattern": [ allExceptGenerated , "arg1", "arg2", "arg3"],
        ...
    }
}

モジュールでJavaScriptファイルを使用することには(gulpのように)別の利点があります-コメントを許可し、配列の最後の要素またはオブジェクトのプロパティの後のコンマについてそれほど厳密ではありません。

@ atsu85興味深い問題ですが、 構成ファイルの複雑さ/混乱が増すため、ファイルリスト/グロブをtslint.jsonに導入することには消極的です。 TSLintは、単に.jsonファイルに加えて、構成用に.jsファイルを受け入れる必要があることに同意します。 これはユースケースに対処するのに役立つと思います-2つのtslintビルドタスク(1つは通常のソース用、もう1つは生成されたソース用)を設定し、プログラムでclass-nameルールを1つで無効にすることができます同じtslintConfig.jsファイル内のそれらの。

.jsファイルをサポートするために#1065を提出

十分に公平です、私はjs設定ファイルだけを支持してこの問題を閉じます

理にかなっているかもしれないこれのユースケースがあります。 Typescript TSLintルールのほとんどを共有したいテストファイル(* .spec.ts)があります。これは、優れたコーディング手法がテストにも適用されるためです。

ただし、コードに5が含まれないように、「マジックナンバー」ルール用に構成されたいくつかの定数をテストしています。
(Foo.substr(0,5);
しかし、それが定数であることを確認してください
(Foo.substr(0,CONSTANT.FIVE);

そのため、共通ファイルからインクルードされているconstのテストケースには、const FIVE = 5が常に設定されていることを確認するためのテストがあります。 テストではマジックナンバーが使用されているため、テストではexpect(CONSTANTS.FIVE).toBe(5);がTSLintチェックに失敗します。 この方法ですべての定数をテストするわけではありませんが、これらの数値設定をチェックして、特定のサイズのままであると予想されるため、定数が変更されないことを確認したいと思います。

2つの異なるTSLint構成を使用することもできますが、それらが同期しなくなったり、新しいルールを追加するときに複数の場所で実行しなければならないことを本当に避けたいと思います。

この特定のテストの1つのファイルに対して/ * tslint:disable :no-magic-numbers * /を実行できますが、テストファイル内の他のいくつかのケースでは、共通のルールを例外にする必要がある場合があります。そして、各* .spec.tsを更新する代わりに、ルールのグローバルパターンは機能しますか?

@Chowarmaanと同様のユースケースがあります。

私はテストがファイルを持っている*.test.ts私はdevの依存関係を使用した、例えばenzyme
tslint.jsonで、 no-implicit-dependenciesルールを有効にしましたが、 *.test.tsに対してのみこのルールを無効にします。 これらのテストファイルはすべて同じフォルダーにあるわけではないので、今は次のように配置する必要があります。

/* tslint:disable:no-implicit-dependencies */

迷惑な各テストファイルの最初に

これは私が遭遇した同様の問題であり、

この。 100%。 テストの依存関係がワークスペースにリストされているモノレポでこの問題が発生しているため、tslintはno-implicit-dependenciesについて泣いています。 IDEリンティングが引き続き機能するように、単一の構成ファイルで実行する必要があります。

この問題は#3447にも関連していると思います

この古いスレッドにも追加します。 私はAngularプロジェクトにNgRxストアを実装しているところです。 関数へのconst参照をエクスポートすると、AOTビルドが私に怒鳴ります...

export const reducer = ( state = initialState, action: CurrentAction): CurrentState => {...}

Function expressions are not supported in decorators in 'reducers'エラーが発生します。 問題は、リンティングルールが原因で発生します。 プロジェクト全体でonly-arrow-functionsルールを具体的に有効にしました...この特定のルールの例として*.reducer.tsファイルを除外すると言うために、除外にパターンマッチングを追加するのは素晴らしいことですが、許可します他のすべてのファイルに対してそのまま残ります。

現状では、すべてのレデューサーファイルのファイルの先頭にこの行を追加するのは面倒です。 もっと良い方法があるはずだと思われます。

これもネクロバンピング。 tslint-microsoft-contribをVueプロジェクトに追加しようとしていますが、そのルールの束が.vueファイルに爆弾を投下します。 これは、ルールの作成者がこれらのバグを解決する前に、このような問題の回避策として役立つ可能性があります。 現状では、私が作成するすべてのVueファイルに一連のルールを無効にするコメントを追加するのは確かに面倒です。 また、UIコードの厳密さを少し緩和したり、デフォルトのエクスポートの使用などのフレームワークイディオムを処理したりすることも理にかなっています。

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