O Discourse usa o lefthook para ganchos git, e bin/lint como o ponto de entrada principal da CLI para executar as mesmas verificações manualmente.
Se você estiver trabalhando em um clone local, instale os ganchos uma vez:
pnpm install
pnpm lefthook install
Depois disso, os arquivos staged (preparados) serão verificados automaticamente em git commit.
O comando principal: bin/lint
Use bin/lint quando quiser executar os linters configurados do repositório você mesmo, em vez de esperar pelo gancho pre-commit.
Exemplos comuns:
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
O que cada modo faz
bin/lint: executa o lint em todos os arquivos suportados no repositóriobin/lint path/to/file ...: executa o lint apenas nos arquivos fornecidosbin/lint --recent: executa o lint em arquivos alterados nos últimos 50 commits, mais arquivos não rastreadosbin/lint --staged: executa o lint apenas em arquivos stagedbin/lint --unstaged: executa o lint apenas em arquivos unstagedbin/lint --wip: executa o lint em arquivos staged, unstaged e arquivos alterados desdemainbin/lint --fix ...: executa os auto-fixers (corretores automáticos) para os arquivos selecionadosbin/lint --fix: executa todos os auto-fixers disponíveis em todo o repositóriobin/lint --verbose: imprime os comandos subjacentes do lefthook
Quando você passa arquivos explícitos, bin/lint os filtra para tipos de arquivo suportados para lintagem antes de invocar o lefthook.
Arquivos de documentação Markdown não fazem parte atualmente do
bin/lint, então executarbin/lint path/to/doc.mdreportará que não há arquivos correspondentes para serem inspecionados.
O que é inspecionado (linted)
A configuração exata reside em lefthook.yml. No momento da escrita, bin/lint cobre:
Ruby
**/*.{rb,rake,thor}- Scripts Ruby sob
bin/**/* Gemfile
Verificações:
rubocopsyntax_tree(stree check)
Formatação de JavaScript, GJS, CSS e SCSS
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- arquivos de assets de plugins e temas correspondentes
Verificações:
prettier/pprettier
Inspeção de JavaScript e GJS (Linting)
frontend/**/*.{js,gjs}- arquivos JS de plugins e temas correspondentes
Verificações:
eslint
Inspeção de templates GJS (Linting)
frontend/**/*.gjs- arquivos
.gjsde plugins e temas correspondentes
Verificações:
ember-template-lint
Inspeção de SCSS (Linting)
app/assets/stylesheets/**/*.scss- arquivos SCSS de plugins e temas correspondentes
Verificações:
stylelint
Verificações de YAML e localização
**/*.{yaml,yml}excetoconfig/database.yml**/{client,server}.en.yml
Verificações:
yaml-lintscript/i18n_lint.rb
Verificação de tipos
Quando você executa bin/lint sem argumentos de arquivo, o lint de todo o repositório também é executado:
pnpm lint:types
Esta é a verificação estilo Glint/TypeScript para as informações de tipo JavaScript do Discourse.
![]()
bin/lint path/to/filee o gancho pre-commit não executam a verificação completa de tipos. Use apenasbin/lintquando desejar a passagem completa de lint em todo o repositório.
O que pode ser corrigido automaticamente
bin/lint --fix pode corrigir automaticamente muitos problemas, mas não todos.
A correção automática está configurada para:
prettier --writeeslint --fixember-template-lint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
Na prática, isso significa que --fix pode reformatar e reescrever:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Estas verificações não são corrigidas automaticamente por bin/lint --fix:
- Validação de sintaxe YAML
- Inspeção de i18n para
client.en.yml/server.en.yml - Verificação de tipos / Glint
Relação com ganchos git
O gancho pre-commit usa a mesma configuração do lefthook que o bin/lint, mas é executado apenas contra arquivos staged.
Isso significa que:
- um commit pode falhar porque os arquivos staged não passam na inspeção (lintagem)
bin/lint --stagedé o equivalente manual mais próximo do gancho pre-commitbin/lint --fix --stagedé uma boa maneira de reparar exatamente o que você está prestes a confirmar (commit)
Fluxo de trabalho prático
Para o desenvolvimento diário, os comandos mais úteis são:
# Antes de confirmar alguns arquivos alterados
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# Verifica exatamente o que o gancho pre-commit verificará
bin/lint --staged
# Limpa todo o trabalho atual em andamento
bin/lint --fix --wip
# Executa a suíte completa de lint do repositório, incluindo verificações de tipo
bin/lint
Este documento é controlado por versão - sugira alterações no github.