Существует ли способ линтить Handlebars?

Я искал способ проверки файлов Handlebars в Discourse. Я нашел команду, которая, кажется, выполняется, но не вносит никаких изменений и не выводит список проблем.

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

Не уверен, что она вообще должна работать на данном этапе.

Правильной командой должно быть yarn ember-template-lint <dir>.

Спасибо. Но, похоже, ничего не возвращается. Я попытался запустить это на повреждённом файле, но ошибки не отображаются и не исправляются.

@cvx вы только что реализовали это в наших рабочих процессах плагинов — нужно ли нам что-то особенное сделать, чтобы использовать это?

Магия не требуется :slightly_smiling_face:, но убедитесь, что вы запускаете команду в корневой директории Discourse. Я уже несколько раз попадался на этом.

Сравните:

# в [discourse]/app/assets/javascripts
$ yarn ember-template-lint .
✨  Выполнено за 2.57с.
# в [discourse]
$ yarn ember-template-lint app/assets/javascripts
app/assets/javascripts/discourse/app/templates/tags.hbs
  4:0  error  Unexpected {{debugger}} usage.  no-debugger
  4:0  error  Usage of triple curly brackets is unsafe  no-triple-curlies
  3:15  error  Incorrect indentation for `d-section` beginning at L1:C0. Expected `{{/d-section}}` ending at L3:C15 to be at an indentation of 0 but was found at 1.  block-indentation
  2:4  error  Incorrect indentation for `{{outlet}}` beginning at L2:C4. Expected `{{outlet}}` to be at an indentation of 2 but was found at 4.  block-indentation
  1:23  error  you must use double quotes in templates  quotes

✖ 5 проблем (5 ошибок, 0 предупреждений)
error Команда завершилась с кодом выхода 1.

Также имейте в виду, что будет использоваться наш конфиг (.template-lintrc.js), поэтому он может не сообщать обо всех ожидаемых проблемах, так как некоторые правила в настоящее время отключены.


@justin Я только что понял, что в наших рабочих процессах GitHub Actions для плагинов этот конфиг сейчас не используется. Нам стоит это изменить в ближайшее время. :smiley:

Будет ли это работать в plugins/? Я ставлю на то, что именно там @fzngagan планирует это использовать.

Если плагин находится в директории plugins, конечно! :smiley:

$ yarn ember-template-lint plugins
plugins/poll/assets/javascripts/discourse/templates/modal/poll-breakdown.hbs
  1:22  error  you must use double quotes in templates  quotes

Я почти уверен, что делаю то же самое, но попробую ещё раз и дам вам знать.

Ember template lint не может исправить всё, как и eslint. Более того, в отличие от eslint, ember template lint способен исправить лишь несколько вещей.

Он в основном сообщает об ошибках, которые вам придётся исправлять вручную.

Вот что я попробовал.

Я попытался нарушить правило с помощью самого Discourse. Работает

Я попытался нарушить правило с помощью плагина discourse-custom-wizard, который был в директории Discourse в виде символической ссылки. Не работает

Я попробовал то же самое с плагином poll, который является частью репозитория Discourse. Также я попробовал это с другими плагинами, которые поставляются вместе с Discourse. Работает

Я снова попытался нарушить правило с помощью плагина discourse-custom-wizard, на этот раз скопировав его в папку плагинов Discourse. Не работает

Я попытался нарушить правило с помощью плагина discourse-assign, разместив папку в директории plugins. Не работает

Для меня:

работает

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

не работает

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

И должен ли мой assets находиться внутри app?

Ах, да. Проблема в том, что ember-template-lint автоматически учитывает .gitignore. При этом unbundled-плагины игнорируются.

Чтобы запустить линтинг шаблонов для всех плагинов:

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

# или любую другую директорию, например, отдельный плагин:
yarn ember-template-lint --no-ignore-pattern plugins/discourse-calendar

Спасибо. Работает как по маслу.

Спасибо! Также есть ли способ заставить его автоматически исправлять проблемы? Я пробовал добавить --fix, но безрезультатно.

Это работает, однако:

  1. существует лишь несколько правил, которые можно автоматически исправить (см.: GitHub - ember-template-lint/ember-template-lint: Linter for Ember or Handlebars templates · GitHub)
  2. из них только два входят в набор «рекомендуемых» правил (link-rel-noopener и require-button-type)