Tslint: Feature: ".tslintignore"-Datei zum Ausschließen von Globs

Erstellt am 5. Feb. 2014  ·  57Kommentare  ·  Quelle: palantir/tslint

Aktualisierung (01.06.2016)

--exclude CLI-Flag ist seit TSLint v3.6 verfügbar. Dieses Problem verfolgt jetzt eine Funktionsanfrage für eine .tslintignore -Datei.

Ursprüngliches Problem

Cc: https://github.com/madskristensen/WebEssentials2013/issues/617

Von JsHint docs gibt es zwei Flags für den Ausschluss in CLI-Optionen:

--ausschließen

Ermöglicht Ihnen, Verzeichnisse anzugeben, die NICHT gelintet werden sollen.

--exclude-path

Ermöglicht es Ihnen, Ihre eigene .jshintignore-Datei bereitzustellen. Beispielsweise können Sie JSHint auf Ihre .gitignore-Datei verweisen und diese anstelle der standardmäßigen .jshintignore-Datei verwenden.

Bitte geben Sie uns ähnliche Flags an, damit wir die .tslintignore-Datei übergeben können, um Dateien und Ordner auszuschließen, wenn ein Batch-/automatisiertes Executor-Skript Lint darauf ausführt.

Sehen Sie sich JsHints Implementierung dieser Funktion an: cli.js#L182-L208 und sein Aufrufer; Sammelfunktion .

Aged Away Enhancement

Hilfreichster Kommentar

Eine über 3 Jahre alte Ausgabe, die von buchstäblich Hunderten von Menschen gesucht wurde, mit einer funktionierenden PR, aber ohne Aktion für ein halbes Jahr.

Alle 57 Kommentare

guter Vorschlag. wir werden es prüfen.

+1

Für TSD möchte ich dies beim Eingeben eines neuen Projekts im Benutzertypisierungsordner generieren.

+1

Dies ist notwendig, um Flusenfehler als Blockierung zu behandeln. Ich möchte, dass mein Code gelintet wird, nicht der Anbietercode.

+1

+1

+1 Das ist genau die Lösung, die wir brauchen. Wir erhalten eine Reihe von tslint-Fehlern in d.ts-Dateien. Es ist sehr wichtig, sowohl Ordner als auch bestimmte Dateien ausschließen zu können, da wir auch keinen Lint-Code hinterlassen möchten, den wir nicht geschrieben haben.

Ich bin bereit, es zu versuchen, aber ich bin mir nicht sicher, wo ich es hinstellen soll. Wollen wir, dass dies ein CLI-Feature wird oder wollen wir das auch in der Bibliothek unterstützen?
Wenn es in der Bibliothek etwas seltsam ist, weil die Methode lint() ein Ergebnisobjekt zurückgibt, müssen wir ein leeres Dummy-Ergebnisobjekt zurückgeben.
Siehe hier für ein Work in Progress, aber ja, ich bin mir bei den oben genannten Dingen nicht sicher.
https://github.com/DickvdBrink/tslint/compare/palantir :master...Di ckvdBrink:ignoreFile

Wir verwenden Visual Studio und die Web Essentials-Tools. Für uns wäre der ideale Arbeitsablauf, eine .tjshintignore-Datei anzugeben, die so etwas wie typings\ enthält, wodurch alle d.ts-Dateien in diesem Ordner ignoriert würden. Ich bin mir nicht ganz sicher, ob Web Essentials die CLI-Funktion oder die Bibliothek verwendet, daher ist es für mich schwer zu wissen. Ich bin jetzt eigentlich etwas verwirrt, weil ich diesen Thread gefunden habe, der darauf hindeutet, dass es vielleicht schon eine Lösung dafür gibt? https://github.com/madskristensen/WebEssentials2013/issues/617

Ich denke, sie verwenden CLI.
https://github.com/madskristensen/WebEssentials2013/blob/aaa83c3f6f7c9b051d7ef34be8498c6b67f37fca/EditorExtensions/TypeScript/Linters/TsLintCompiler.cs

Ich denke, es ist geschlossen, weil jemand dieses Problem erstellt hat, siehe Zitate unten:

Would you like to send them a feature request?
I see somebody already has. Thanks :-)

Ach, das macht Sinn. Habe das falsch gelesen.

Ich denke, die Implementierung über die CLI ist im Moment in Ordnung. Leute, die grunt-tslint verwenden, können bereits Dateien über grunts Datei-/Verzeichnis-Globber ausschließen.

Wir erwägen auch den globalen Ausschluss für alle knotenbasierten Dienste in Web Essentials: https://github.com/madskristensen/WebEssentials2013/issues/589. Nichtsdestotrotz hat es seine eigene Bedeutung, dieses Feature in tslint zu haben.

Update: In Web-Essentials wird das Feature mit Nightly Build v2.2.4 ausgeliefert.

irgendwelche Updates dazu?

Dies scheint ein relativ wichtiges Merkmal zu sein, das priorisiert werden sollte. Wollte das Interesse an dieser Funktion aus einer SO-Frage hervorheben .

Ich glaube jedoch nicht, dass eine .tslintignore -Datei benötigt wird, ich bevorzuge die einfachere Idee, eine --exclude -CLI-Option hinzuzufügen.

Es könnte besser sein, dies über tsconfig.json (#858) zu unterstützen, anstatt dies in einem CLI-Flag neu zu implementieren ...

Hmm, die Schwierigkeit dabei ist, dass Sie vielleicht andere Dateien kompilieren möchten als Sie lint. Ich könnte also möglicherweise tsconfig.json und dann auch --exclude verwenden, um einige der normalerweise enthaltenen Dateien nicht zu fusseln.

Wäre dies im Gegensatz zur CLI nicht eine natürliche Anpassung an die Datei tslint.json und fügen Sie dann eine Ignore-Prüfung hinzu, die die „ignorePaths“ unter https://github.com/palantir/tslint/blob/master/src/tslint analysiert

+1

+1, ein .tslintignore wird großartig sein

+1 für .tslintignore oder fügen Sie eine Option hinzu, um bestimmte Pfade in tsconfig.json zu ignorieren
Es könnte ähnlich sein wie https://github.com/bbatsov/rubocop#inclusiveexclusiv -files

Benötigen Sie Hilfe bei der Umsetzung?

Als ersten Durchgang werden wir bald #1006 zusammenführen, wodurch eine einfache CLI-Option --exclude hinzugefügt wird. Bringt dich das am meisten weiter? Wenn Sie zusätzliche Tools zusätzlich zu tslint verwenden, dann hat es wahrscheinlich Glob / Exclude-Unterstützung (grunt / gulp / etc). Wie wichtig ist die Unterstützung in tslint.json ?

Ich rufe tslint nicht mehr von NPM-Skripten aus auf, aber es kann für diejenigen wichtig sein, die dies tun, da NPM keine plattformübergreifende Glob-Unterstützung bietet (und ich glaube, dass dies niemals der Fall sein wird).

Ich denke nicht, dass es eine gute Idee ist, Optionen für Dateien hinzuzufügen, die Sie in der tslint.json -Datei möchten oder nicht fusseln möchten. Da scheint es einfach nicht zu passen. Es stimmt auch nicht mit der Konfiguration von jshint überein . Ja, es sind zwei verschiedene Tools, aber sie machen praktisch dasselbe. Da TS eine Supermenge von JS ist, sollte es eine gewisse Konsistenz zwischen den beiden geben. Ich hätte lieber eine .tslintignore -Datei (genau wie .jshintignore ), um die Konsistenz zwischen JS und TS aufrechtzuerhalten. Halten Sie es von tsconfig.json getrennt, da Linting nicht kompiliert wird.

+1 für die CLI-Option, es ist ein guter Anfang.

Wollte erwähnen, dass #1006 zusammengeführt wurde und vor ungefähr einem Monat in einer Version war. Wenn Sie also die neueste Version der TSLint-CLI verwenden, steht Ihnen ein exclude -Flag zur Verfügung.

+1

+1

+1

Wofür geben die Leute hier +1? Seit Version 3.6 ist in der CLI ein --exclude -Flag verfügbar, mit dem Sie Globs (Dateien, Pfade usw.) ausschließen können.

@adidahiya Es hilft zum Beispiel nicht mit WebStorm. Es gibt keine Option zum Angeben von Flags.

Ich verstehe, dass es eine Funktionsanfrage für WebStorm-Entwickler sein sollte, aber es scheint, dass es auf ts-lint-Seite super einfach zu implementieren ist. Und das wird standardmäßig für andere Linting-Bibliotheken gemacht. Warum also nicht so machen?

@fyodorvi cool, ich habe den Titel und die Beschreibung des Problems aktualisiert. Wahrscheinlich möchten wir den Pfad der Datei .tslintignore genauso auflösen wie tslint.json .

Vor- und Nachteile einer neuen Datei im Vergleich zu einem neuen Feld in tslint.json ?

Es gibt eine Problemumgehung für diejenigen, die tslint mit WebStorm verwenden möchten:
Sie können eine leere (mit '{}' darin enthaltene) tslint.json -Datei in Ihrem Ordner node_modules ablegen und die Option 'Search for tslint.json' in WS aktivieren. Dadurch werden alle Regeln von tslint für den Ordner node_modules vollständig zurückgesetzt, und es wird kein Herstellercode angezeigt (oder Sie können hier bestimmte Regeln hinzufügen, wenn Sie möchten).

Ich habe diesen Thread verfolgt, um Dateien speziell mit vscode ausschließen zu können (seitdem der Name geändert wurde, um .tslintignore-spezifisch zu sein). Ich wollte andere wissen lassen, die versuchen, den Ausschluss in vscode zu integrieren, dass es ein separates Problem und eine aktuelle PR für vscode-spezifische tslint-Ausschlüsse gibt.

@adidahiya ein Feld mit einem Array von Verzeichnissen oder Dateien in tslint.json sollte ausreichen, ich würde mir lieber keine Gedanken über eine andere Datei machen, um dieses Geschäft zu kontrollieren, wenn wir bereits eine Konfigurationsdatei in einem Projekt definiert haben.

@Karabur deine Problemumgehung funktioniert bei mir nicht, ich habe sogar versucht, ein leeres Regelobjekt hinzuzufügen, fehlt mir etwas?

Eine Datei ist genug. Dies würde auch der Funktionsweise von tsconfig,json entsprechen.

Eine exclude -Option in tslint.json wäre schön (nur eine Datei, die auf diese Weise verwendet werden kann) und das ist der Name des glob Ignorieren-Abschnitts von tsconfig.json als Nun (ja, tsconfig.json include/exclude unterstützt jetzt Globs in TypeScript, neueste Version)

Weiß jemand, was eslint tut, da ich sicher bin, dass sie das auch getroffen hätten? :Rose:

Im Moment hat tslint.json keine Kontrolle darüber, _was_ gelintet wird, es kontrolliert nur, _wie_ Dateien gelint werden. Je nachdem, wie Sie die Dinge einrichten, kann die TSLint-CLI tatsächlich verschiedene Dateien nach unterschiedlichen Regeln im selben Lauf linten.

Ich bin nicht gegen eine exclude Option in tslint.json , aber es könnte am Ende ein kleiner Paradigmenwechsel sein und müsste sorgfältig überlegt werden.

PS Freue mich immer über dein Feedback @basarat , habe heute gerade dein TS-Gitbook gelesen 😉

Ich habe gerade eine neue Version von alm mit tslint veröffentlicht, die in Version 0.3.0 integriert ist :heart:

linter

Nachdem ich es in meinem Kopf sitzen hatte, ist hier die Zusammenfassung des Designs, mit dem ich mich für die IDE-Integration entschieden habe und das wunderbar zu funktionieren scheint:

  • alle Dateien im aktuellen tsconfig.json sind gelintet, mit Ausnahme von .d.ts Dateien
  • tslint.json sollte mit findup aus tsconfig.json ermittelt werden.

Ich habe dies auch hier dokumentiert: https://basarat.gitbooks.io/alm/content/features/lint.html Fühlen Sie sich frei, die Ideen / Quelle für andere IDE-Integrationen zu verwenden: Rose:

@basarat Ich denke, diese Entscheidungen klingen perfekt! alm habe ich noch nicht probiert, muss ich aber demnächst mal ausprobieren 💻

Bitte hören Sie auf, +1-Kommentare zu posten, und verwenden Sie die integrierte Github-Upvoting-Funktion für die ursprüngliche Problembeschreibung. Ich werde Ihre +1-Kommentare jetzt löschen.

Drei Jahre sind vergangen, und das ist immer noch nicht umgesetzt? Wie kommt es, dass dies meiner Meinung nach eine der trivialsten und wichtigsten Funktionen ist?

Drei Jahre sind vergangen, und das ist immer noch nicht umgesetzt? Wie kommt es, dass dies meiner Meinung nach eine der trivialsten und wichtigsten Funktionen ist?

Es ist schließlich OSS: Wenn Sie es wollen, reichen Sie eine PR ein.

Das aktuelle Problem bei mir ist:

--exclude {node_modules,.git,cache}

Der Operator {} funktioniert nicht und ich sehe keine Möglichkeit, verschiedene Verzeichnisse auszuschließen ...

@Monolith :

--exclude node_modules --exclude .git --exclude cache

soll machen was du willst

Drei Jahre sind vergangen, und das ist immer noch nicht umgesetzt? Wie kommt es, dass dies meiner Meinung nach eine der trivialsten und wichtigsten Funktionen ist?

Es ist schließlich OSS: Wenn Sie es wollen, reichen Sie eine PR ein.

Ich habe eine PR eingereicht: https://github.com/palantir/tslint/issues/2409

@abenhamdine irgendwelche Ideen, wen ich um eine Überprüfung bitten sollte?

Eine über 3 Jahre alte Ausgabe, die von buchstäblich Hunderten von Menschen gesucht wurde, mit einer funktionierenden PR, aber ohne Aktion für ein halbes Jahr.

Danke für die Beule. Beachten Sie, dass der verlinkte PR, #2409, für eine neue Konfigurationsoption in tslint.json ist, die nicht ganz mit dem ursprünglichen Problem übereinstimmt (Datei .tslintignore ). Es ist jedoch ein Schritt in die richtige Richtung; Ich habe noch ein paar CR-Kommentare hinterlassen.

+1
Optionen:

  • Legen Sie .tslintignore in dem zu ignorierenden Ordner ab.
  • Datei tslint.json (globale Datei) neue Eigenschaft exclude mit einer Liste von Pfaden / Ordnern.
    Das wäre schön.

Das Feature wurde übrigens in [email protected] veröffentlicht

Rechts. Beispiel:
Erstellen Sie in Ihrem Projekt einen Ordner mit dem Namen .vscode und eine Datei darin settings.json .

{
  "tslint.exclude": "**/app/models/**"
}

um alle Dateien in /app/models/ zu ignorieren. Fühlen Sie sich frei, den Ausdruck zu verbessern. :)

+1

+1
brauche .tslintignore

Oh hey, das sollte jetzt von linterOptions unterstützt werden. Gemäß https://palantir.github.io/tslint/usage/configuration/ :

  • linterOptions?: { exclude?: string[] } :

    • exclude: string[] : Ein Array von Globs. Jede Datei, die mit diesen Globs übereinstimmt, wird nicht gelintet. Alle Ausschlussmuster sind relativ zu der Konfigurationsdatei, in der sie angegeben wurden.

Funktioniert das gut genug für alle? Gibt es noch etwas, was ein .tslintignore tun sollte?

/cc @am11 , @basarat

Hallo @JoshuaKGoldberg , das ist ein toller Anfang. Ich denke, was sich viele Leute in diesem Thread neben der Funktionalität von einer .tslintignore -Datei erhofft haben, war, dass sie dem Standard entspricht, der bereits von git, npm, eslint usw. festgelegt wurde. Leute, die diesen Standard mögen, fühlen sich sehr wohl damit, und ich erwarte es irgendwie - zum Beispiel habe ich dieses Problem gefunden, als ich eine .tslintignore -Datei erstellt habe, in der Annahme, dass es funktionieren würde, und war überrascht (zu Recht oder zu Unrecht), als es nicht funktionierte.

Hmm. Ich bezweifle, dass ich zwei Standards dafür habe, wie dies funktionieren sollte. Wenn Sie sowohl .tslintignore als auch linterOptions.exclude in einem Verzeichnis haben, wie funktioniert das Verhalten?

Bearbeiten: Oh, und TypeScript bricht auch den .*ignore Trend mit seinem tsconfig.json .

eslint und stylelint unterstützen beide ein --ignore-path CLI-Flag oder ignorePath JS-Option. Warum funktioniert Tslint nicht?
Bitte unterstützen Sie dies! :beten:

Angesichts von #4534 und der linterOptions.exclude Problemumgehung scheint dies jetzt für TSLint nicht mehr möglich zu sein. Der empfohlene Ansatz ist die Migration zu typescript-eslint ; Wenn Sie einige TypeScript-Dateien von TSLint-Linting ausschließen müssen, verwenden Sie linterOptions.exclude . Schließe dieses Problem für die Haushaltsführung.

Wenn es einen Blocker in linterOptions.exclude gibt, der die Migration erschwert, reichen Sie bitte ein neues Problem ein, um den Fehler zu melden!

🤖 Piep boop! 👉 TSLint ist veraltet 👈 und Sie sollten zu typescript-eslint wechseln ! 🤖

🔒 Dieses Thema wird gesperrt, um weitere unnötige Diskussionen zu verhindern. Danke! 👋

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen