# ¿Hay alguna forma de hacer linting a handlebars?

**URL:** <https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753>\
**Category:** Development\
**Created:** [15 Febrero, 2021 08:35 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753 "2021-02-15T08:35:22Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [15 Febrero, 2021 08:35 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/1 "2021-02-15T08:35:22Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)\
**Post date:** [15 Febrero, 2021 14:56 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/2 "2021-02-15T14:56:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [16 Febrero, 2021 07:14 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/3 "2021-02-16T07:14:33Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)\
**Post date:** [16 Febrero, 2021 17:40 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/4 "2021-02-16T17:40:21Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![cvx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cvx/32/152146_2.png) [@cvx](https://meta.discourse.org/u/cvx)\
**Post date:** [16 Febrero, 2021 19:28 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/5 "2021-02-16T19:28:09Z")

</div>

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

Compara:

```bash
# en [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨ Listo en 2.57s.

```

```bash
# 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. 😃

---

<div class="post-metadata">

**Author:** ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)\
**Post date:** [16 Febrero, 2021 19:30 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/6 "2021-02-16T19:30:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![cvx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cvx/32/152146_2.png) [@cvx](https://meta.discourse.org/u/cvx)\
**Post date:** [16 Febrero, 2021 19:35 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/7 "2021-02-16T19:35:12Z")

</div>

Si el plugin está ubicado en el directorio `plugins`, ¡por supuesto! 😃

```bash
$ 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

```

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [17 Febrero, 2021 05:57 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/8 "2021-02-17T05:57:45Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)\
**Post date:** [17 Febrero, 2021 06:39 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/9 "2021-02-17T06:39:16Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [17 Febrero, 2021 14:01 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/10 "2021-02-17T14:01:19Z")

</div>

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**

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [17 Febrero, 2021 16:44 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/11 "2021-02-17T16:44:36Z")

</div>

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`?

---

<div class="post-metadata">

**Author:** ![cvx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cvx/32/152146_2.png) [@cvx](https://meta.discourse.org/u/cvx)\
**Post date:** [18 Febrero, 2021 10:29 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/12 "2021-02-18T10:29:13Z")

</div>

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:

```bash
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

```

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [18 Febrero, 2021 10:44 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/13 "2021-02-18T10:44:05Z")

</div>

Gracias. Funciona como un encanto.

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [18 Febrero, 2021 17:57 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/14 "2021-02-18T17:57:24Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![cvx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cvx/32/152146_2.png) [@cvx](https://meta.discourse.org/u/cvx)\
**Post date:** [18 Febrero, 2021 18:46 UTC](https://meta.discourse.org/t/is-there-a-way-to-lint-handlebars/179753/15 "2021-02-18T18:46:58Z")

</div>

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](https://github.com/ember-template-lint/ember-template-lint#rules))
2. De esas, solo dos están en el conjunto de reglas “recomendadas” ([link-rel-noopener](https://github.com/ember-template-lint/ember-template-lint/blob/master/docs/rule/link-rel-noopener.md) y [require-button-type](https://github.com/ember-template-lint/ember-template-lint/blob/master/docs/rule/require-button-type.md))
