Discourse использует lefthook для git-хуков, а bin/lint — как основную точку входа CLI для ручного запуска тех же проверок.
Если вы работаете в локальном клоне, установите хуки один раз:
pnpm install
pnpm lefthook install
После этого закоммиченные файлы будут автоматически проверяться при выполнении git commit.
Основная команда: bin/lint
Используйте bin/lint, если хотите запустить настроенные линтеры репозитория самостоятельно, не дожидаясь срабатывания pre-commit хука.
Частые примеры:
bin/lint
bin/lint path/to/file.rb path/to/file.gjs
bin/lint --recent
bin/lint --staged
bin/lint --unstaged
bin/lint --wip
bin/lint --fix path/to/file.rb
bin/lint --fix --recent
bin/lint --fix
Что делает каждый режим
bin/lint: проверка всех поддерживаемых файлов в репозиторииbin/lint path/to/file ...: проверка только указанных файловbin/lint --recent: проверка файлов, изменённых в последних 50 коммитах, плюс неотслеживаемые файлыbin/lint --staged: проверка только закоммиченных файловbin/lint --unstaged: проверка только незакоммиченных файловbin/lint --wip: проверка закоммиченных файлов, незакоммиченных файлов и файлов, изменённых с моментаmainbin/lint --fix ...: запуск автоисправлений для выбранных файловbin/lint --fix: запуск всех доступных автоисправлений по всему репозиториюbin/lint --verbose: вывод соответствующих команд lefthook
При передаче явных имён файлов bin/lint фильтрует их по поддерживаемым типам файлов перед вызовом lefthook.
Файлы документации в формате Markdown в настоящее время не входят в
bin/lint, поэтому запускbin/lint path/to/doc.mdсообщит, что нет подходящих файлов для проверки.
Что проверяется
Точная конфигурация находится в lefthook.yml. На момент написания bin/lint охватывает:
Ruby
**/*.{rb,rake,thor}- Ruby-скрипты в
bin/**/* Gemfile
Проверки:
rubocopsyntax_tree(stree check)
Форматирование JavaScript, GJS, CSS и SCSS
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- соответствующие файлы ассетов плагинов и тем
Проверки:
prettier/pprettier
Линтинг JavaScript и GJS
frontend/**/*.{js,gjs}- соответствующие JS-файлы плагинов и тем
Проверки:
eslint(с правиламиtemplate-*плагинаeslint-plugin-ember, покрывающими шаблонную часть файлов.gjs)
Линтинг SCSS
app/assets/stylesheets/**/*.scss- соответствующие SCSS-файлы плагинов и тем
Проверки:
stylelint
Проверки YAML и локализации
**/*.{yaml,yml}, кромеconfig/database.yml**/{client,server}.en.yml
Проверки:
yaml-lintscript/i18n_lint.rb
Проверка типов
При запуске bin/lint без аргументов файлов также выполняется полная проверка репозитория:
pnpm lint:types
Это проверка в стиле Glint/TypeScript для информации о типах JavaScript в Discourse.
![]()
bin/lint path/to/fileи pre-commit хук не выполняют полную проверку типов. Используйте обычную командуbin/lint, если хотите выполнить полную проверку репозитория.
Что может быть автоматически исправлено
bin/lint --fix может автоматически исправить множество проблем, но не все.
Автоисправление настроено для:
prettier --writeeslint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
На практике это означает, что --fix может переформатировать и переписать:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Эти проверки не исправляются автоматически через bin/lint --fix:
- валидация синтаксиса YAML
- линтинг i18n для
client.en.yml/server.en.yml - проверка Glint/типов
Взаимосвязь с git-хуками
Pre-commit хук использует ту же конфигурацию lefthook, что и bin/lint, но работает только с закоммиченными файлами.
Это означает:
- коммит может быть отклонён, если закоммиченные файлы не проходят линтинг
bin/lint --staged— это наиболее близкий ручной аналог pre-commit хукаbin/lint --fix --staged— хороший способ исправить именно то, что вы собираетесь закоммитить
Практический рабочий процесс
Для повседневной разработки наиболее полезны следующие команды:
# Перед коммитом нескольких изменённых файлов
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# Проверить именно то, что проверит pre-commit хук
bin/lint --staged
# Очистить всю текущую работу в процессе
bin/lint --fix --wip
# Запустить полный набор линтеров репозитория, включая проверку типов
bin/lint
Этот документ находится под контролем версий — предлагайте изменения на GitHub.