Gibt es eine Möglichkeit, Handlebars zu linten?

Ich habe nach einer Möglichkeit gesucht, Handlebars-Dateien in Discourse zu linsen. Ich habe zwar einen Befehl gefunden, der scheinbar ausgeführt wird, aber keine Änderungen vornimmt oder Probleme auflistet.

yarn ember-template-lint --fix path/to/files

Ich bin mir nicht sicher, ob er in diesem Stadium überhaupt funktionieren soll.

yarn ember-template-lint <dir> sollte der richtige Befehl sein.

Danke. Aber es scheint nichts zurückzumelden. Ich habe es auf einer defekten Datei ausgeführt, aber es werden keine Fehler angezeigt oder behoben.

@cvx Du hast das gerade in unseren Plugin-Workflows implementiert – müssen wir dafür etwas Besonderes tun, um es zu nutzen?

Keine Magie erforderlich :slightly_smiling_face:, aber stelle sicher, dass du den Befehl im Stammverzeichnis von Discourse ausführst. Das hat mich schon mehrmals erwischt.

Vergleiche:

# in [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Done in 2.57s.
# in [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  error  Unexpected {{debugger}} usage.  no-debugger
  4:0  error  Usage of triple curly brackets is unsafe  no-triple-curlies
  3:15  error  Incorrect indentation for `d-section` beginning at L1:C0. Expected `{{/d-section}}` ending at L3:C15 to be at an indentation of 0 but was found at 1.  block-indentation
  2:4  error  Incorrect indentation for `{{outlet}}` beginning at L2:C4. Expected `{{outlet}}` to be at an indentation of 2 but was found at 4.  block-indentation
  1:23  error  you must use double quotes in templates  quotes

✖ 5 problems (5 errors, 0 warnings)
error Command failed with exit code 1.

Denke auch daran, dass dabei unsere Konfiguration (.template-lintrc.js) verwendet wird. Es werden möglicherweise nicht alle erwarteten Probleme gemeldet, da einige Regeln derzeit deaktiviert sind.


@justin Mir ist gerade aufgefallen, dass unsere GitHub Actions-Workflows für Plugins diese Konfiguration derzeit nicht gemeinsam nutzen. Das sollten wir irgendwann ändern. :smiley:

Wird das in plugins/ laufen? Ich wette, genau dort hat @fzngagan Interesse daran, dies einzusetzen.

Wenn sich das Plugin im Verzeichnis plugins befindet, natürlich! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  you must use double quotes in templates  quotes

Ich bin mir ziemlich sicher, dass ich dasselbe tue, werde es aber noch einmal versuchen und dir Bescheid geben.

Ember Template Lint kann nicht alles beheben, genau wie ESLint. Tatsächlich kann Ember Template Lint im Gegensatz zu ESLint nur wenige Dinge automatisch reparieren.

Es meldet vor allem Fehler, die Sie jedoch manuell beheben müssen.

Hier ist, was ich versucht habe.

Ich habe versucht, eine Regel mit dem Diskurs selbst zu brechen. Funktioniert

Ich habe versucht, eine Regel mit dem Plugin „discourse-custom-wizard

Für mich:

funktioniert

yarn ember-template-lint plugins/discourse-pfaffmanager/assets/javascripts/discourse/templates/user/servers/show.hbs 

funktioniert nicht

yarn ember-template-lint plugins/discourse-pfaffmanager/assets/javascripts/discourse/templates/user/servers/

Und sollte mein assets-Ordner innerhalb von app liegen?

Ah, ja. Das Problem ist, dass ember-template-lint automatisch .gitignore berücksichtigt. Nicht gebündelte Plugins werden ignoriert.

Um das Template-Linting also für alle Plugins auszuführen:

yarn ember-template-lint --no-ignore-pattern plugins

# oder ein beliebiges anderes Verzeichnis, z. B. ein einzelnes Plugin:
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Danke. Funktioniert einwandfrei.

Danke dafür! Gibt es außerdem eine Möglichkeit, das automatisch beheben zu lassen? Ich habe versucht, --fix hinzuzufügen, aber leider ohne Erfolg.

Es funktioniert, aber:

  1. Es gibt nur eine Handvoll Regeln, die automatisch korrigiert werden können (siehe: GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. Von diesen sind nur zwei im „recommended“-Regelsatz enthalten (link-rel-noopener und require-button-type)