Open heikomat opened 5 years ago
Danke für die gute Zusammenfassung. Ich glaube, ich habe da nichts zu ergänzen. Wenn der Kurs Richtung "ESLint only" geht, kann ich das nur begrüßen. Ein Regelset ist besser als zwei (oder zumindest ein Regelset + "Addon" für TypeScript).
Bin klar dafür unter der Bedingung, dass das Tooling im POC sauber funktioniert.
Sehr cool! Ich werde heute abend mal einen POC aufsetzen :)
Der minimal-POC ist jetzt hier zu finden:
Funktioniert bei mir ebenfalls ohne Probleme. Sieht gut aus 👍
Interessant wäre zu wissen, ob das in anderen Editoren auch funktioniert. Verwendet hier jemand etwas anderes als VS Code?
@ElRaptorus
Ist korrekt. Das Regelset in dem PoC ist auch noch nicht repräsentativ, sondern dient nur zur Demonstration, dass das Anwenden von Regeln grundsätzlich erstmal geht.
Das bauen der korrekten Regelsets kommt (zeitnah) in einem späteren Schritt
@larspapen @NullEnt1ty Import klappt jetzt. Man kann die modul-resoultion für das eslint-import plugin konfigurieren: https://github.com/5minds/typescript_eslint_poc/commit/9bb4b79ef0a04f876fc37b4ac036ff6db8562b3f (siehe https://github.com/benmosher/eslint-plugin-import/tree/master/resolvers/node)
@5ebastianMeier und ich haben uns heute ein wenig zusammen gesetzt und geprüft, ob es bei der ESLint verwendung irgendwelche dealbreaker geben könnte, und sind zu dem Schluss gekommen, dass das alles recht vielversprechend aussieht:
peerDependencies
angegeben werden müssen..eslintignore
ins Projekt zu legen, welches z.b. dist
und node_modules
definiert und so vom linten ausschließen.Die nächsten Schritte sehen deshalb wie folgt aus:
Punkte 1 und 2 sollten bis Ende der Woche machbar sein. Und nach Punkt 3 fehlt auch nurnoch ein kleines Demoprojekt aufzusetzen, was beschreibt wie man das set verwendet (welche Dependencies, Dateien und Konfigurationen man braucht), und dann kann mit der Umsetzung in den Projekten begonnen werden :)
Ich bin mir nicht sicher ob ich noch etwas überlesen habe, aber ich fänd es super hilfreich wenn am Ende eine ESLint "extends": "tslint:recommended"
heraus käme, die einem die Basis der besten Konfigurationen zusammen fasst. Von da aus kann man dann ja gerne weiter je nach wünschen des jeweiligen Projektes tweaken.
Ich habe angefangen das eslint-config-5minds-typescript
Paket zu schreiben. Dabei ist aufgefallen, dass es einige wenige Regeln gibt, die parserServices benötigen. D.h. damit diese Regeln funktionieren, muss man in der .eslintrc.json
den key parserOptions.project
mitgeben, dessen Wert auf die tsconfig.json
des projekts zeigt.
Das funktioniert auch soweit, allerdings ist das extrem langsam. Mit den (übrigens nur 4) Regeln die das benötigen, ist die Linting-Zeit in einem großen Monorepo von 5.5 Sekunden auf 150 Sekunden gestiegen.
Ich habe auch erfahren, dass ein npm Paket mehrere ESLint Regelsets bereitstellen kann. Deshalb habe ich das Paket testweise mal so eingerichtet, dass man entweder 5minds-typescript
extenden kann, oder aber 5minds-typescript/fast
. Letzteres ist eine erweiterung der 5minds-typescript regeln, bei der die vier Regeln die parserServices benötigen abgeschaltet sind.
Habe das so in der art auch bereits in der (noch unfertigen) readme dokumentiert.
Hier hätte ich gerne mal eure Meinung zu:
(@ElRaptorus @NullEnt1ty @5ebastianMeier)
Ich habe das Paket jetzt grade auch mal als 1.0.0-alpha.2 gepublished. Was man alles braucht und wie man es benutzt steht in der Readme.
Die Regeln sind zwar so gut es ging an unsere Regeln und Wünsche angelehnt, aber noch nicht wirklich getestet (nur so ein bisschen angetestet). Deshalb gilt es jetzt hier die Regeln mal testweise in Projekten anzuwenden und alles so anzupassen, wie wir es brauchen.
- Ist euch die Linting-Performance egal, und ihr würdet die 4 Regeln drin lassen?
Von 5,5 auf 150 Sekunden in deinem Testfall ist schon eine Hausnummer. Da würde ich im Zweifel auf vier Regeln verzichten und sie gegebenenfalls je nach Größe des Projektes speziell für das Projekt aktivieren.
@NullEnt1ty @ElRaptorus @5ebastianMeier
Habe das aktuelle Regelset (5minds-typescript/fast
version 1.0.0-alpha.3
) grade mal in einem größeren Projekt ausprobiert und ein paar regeln gelockert und getweaked.
Ich würde mich freuen, wenn ihr das Regelset auch mal ausprobieren könntet, und Feedback gebt, was ihr ändern/entfernen/hinzufügen würdet :)
Da in den letzten ~4 Wochen kein weiteres Feedback gekommen ist, habe ich das Regelset jetzt mal vollständig in einem größeren Projekt angewendet, dabei nochmal 3-4 Regeln getweaked, und den PR für das Regelset geöffnet: #21
Sollten in den nächsten ~2 Wochen keine Änderungsvorschläge kommen, werde ich das Regelset so wie's ist als 1.0.0er releasen.
@ElRaptorus Ich vermute mal, dass ihr bei der Process-Engine (zumindest auf lange Sicht) auch auf eslint umsteigt. Jetzt wäre der optimale Zeitpunkt, das ganze mal auszuprobieren und ggf. noch Anpassungsvorschläge einfließen zu lassen.
// cc @5ebastianMeier @NullEnt1ty
Da der PR nach kleinen typo-fixes auf Zustimmung gestoßen ist, habe ich das Paket in Version 1.0.0 deployed. Feedback und begründete Änderungsvorschläge sind natürlich weiterhin willkommen :)
@heikomat Das war bis jetzt die beste Zusammenfassung, die ich gelesen habe, vielen Dank!
Wie hier und hier zu entnehmen ist, liegt die Zukunft des Typescript-Lintings nicht bei TSLint; Sondern bei ESLint!
ESLint ist sehr viel ausgereifter, performanter und hat mehr Regeln und Einstellungsmöglichkeiten als TSLint. Zudem lassen sich die selben ESLint-Regeln für JavaScript- und TypeScript Projekte anwenden, was die doppelte Pflege von Regeln überflüssig macht.
Deshalb dieses Issue: Als überblick über die aktuelle Situation, und zum Festhalten eines Migrationsplans.
Die aktuelle Situation bei 5Minds
Die aktuelle Situation bzgl ESLint
(Die meisten Infos sind von hier)
npm install
iert, und in der ESLint-config angegeben werden.npm install
iert, und in der ESLint-config angegeben werden.Das Ziel
Folgende Ziele wären erstrebenswert:
Dadurch gewinnen wir folgende Vorteile:
Der Plan
Falls Plausibel:
Eure Beteiligung
Ich weiß, dass einigen (mich eingeschlossen) dieses Thema recht wichtig ist, andere sich einfach dafür interessieren, und man alleine sowieso nicht alles berücksichtigen kann. Deshalb würde ich mich über Feedback und Input von allen, die sich davon angesprochen fühlen freuen. Vor Allem aus unterschiedlichen Teams, denn sollte das alles so klappen, wäre ja durchaus mehr als ein Team davon betroffen.
Leider kann man nur 10 Leute Assignen. Deshalb mentione ich hier alle, von denen ich glaube, dass sie sich evtl dafür interessieren könnten. Wer möchte kann sich dann ja selbst assignen: @5ebastianMeier @moellenbeck @ElRaptorus @Vyperus @LeoTT @NullEnt1ty @rrrene @lmoe @cmg-dev @alexanderkasten @MiguelACarballo @Paulomart @S3bastianGriesa @SteffenKn
Falls ich wen vergessen habe, lasst es mich wissen!