Esiste un modo per fare il linting di handlebars?

Stavo cercando un modo per analizzare i file Handlebars in Discourse. Ho trovato un comando che sembra funzionare, ma non apporta modifiche né elenca problemi.

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

Non sono sicuro che dovrebbe funzionare in questa fase.

yarn ember-template-lint <dir> dovrebbe essere il comando corretto.

Grazie. Ma non sembra riportare nulla. Ho provato a eseguirlo su un file danneggiato, ma non visualizza errori né li risolve.

@cvx hai appena implementato questo nei nostri flussi di lavoro dei plugin – c’è qualcosa di specifico che dobbiamo fare per utilizzarlo?

Nessuna magia richiesta :slightly_smiling_face:, ma assicurati di eseguire il comando nella directory principale di Discourse. Mi è capitato già un paio di volte.

Confronta:

# in [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Fatto in 2.57s.
# in [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  error  Utilizzo imprevisto di {{debugger}}.  no-debugger
  4:0  error  L'uso delle triple parentesi graffe non è sicuro  no-triple-curlies
  3:15  error  Indentazione errata per `d-section` che inizia a L1:C0. Si aspettava che `{{/d-section}}` che termina a L3:C15 fosse all'indentazione 0, ma è stato trovato a 1.  block-indentation
  2:4  error  Indentazione errata per `{{outlet}}` che inizia a L2:C4. Si aspettava che `{{outlet}}` fosse all'indentazione 2, ma è stato trovato a 4.  block-indentation
  1:23  error  Devi usare le virgolette doppie nei template  quotes

✖ 5 problemi (5 errori, 0 avvisi)
error Comando non riuscito con codice di uscita 1.

Inoltre, tieni presente che verrà utilizzata la nostra configurazione (.template-lintrc.js), quindi potrebbe non segnalare tutti i problemi previsti, poiché alcune regole sono attualmente disabilitate.


@justin Mi sono appena reso conto che i nostri workflow GitHub Actions per i plugin non condividono attualmente questa configurazione. Dovremmo cambiarlo a un certo punto. :smiley:

Funzionerà in plugins/? Scommetto che è lì che @fzngagan è interessato a utilizzarlo.

Se il plugin si trova nella directory plugins, certo! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  devi usare le virgolette doppie nei template  quotes

Sono abbastanza sicuro di fare la stessa cosa, ma proverò di nuovo e ti farò sapere.

Ember template lint non può risolvere tutto, proprio come eslint, e in realtà Ember template lint può correggere solo poche cose, a differenza di eslint.

Rileverà principalmente errori, ma dovrai correggerli manualmente.

Ecco cosa ho provato.

Ho provato a violare una regola con lo stesso Discourse. Funziona

Ho provato a violare una regola con il plugin discourse-custom-wizard, che si trovava nella directory di Discourse come collegamento simbolico. Non funziona

Ho provato la stessa cosa con il plugin poll, che fa parte del repository di Discourse. Ho anche provato con altri plugin forniti con Discourse. Funziona

Ho provato di nuovo a violare una regola con il plugin discourse-custom-wizard, questa volta copiandolo nella cartella dei plugin di Discourse. Non funziona

Ho provato a violare una regola con il plugin discourse-assign, posizionando la cartella in plugins. Non funziona

Per me:

funziona

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

non funziona

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

E i miei assets dovrebbero essere all’interno di app?

Ah, sì. Il problema è che ember-template-lint tiene automaticamente conto di .gitignore. Di conseguenza, i plugin non inclusi nel bundle vengono ignorati.

Quindi, per eseguire il linting dei template su tutti i plugin:

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

# oppure qualsiasi altra directory, ad esempio un singolo plugin:
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Grazie. Funziona alla perfezione.

Grazie mille! Inoltre, c’è un modo per far sì che corregga automaticamente le cose? Ho provato ad aggiungere --fix, ma senza successo.

Funziona, ma:

  1. solo poche regole sono auto-correggibili (vedi: GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. di queste, solo due fanno parte del set di regole “consigliate” (link-rel-noopener e require-button-type)