Existe uma maneira de fazer lint do handlebars?

Estava procurando uma maneira de fazer lint em arquivos Handlebars no Discourse. Encontrei um comando que parece ser executado, mas não faz nenhuma alteração nem lista problemas.

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

Não tenho certeza se deveria funcionar mesmo neste momento.

yarn ember-template-lint <dir> deve ser o comando correto.

Obrigado. Mas parece que não retorna nada. Tentei executá-lo em um arquivo corrompido, mas ele não exibe erros nem os corrige.

@cvx você acabou de implementar isso em nossos fluxos de trabalho de plugin — há algo especial que precisamos fazer para usar isso?

Nenhuma mágica necessária :slightly_smiling_face:, mas certifique-se de executar o comando no diretório raiz do Discourse. Isso já me pegou algumas vezes.

Compare:

# em [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Concluído em 2,57s.
# em [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  erro  Uso inesperado de {{debugger}}.  no-debugger
  4:0  erro  Uso de chaves triplas é inseguro  no-triple-curlies
  3:15  erro  Indentação incorreta para `d-section` começando em L1:C0. Esperado que `{{/d-section}}` terminando em L3:C15 estivesse com indentação de 0, mas foi encontrada em 1.  block-indentation
  2:4  erro  Indentação incorreta para `{{outlet}}` começando em L2:C4. Esperado que `{{outlet}}` estivesse com indentação de 2, mas foi encontrada em 4.  block-indentation
  1:23  erro  Você deve usar aspas duplas nos templates  quotes

✖ 5 problemas (5 erros, 0 avisos)
erro: Comando falhou com código de saída 1.

Além disso, lembre-se de que ele usará nossa configuração (.template-lintrc.js), então pode não relatar todos os problemas esperados, pois algumas regras estão atualmente desabilitadas.


@justin, acabei de perceber que nossos workflows do GitHub Actions para plugins atualmente não compartilham essa configuração. Deveríamos mudar isso em algum momento. :smiley:

Isso vai rodar em plugins/? Aposto que é onde @fzngagan tem interesse em usar isso.

Se o plugin estiver localizado no diretório plugins, com certeza! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  você deve usar aspas duplas nos templates  quotes

Tenho quase certeza de que estou fazendo a mesma coisa, mas vou tentar novamente e te aviso.

O Ember template lint não consegue corrigir tudo, assim como o eslint, e na verdade o Ember template lint só consegue corrigir algumas coisas, diferentemente do eslint.

Ele principalmente relata erros, mas você precisa corrigi-los manualmente.

Aqui está o que eu tentei.

Tentei quebrar uma regra com o próprio Discourse. Funciona

Tentei quebrar uma regra com o plugin discourse-custom-wizard, que estava no diretório do Discourse como um link simbólico. Não funciona

Tentei o mesmo com o plugin poll, que faz parte do repositório do Discourse. Também tentei com outros plugins que vêm junto com o Discourse. Funciona

Tentei quebrar uma regra com o plugin discourse-custom-wizard novamente, desta vez copiando-o para a pasta de plugins do Discourse. Não funciona

Tentei quebrar uma regra com o plugin discourse-assign, colocando a pasta em plugins. Não funciona

Para mim:

funciona

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

não funciona

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

E meu assets deve estar dentro de app?

Ah, sim. O problema é que o ember-template-lint considera automaticamente o .gitignore. E plugins não empacotados são ignorados.

Portanto, para executar a verificação de lint em todos os plugins:

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

# ou qualquer outro diretório, por exemplo, um único plugin:
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Obrigado. Funciona perfeitamente.

Obrigado por isso! Além disso, existe alguma maneira de fazer com que isso corrija as coisas automaticamente? Tentei adicionar --fix, mas sem sucesso.

Funciona, mas:

  1. existem apenas algumas regras que podem ser corrigidas automaticamente (veja: GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. dessas, apenas duas estão no conjunto de regras “recomendadas” (link-rel-noopener e require-button-type)