Конфигурация линтинга

Я заметил значительную разницу в конфигурации линтинга по умолчанию и в том, как она должна работать.

Конфигурация по умолчанию устанавливает пакет eslint-config-discourse как зависимость разработки:

https://www.npmjs.com/package/eslint-config-discourse

Однако, когда я ищу исходный код по адресу https://github.com/discourse/eslint-config-discourse, репозиторий перенаправляет на @discourse/lint-configs; это также пакет в рамках монорепозитория eslint-config-discourse. Судя по включенным тестам, eslint-config-discourse, по-видимому, должен быть оберткой, но, по моему опыту, он работает не так, как должен:

Конфигурация линтинга по умолчанию

  1. Создайте новую тему, используя команду discourse_theme new.
  2. Проверьте сгенерированную конфигурацию линтинга:
    a. .eslintrc
    {
      "extends": "eslint-config-discourse",
      "globals": {
        "settings": "readonly",
        "themePrefix": "readonly"
      }
    }
    
    b. .template-lintrc.js:
    module.exports = {
      plugins: ["ember-template-lint-plugin-discourse"],
      extends: "discourse:recommended",
    };
    
    c. package.json
    {
      "license": "MIT",
      "devDependencies": {
        "eslint-config-discourse": "latest"
      }
    }
    
  3. Запустите Prettier для пакета, и он сообщит об ошибке для файлов *.gjs:
    yarn prettier --check --write "{common,javascripts,desktop,mobile,test,scss}/**/*.{js,gjs,es6,scss}"
    
    Error: No parser could be inferred for file ... .gjs

Настройка @discourse/lint-configs напрямую

https://www.npmjs.com/package/@discourse/lint-configs

  1. Выполните yarn remove -D eslint-config-discourse, чтобы удалить пакет.
  2. Выполните yarn add -D @discourse/lint-configs, чтобы установить его как зависимость разработки.
  3. Следуйте инструкциям для создания файлов конфигурации линтинга:
    a. Замените файл .eslintrc на .eslintrc.cjs
    module.exports = require("@discourse/lint-configs/eslint-theme");
    
    b. Добавьте файл .prettierrc.cjs:
    module.exports = require("@discourse/lint-configs/prettier");
    
    c. Замените файл .template-lintrc.js на .template-lintrc.cjs:
    module.exports = require("@discourse/lint-configs/template-lint");
    
  4. Попробуйте запустить Prettier снова и убедитесь, что он работает без ошибок:
    $ yarn prettier --check --write "{common,javascripts,desktop,mobile,test,scss}/**/*.{js,gjs,es6,scss}"
    Checking formatting...
    All matched files use Prettier code style!
    ✨  Done in 0.46s.
    

Таким образом, могу ли я предположить, что CLI discourse_theme устарел, и в дальнейшем мне следует использовать вариант @discourse/lint-configs в моих проектах?

Нет. Доверяйте этому. Отправьте изменения в свой репозиторий и посмотрите на команды линтинга, когда ваши проверки не пройдут.

Привет @pfaffman,

Я провёл небольшой тест в своём репозитории. Хотя оба варианта успешно завершаются, конфигурация по умолчанию выдаёт ошибку для файла GJS, и он не сканируется.

При втором подходе файл GJS распознаётся и успешно проходит линтинг.

Пожалуйста, сравните действия ветки main с действиями ветки linting: во второй ветке я добавил только конфигурацию второго варианта:

main:
https://github.com/gormus/discourse-filtered-topic-lists/actions/runs/10325377606/job/28586838134?pr=1#step:6:19

linting:
https://github.com/gormus/discourse-filtered-topic-lists/actions/runs/10333473217/job/28605865585?pr=3#step:6:17

Это не должно быть так. Последняя версия CLI для discourse_theme клонирует GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes · GitHub и адаптирует его на основе ваших входных данных. При этом используется @discourse/lint-configs.

Инструкция по обновлению здесь:

Спасибо, это помогло. Теперь я могу получить версию (раньше версия не отображалась):

discourse_theme --version
2.1.2

…а также обновлённый список команд:

discourse_theme --help
Использование: discourse_theme КОМАНДА [ДПР] [ОПЦИИ]

Команды:
  new ДПР               - Создаёт новую тему в указанной директории.
  download ДПР          - Скачивает тему с сервера и сохраняет её в указанной директории.
  upload ДПР            - Загружает тему из указанной директории в Discourse.
  watch ДПР             - Отслеживает изменения в указанной директории и синхронизирует их с Discourse.
  rspec ДПР [ОПЦИИ]     - Запускает тесты RSpec в указанной директории. Тесты можно запускать через локальный репозиторий Discourse или контейнер Docker.
    --headful           - Запускает системные тесты RSpec в режиме с графическим интерфейсом. Применяется к обоим режимам.

    Если указанная директория настроена для работы в контейнере Docker, поддерживаются дополнительные опции.
    --rebuild           - Принудительно пересобирает контейнер Docker.
    --verbose           - Запускает команду подготовки контейнера Docker в подробном режиме.

Глобальные опции:
  --reset               - Сбрасывает конфигурацию для указанной директории.

И, конечно же, сгенерированный шаблон стал новее. :smiley: