¿Hay alguna forma de hacer linting a handlebars?

Estaba buscando una forma de analizar archivos Handlebars en Discourse. Encontré un comando que parece ejecutarse, pero no realiza cambios ni lista problemas.

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

No estoy seguro de si debería funcionar en este momento.

yarn ember-template-lint <dir> debería ser el comando correcto.

Gracias. Pero parece que no devuelve ninguna información. Intenté ejecutarlo en un archivo corrupto, pero no muestra errores ni los corrige.

@cvx acabas de implementar esto en nuestros flujos de trabajo de complementos. ¿Hay algo especial que debamos hacer para usarlo?

No se requiere magia :slightly_smiling_face:, pero asegúrate de ejecutar el comando en el directorio raíz de Discourse. Esto me ha pasado varias veces ya.

Compara:

# en [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Listo en 2.57s.
# en [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  error  Uso inesperado de {{debugger}}.  no-debugger
  4:0  error  El uso de llaves triples es inseguro  no-triple-curlies
  3:15  error  Indentación incorrecta para `d-section` que comienza en L1:C0. Se esperaba que `{{/d-section}}` que termina en L3:C15 estuviera con una indentación de 0, pero se encontró en 1.  block-indentation
  2:4  error  Indentación incorrecta para `{{outlet}}` que comienza en L2:C4. Se esperaba que `{{outlet}}` estuviera con una indentación de 2, pero se encontró en 4.  block-indentation
  1:23  error  Debes usar comillas dobles en las plantillas  quotes

✖ 5 problemas (5 errores, 0 advertencias)
error El comando falló con código de salida 1.

Además, ten en cuenta que usará nuestra configuración (.template-lintrc.js), por lo que es posible que no informe todos los problemas esperados, ya que algunas reglas están actualmente deshabilitadas.


@justin Acabo de darme cuenta de que nuestros flujos de trabajo de GitHub Actions para plugins actualmente no comparten esta configuración. Deberíamos cambiar eso en algún momento. :smiley:

¿Se ejecutará esto en plugins/? Apuesto a que es ahí donde @fzngagan está interesado en usarlo.

Si el plugin está ubicado en el directorio plugins, ¡por supuesto! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  debes usar comillas dobles en las plantillas  quotes

Estoy bastante seguro de que estoy haciendo lo mismo, pero lo intentaré de nuevo y te aviso.

Ember template lint no puede arreglarlo todo, al igual que eslint, y de hecho ember template lint solo puede corregir algunas cosas, a diferencia de eslint.

Principalmente reportará errores, pero tendrás que corregirlos manualmente.

Esto es lo que he intentado.

Intenté romper una regla con el propio Discourse. Funciona

Intenté romper una regla con el plugin discourse-custom-wizard, que estaba en el directorio de Discourse como un enlace simbólico. No funciona

Probé lo mismo con el plugin poll, que forma parte del repositorio de Discourse. También lo probé con otros plugins que vienen con Discourse. Funciona

Intenté romper una regla con el plugin discourse-custom-wizard nuevamente, esta vez copiándolo a la carpeta de plugins de Discourse. No funciona

Intenté romper una regla con el plugin discourse-assign colocando la carpeta en plugins. No funciona

Para mí:

funciona

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

no funciona

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

¿Y debería estar assets dentro de app?

Ah, sí. El problema es que ember-template-lint tiene en cuenta automáticamente el archivo .gitignore. Y los plugins que no están empaquetados se ignoran.

Por lo tanto, para ejecutar el análisis de plantillas en todos los plugins:

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

# o cualquier otro directorio, por ejemplo, un solo plugin:
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Gracias. Funciona como un encanto.

¡Gracias por eso! Además, ¿hay alguna manera de que lo arregle automáticamente? Intenté añadir --fix sin éxito.

Funciona, pero:

  1. Solo hay un puñado de reglas que se pueden corregir automáticamente (ver: GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. De esas, solo dos están en el conjunto de reglas “recomendadas” (link-rel-noopener y require-button-type)