Existe-t-il un moyen de linter handlebars ?

Je cherchais un moyen de vérifier les fichiers Handlebars dans Discourse. J’ai trouvé une commande qui semble s’exécuter, mais qui n’apporte aucune modification ni ne liste les problèmes.

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

Je ne sais pas si cela est censé fonctionner à ce stade.

yarn ember-template-lint <dir> devrait être la commande correcte.

Merci. Mais cela ne semble rien renvoyer. J’ai essayé de l’exécuter sur un fichier corrompu, mais il n’affiche ni les erreurs ni ne les corrige.

@cvx Vous venez de l’implémenter dans nos flux de travail de plugin — y a-t-il une procédure particulière à suivre pour l’utiliser ?

Aucune magie requise :slightly_smiling_face: mais assurez-vous d’exécuter la commande à la racine du répertoire de Discourse. Cela m’est déjà arrivé à plusieurs reprises.

Comparez :

# dans [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Terminé en 2,57 s.
# dans [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  error  Utilisation inattendue de {{debugger}}.  no-debugger
  4:0  error  L'utilisation de doubles accolades est dangereuse  no-triple-curlies
  3:15  error  Indentation incorrecte pour `d-section` commençant à L1:C0. L'élément de fermeture `{{/d-section}}` se trouvant à L3:C15 devrait avoir une indentation de 0, mais on en trouve une de 1.  block-indentation
  2:4  error  Indentation incorrecte pour `{{outlet}}` commençant à L2:C4. `{{outlet}}` devrait avoir une indentation de 2, mais on en trouve une de 4.  block-indentation
  1:23  error  Vous devez utiliser des guillemets doubles dans les modèles  quotes

✖ 5 problèmes (5 erreurs, 0 avertissements)
error La commande a échoué avec le code de sortie 1.

De plus, gardez à l’esprit qu’il utilisera notre configuration (.template-lintrc.js), il est donc possible qu’il ne signale pas tous les problèmes attendus, car certaines règles sont actuellement désactivées.


@justin Je viens de réaliser que nos workflows GitHub Actions pour les plugins ne partagent actuellement pas cette configuration. Nous devrions y remédier à un moment donné. :smiley:

Cela fonctionnera-t-il dans plugins/ ? Je parie que c’est là que @fzngagan souhaite l’utiliser.

Si le plugin se trouve dans le répertoire plugins, bien sûr ! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  vous devez utiliser des guillemets doubles dans les modèles  quotes

Je suis presque certain de faire la même chose, mais je vais réessayer et vous tiendrai au courant.

Ember template lint ne peut pas tout corriger, tout comme eslint, et en réalité, ember template lint ne peut corriger que quelques éléments, contrairement à eslint.

Il signalera principalement des erreurs, mais vous devrez les corriger manuellement.

Voici ce que j’ai essayé.

J’ai essayé de briser une règle avec le plugin discourse lui-même. Ça marche

J’ai essayé de briser une règle avec le plugin discourse-custom-wizard, qui se trouvait dans le répertoire discourse sous forme de lien symbolique. Ça ne marche pas

J’ai fait la même chose avec le plugin poll, qui fait partie du dépôt discourse. J’ai également essayé avec d’autres plugins livrés avec discourse. Ça marche

J’ai essayé de briser une règle avec le plugin discourse-custom-wizard à nouveau, cette fois en le copiant dans le dossier des plugins de discourse. Ça ne marche pas

J’ai essayé de briser une règle avec le plugin discourse-assign en plaçant le dossier dans plugins. Ça ne marche pas

Pour moi :

fonctionne

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

ne fonctionne pas

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

Et mes assets devraient-ils être placés dans app ?

Ah, oui. Le problème est que ember-template-lint prend automatiquement en compte .gitignore. Les plugins non regroupés sont donc ignorés.

Ainsi, pour exécuter la vérification des modèles sur tous les plugins :

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

# ou tout autre répertoire, par exemple un seul plugin :
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Merci. Ça marche comme sur des roulettes.

Merci pour cela ! Aussi, y a-t-il un moyen de le faire réparer automatiquement ? J’ai essayé d’ajouter --fix sans succès.

Cela fonctionne, mais :

  1. seules quelques règles sont automatiquement corrigeables (voir : GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. parmi celles-ci, seules deux font partie du jeu de règles « recommandé » (link-rel-noopener et require-button-type)