Tslint: 提案条件付きリント構成

䜜成日 2017幎11月03日  Â·  42コメント  Â·  ゜ヌス: palantir/tslint

リントされおいるコヌドがテストコヌドであるかどうかに基づいお、条件付きでリントチェックを実斜したい堎合がありたす。 たずえば、安党ではないため、本番コヌドから「any」を犁止したいず思いたす。 ただし、テストでは、「any」は、サヌビスの停の実装たたは暡擬実装を提䟛したり、プラむベヌトメ゜ッドを呌び出すこずができるようにキャストしたりするのに圹立ちたす。 たたは、たずえば、テストず本番コヌドで異なるメ゜ッドのセットを犁止したい堎合がありたす。

私が提案するのは、ファむル名の正芏衚珟の䞀臎に基づいおlintチェックを条件付きで有効にする方法です。 これは、特定のディレクトリたずえば、「レガシヌ」コヌドを含む、たたは.tsxファむルや.d.tsファむルなどのlintチェックをオフにする堎合にも圹立ちたす。

ここにいく぀かの構文ストロヌマンのアむデアがありたす。 私も提案を受け付けおいたす。

セクションオブゞェクト

{
  "rules": {
    "no-any": {"other": true},
    "no-console":
        {
          "test": [true, "warn", "error"], 
          "other": [true, "log", "warn", "error"]
        }
  },
  "sections": {
    "test": ".*\\.spec\\.ts$"
  }
}

「その他」は、どの正芏衚珟ずも䞀臎しないものです。 これはかなり簡朔ですが、ルヌルセクションの読みやすさは少し損なわれるず思いたす。

「オヌバヌラむド」ルヌル

{
  "rules": {
    "no-any": true,
    "no-console": [true, "log", "warn", "error"]
  },
  "override": {
    "match": ".*\\.spec\\.ts$",
    "rules": {
      "no-any": false,
      "no-console": [true, "warn", "error"]
    }
  }
}

耇数のオヌバヌラむドも可胜にするために、これはおそらく配列である必芁がありたす。

Declined Enhancement

最も参考になるコメント

ネストは、ここで説明する問題を解決したせん。 倚くの人は、テストするコヌドず同じディレクトリ構造でテストを

党おのコメント42件

テストず本番コヌドを別々のディレクトリに眮く堎合、そのような機胜は必芁ありたせん。 CLI匕数ずしお構成ファむルを指定しない堎合、TSLintは最も近いtslint.jsonたす。 したがっお、フォルダごずに異なる蚭定を行うこずができたす。 "extends"を䜿甚するず、同じ基本構成を䜿甚しお、特定のルヌルのみをオヌバヌラむドできたす。

倚くのAngularプロゞェクトずReactプロゞェクトが、察応する本番コヌドず同じディレクトリにテストを配眮しおいるこずがわかりたした。 個人的にはこれは悪い習慣だず思いたす。 私は十分な数の人々が偶然に本番コヌドのテストからシンボルをむンポヌトするのを芋おきたした。

IMOが提案する機胜は、倚くの耇雑さを远加したす。 実装はそれほど難しくないかもしれたせんが、蚭定ファむルを読んで理解するのが難しくなりたす。
これを実装する堎合は、2番目の提案をお勧めしたす。

たた、構成を拡匵するずきにどのように機胜するかに぀いおも説明する必芁がありたす。 オヌバヌラむドはどの順序で適甚されたすか

確かに、コヌドを分離するこずもできたすが、人間工孊に悪圱響を及がしたす。 どちらか

src/
  tslint.json
  a/
    b/
      c/
test/
  tslint.json (extends ../src)
  a/
    b/
      c/

そしおc/foo.spec.tsはimport {symbol} from '../../../a/b/c/foo';なければなり

そのパスは、ファむルがツリヌの非垞に深いずころにあるこずが倚いモノリポゞトリでは醜くなりたす。

たたはあなたが持っおいる

  a/
    src/
      tslint.json
    test/
      tslint.json (extends ../src)
    b/
      src/
        tslint.json
      test/
        tslint.json (extends ../src)
      c/
        src/
           tslint.json
        test/
          tslint.json (extends ../src)

tslint.jsonファむルが倚すぎたす

オヌバヌラむドのトピックに぀いおオヌバヌラむドは、ルヌルが適甚されるのず同じ順序で適甚されるず思いたす。 それが䜕であるかわからず、ドキュメントも芋぀かりたせんでしたが、盎感的には次のようになるず思いたす。

// a.json
{"rules": {"foo": [true, 1]}}

// b.json
{"rules": {"foo": [true, 2]}}

// c.json
{
  "extends": ["a.json", "b.json"],
  "rules": {"foo": [true, 3]}
}

ルヌル「foo」の匕数は3になりたす。そのルヌルがc.jsonにない堎合、「extends」配列の順序により、「foo」の倀は2になりたす。

オヌバヌラむドに぀いおは、同じ順序が適甚されるこずを期埅したす。 'extends'ルヌルが考慮される順序を考慮しお、提䟛された正芏衚珟に䞀臎する最埌のオヌバヌラむドを䜿甚するこずは私には理にかなっおいたす。 単䞀ファむルの䟋

{
  "rules": {"a": [true, 1]},
  "override": [
    {"match": "test|spec", "rules": {"a": [true, 2]}},
    {"match": "test", "rules": {"a": [true, 3]}}
  ]
}

ファむルパスに「spec」が含たれおいる堎合はルヌル「foo」の倀が2、「test」が含たれおいる堎合は3、それ以倖の堎合は1になりたす。 明らかに、「テスト」は最初から省略された方がよいので、あたり有甚なオヌバヌラむドのセットではありたせんが、あなたはその考えを理解したす

それは理にかなっおいお、あなたの質問に答えたすか

@calebegg考慮すべき他の゚ッゞケヌスがいく぀かありたす。

// a.json
{
  "rules": {"foo": [true, 1]},
  "override": {"match": "test|spec", "rules": {"foo": [true, 2]}}
}

// b.json
{
  "extends": "./a.json"
  "rules": {"foo": false}
}

期埅される結果は䜕ですか

  • 2オヌダヌであるため、 a.json/rules > - b.json/rules - > a.json/override
  • 泚文がa.json/rules -> a.json/override -> b.json/rulesため、 false b.json/rules

ここでも同じですが、期埅される結果は䜕ですか。

// c.json
{
  "rules": {"foo": [true, 1]},
  "override": {"match": "test|spec", "rules": {"foo": false}}
}

// d.json
{
  "extends": "./a.json"
  "rules": {"foo": {"options": 2}},
  "override": {"match": "test|spec", "rules": {"foo": {"options": 3}}}
}

ただランダムな考えパタヌンを順番に䞀臎させ、郚分的に前の䞀臎をオヌバヌラむドしないのはなぜですか

{
  "rules": { // same as "*"
    "rule-one": true,
    "rule-two": true
  },
  "*.js?(x)": { // we could get rid of "jsRules" with this
    "rule-two": false
  },
  "*.{t,j}sx": {
    "jsx-rule": true
  },
  "*.spec.*" {
    "rule-one": false
  }
}

いく぀かの䟋

  • foo.ts ルヌル-1、ルヌル-2
  • foo.tsx ルヌル1、ルヌル2、jsxルヌル
  • foo.js ルヌル1
  • foo.jsx ルヌル1、jsxルヌル
  • foo.spec.tsx ルヌル2、jsxルヌル
  • foo.spec.js なし

これを蚭定内のどこに眮くかわかりたせん。 "rules"ず同じレベルでは、曞きやすくなりたすが、 "extends" 、 "rulesDirectory" 、..ず同じレベルであるため、ナヌザヌを混乱させる可胜性がありたす。

もう1぀の問題は、構成の拡匵です。 基本構成からのすべおのオヌバヌラむドを適甚しおから、珟圚の構成からのオヌバヌラむドを適甚するず、理解するのがかなり難しくなりたす。

たた、コヌドがより耇雑になりたす。 珟圚、構成は解析䞭にマヌゞされたす。 この提案では、最終的な構成は、ファむル名がある堎合にのみわかりたす。

こんにちは、

この機胜は玠晎らしいでしょう。 Eslintはこの機胜をサポヌトしおいるず思いたす https //eslint.org/docs/user-guide/configuring#configuration-based-on-glob-patterns。 したがっお、混乱を避けるために、構文ずセマンティクスは同じにするこずができたす。

@minomikulaどうもありがずうございたした。 以前にESLintドキュメントを怜玢したしたが、このセクションが芋぀かりたせんでした。

圌らのアプロヌチは理にかなっおいたす。 芁玄する

  • "overrides"セクションには、オヌバヌラむドの配列が含たれおいたす
  • オヌバヌラむドでは、耇数のグロブパタヌン "files" を指定できたす。 それらの1぀が䞀臎する堎合、構成が適甚されたす
  • グロブパタヌンでファむルを陀倖できたす "excludedFiles"
  • グロブパタヌンは、それらが指定されおいる構成ファむルに関連しおいたす
  • グロブパタヌンは、ベヌス名だけでなく、垞にパス党䜓ず䞀臎する必芁がありたす
  • オヌバヌラむドは順番に凊理され、前のオヌバヌラむドがオヌバヌラむドされたす
  • 構成ファむルを拡匵する堎合、拡匵構成に進む前に、基本構成が完党に評䟡されたす。

    • base.json / rules

    • base.json / overrides

    • extended.json / rules

    • extended.json / overrides

この動䜜をTSLintに移怍する際には、考慮すべきこずがいく぀かありたす。

  • オヌバヌラむドでextendsずlinterOptionsを確実に無効にする必芁がありたす
  • おそらくrulesDirectoryも犁止したいず思いたす
  • オヌバヌラむドでrulesずjsRulesを蚱可したすか、それずも**/*.js?(x)オヌバヌラむドを優先しおjsRulesを廃止したすか

考えやコメント@ adidahiya @ calebegg

ああ、すごい、ええ、そのアプロヌチは私には合理的なようです。 私も先行技術を探すべきだった。

これは玠晎らしい远加になるでしょう eslintアプロヌチは、テストファむルの䞀郚のルヌルを条件付きで無効にする堎合に最適です。

@calebegg時間があれば、これを進める予定はありたすか

はい、絶察にこれに取り組みたいず思いたす。 @ajafff ESLintアプロヌチから始めお、PRを繰り返すこずに䞀般的に満足しおいたすか それずも、最初に話し合うべき蚭蚈䞊の質問があるず思いたすか

オヌバヌラむドでルヌルずjsRulesを蚱可したすか、それずも* / .jsxオヌバヌラむドを優先しおjsRulesを廃止したすか

非掚奚にするこずは私には理にかなっおいたすが、どちらにしおもあたり匷くは感じたせん。

@calebeggESLintアプロヌチで倧䞈倫です。 私はPOCリンタヌランタむムに非垞によく䌌た抂念を実装したしたhttps://github.com/fimbullinter/wotan/tree/master/packages/wotan#overrides

珟圚のTSLintAPIは、解析䞭にすべおの構成をマヌゞするため、統合は難しい堎合がありたす。 これは、ファむルの名前がわかるたで延期する必芁があり、すべおのファむルに察しお実行する必芁がありたす。

これは確かにAPIの重倧な倉曎です。

@calebegg @mitchlloyd @ajafff @alexeagle tslint.jsonファむルをネストしお倖郚構成をオヌバヌラむドするよりも、この機胜にはほずんどメリットがありたせん。 この機胜は珟圚すでに機胜しおおり、耇雑なAPIブレヌクは必芁ありたせん。 このリク゚ストを拒吊した堎合、気分を害したすか

ネストは、ここで説明する問題を解決したせん。 倚くの人は、テストするコヌドず同じディレクトリ構造でテストを

゜ヌスず同じディレクトリにスペックファむルを配眮するプロゞェクトがたくさんありたす。 これは倚くの環境でのベストプラクティスになりたした。AngularCLIはそのようなプロゞェクト構造を生成したす。tslint構成ファむルをネストするこずはこれらすべおの人々にずっお珟実的ではないず思いたす。

私のプロゞェクト構造はリンティングツヌルによっお決定されるべきではないこずに同意したす。 代わりに、リンティングツヌルは䞀般的な既存のパタヌンをサポヌトする必芁がありたす。 テストず゜ヌスファむルを同じ堎所に配眮するのが䞀般的なパタヌンです。

@giladgray芁求された倉曎は、ナヌザヌが次のようにテストファむルず本番ファむルを

some-dir/
  my-component.ts
  my-component.test.ts

my-component.tsずmy-component.test.ts異なるルヌルが必芁な堎合、「 tslint.jsonファむルのネスト」はこのナヌスケヌスにどのように察凊したすか

@giladgray角床ガむドラむンでは、テストをファむルず䞀緒に配眮するこずを掚奚しおいたす。 したがっお、角床のあるプロゞェクトの99がこれを行いたす。 tslintが埌方にあるため、私が取り組んだすべおの角床プロゞェクトに問題がありたした。 あなたの最埌のコメントは混乱しお近芖県的です。 この信じられないほど有甚な提案を受け入れられない/受け入れたくないのであれば、あなたはあたりにも保守的すぎお、そのような重芁なプロゞェクトに぀いお私たちのために決定を䞋すこずができないず思いたす。 この問題は、私たちの角床のあるプロゞェクトの䜜業を䜕幎にもわたっお困難にしおきたした。

@ohjamesトピックにずどたり、個人的な攻撃に向かうのを避けたしょう。 誰かが自分のプロゞェクトを維持するのに適しおいないこずを瀺唆するこずは、OSSに圱響を䞎える方法ではなく、確かに私たち党員がここで䞻匵しおいるこずを助ける぀もりはありたせん。

䞊蚘のようにネストされた構造に適合しないファむルのオヌバヌラむドが必芁なのは理にかなっおいたす。 @giladgrayのコメントは、この問題に関する掻動が6か月以䞊なかったこずを考えるず、この倉曎にコミュニティの倧きな関心がただあるかどうかを刀断するこずを目的ずしおいたように思われたす。 これは、オヌプンPR3708に関する圌のコメントによっお具䜓的に蚌明されおいたす。

これを远求したい堎合は、このブランチを曎新しお確認できるようにするか、関連性がなくなった堎合は閉じおください。 2週間以内にご連絡がない堎合は、これを終了したす。

@ohjamesコメントを再怜蚎するこずをお勧めしたす- 述べたように、個人的な攻撃はここやオヌプン゜ヌス゜フトりェアのどこでもあなたを助ける぀もりはありたせん。 誰もが優れた、信頌性が高く、機胜が豊富な゜フトりェアを䜜成するために最善を尜くしおいたすが、人々を攻撃するこずは決しおそれに貢献したせん。

このトピックに関する曎新はありたすか
@ajafffが芁玄コメントで提案したアむデアは合理的であり、さたざたなニヌズを満たしおいたす。 eslintず同じセマンティクスを䜿甚するこずは良い方法です。

関連する1063に぀いおコメントしたように、私のナヌスケヌスは、tslint-microsoft-contribを䜿甚するず、珟圚、䞀郚のルヌルでVue単䞀ファむルコンポヌネントを爆撃するこずです。 これはVueの問題たたはTSLintの問題のいずれかである可胜性があり、それらのチヌムは特定の問題の修正に取り掛かるかどうかはわかりたせん。問題が発生するたで問題のあるルヌルを無効にするこずは、それほど面倒ではない単玔な回避策のように思えたす。 すべおの単䞀の.vueファむルに同じdisableディレクティブを远加し、ルヌルのサポヌトが倉曎されたずきにそれらすべおの堎所で曎新する必芁がある堎合ず比范しお。 たた、プロゞェクトを.vueファむルず.tsファむルに分割するこずも意味がありたせん。これは、非垞に扱いにくい構造になりたす。

この機胜の導入に賛成です。オヌバヌラむドによっおすべおのルヌルを完党に無効にするこずで、73のtslintignoreリク゚ストをきれいに解決できるかもしれたせん。

{
    "files": "./src/test-data/*.ts",
    "reset": true // Resets tslint.json to {}
}

tslint-microsoft-contribは珟圚、䞀郚のルヌルでVue単䞀ファむルコンポヌネントを爆撃しおいたす

ああ😕@ millimoose tslint-microsoft-contribに問題を報告しおいただけたせんか

@ JoshuaKGoldberg-私はすでに@vuejs / vue-cliでそのバグの詳现なレポヌトを䜜成したした。これは最も適切ず思われたす。 「耇補埅ち」ずマヌクされおいるので、倧したこずではないず思いたす。ここでチャむムを鳎らす動機ずしお蚀及したした。 これは、進化する゚コシステムで収穫できる、そしお収穫するようなものです。これは、他の人のバグを実際にハックするこずなく、障害を回避するのに十分な柔軟性を備えたツヌルの議論になるはずです。

この問題に関する曎新はありたすか

この問題は珟圚「提案が必芁」ずしおフラグが立おられおいたすが、 https //github.com/palantir/tslint/issues/3447#issuecomment -344020834にすでに提案があるず思いたすか

@RoystonS @ajafffの提案では、察凊すべきいく぀かのルヌズ゚ンドに぀いお蚀及しおいたす。

この動䜜をTSLintに移怍する際には、考慮すべきこずがいく぀かありたす。

  • オヌバヌラむドでextendsずlinterOptionsを確実に無効にする必芁がありたす
  • おそらくrulesDirectoryも犁止したいず思いたす
  • オヌバヌラむドでrulesずjsRulesを蚱可したすか、それずも**/*.js?(x)オヌバヌラむドを優先しおjsRulesを廃止したすか

これはかなり重芁な機胜であるため、先に進む前に、これに぀いおpalantirtech組織の人々からのコンセンサスも必芁です。

自分でこれに出くわしただけで、この皮の機胜に興味を瀺したいず思いたす。

最終的に、本番コヌドに圱響を䞎えるいく぀かのリンティングルヌルを緩和し、それがどのように行われるかを芋おみたしょう。 

この機胜が芋たいです

サブスクラむブ-これも必芁です。

私はこれがずおも必芁です:(

こっちも䞀緒 私たちはVuejsでtypescriptを䜿甚しおおり、単䜓テストファむルはテストディレクトリではなく、コンポヌネントの゜ヌスコヌドのいたるずころにありたす。

この機胜をぜひご芧ください。珟圚、この問題を回避するために、コマンドラむンのlintが匷調衚瀺するものずは異なるlinting゚ラヌをvscodeが匷調衚瀺する、少し䞍安定な蚭定を䜿甚しおいたす。

この機胜が実装されるこずはないだろうず私は匷く疑っおいたす。tslintは䞀般的に積極的に保守されおいないようです。 @typescript-eslintに切り替えるこずをお勧めしたす。これは、eslintプロゞェクトずtsプロゞェクトの䞡方から完党にサポヌトされおおり、 @ typescript-eslint / eslint-plugin-tslintを䜿甚するず移行がこれたでになく簡単になりたす。 そしお、tslintず察応するeslintルヌル/他の遞択肢を備えた互換性のあるテヌブルがありたす。 Eslintのセットアップは高床にカスタマむズ可胜であるため、tslintに固執する意味はありたせん。

gitリポゞトリが.gitIgnore ...内のファむルに䜿甚する抂念をtsLintルヌルに適甚するこずを提案したす。 特定のサブディレクトリをリントするずきの、オヌバヌラむドファむルずずもに、リンタヌぞのコンテキストずしおの珟圚の階局䜍眮の䜿甚。 次に、任意のディレクトリレベルで任意の構成を含めたり陀倖したり、蚭定したりできたす。

䟋えば
tslint構成はルヌトに配眮され、゜ヌスコヌド構造の特定のレベルで、別の動䜜が必芁になりたす。そのサブディレクトリのルヌトにある拡匵子tslintファむルでオヌバヌラむドするだけです。

@redevill testフォルダにテストを曞くのに圹立ちたす。 ただし、コンポヌネント/サヌビスの同じフォルダヌでのsomething.test.tsずしおの曞き蟌みテストは1぀ではありたせん。

同意したした-ただし、マむナヌな倉曎がありたす:(テンプレヌトゞェネレヌタヌCLIスタむルで自動化できたす
MyComponentDir
--- MyComponentTestsDir
------ tslint.test.json
------ something.test.ts
--- mycomponent.component.css
--- mycomponent.component.html
--- mycomponent.component.ts

アむデアはただ機胜する可胜性がありたす。

この提案の倧ファン。 はい、お願いしたす 私の奜みはオヌバヌラむドの抂念です。

ずころで、tslintの非掚奚の発衚を考えるず、この段階でこのような倧きな倉曎が行われるこずは_本圓に_想像できたせん。私のチヌムは、すでにルヌルごず+ファむルごずのオヌバヌラむド機胜を備えたeslintに移行しおいたす。

前述の発衚 https 

@RoystonSは基本的に正しいので、この時点ではこのような倧きな機胜はtslintに远加されたせん。 4534を参照

Angularプロゞェクトを䜿甚したす。 オヌバヌラむドの抂念が必芁です。 そうでなければ、管理するのは苊痛です

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡