Discourse использует lefthook для git-хуков, а bin/lint — как основную CLI-точку входа для ручного запуска тех же проверок.
Если вы работаете в локальном клоне, установите хуки один раз:
pnpm install
pnpm lefthook install
После этого файлы в индексе (staged files) будут автоматически проверяться при выполнении 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: проверяет только файлы в индексе (staged)bin/lint --unstaged: проверяет только файлы вне индекса (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, но работает только с файлами в индексе (staged).
Это означает:
- коммит может завершиться ошибкой, если файлы в индексе не проходят линтинг
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.