Discourse utilizza lefthook per gli hook di git e bin/lint come punto di ingresso principale della CLI per eseguire manualmente gli stessi controlli.
Se stai lavorando su una copia locale, installa gli hook una sola volta:
pnpm install
pnpm lefthook install
Da quel momento, i file in staging verranno controllati automaticamente al comando git commit.
Il comando principale: bin/lint
Usa bin/lint quando vuoi eseguire manualmente i linter configurati nel repository invece di attendere l’hook pre-commit.
Esempi comuni:
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
Cosa fa ciascuna modalità
bin/lint: esegue il lint su tutti i file supportati nel repositorybin/lint path/to/file ...: esegue il lint solo sui file specificatibin/lint --recent: esegue il lint sui file modificati negli ultimi 50 commit, più i file non tracciatibin/lint --staged: esegue il lint solo sui file in stagingbin/lint --unstaged: esegue il lint solo sui file non in stagingbin/lint --wip: esegue il lint sui file in staging, non in staging e modificati damainbin/lint --fix ...: esegue gli auto-fix sui file selezionatibin/lint --fix: esegue tutti gli auto-fix disponibili nell’intero repositorybin/lint --verbose: stampa i comandi sottostanti di lefthook
Quando passi file espliciti, bin/lint li filtra per includere solo i tipi di file supportati prima di invocare lefthook.
I file di documentazione Markdown non sono attualmente inclusi in
bin/lint, quindi eseguirebin/lint path/to/doc.mdrestituirà un messaggio che indica che non ci sono file corrispondenti da sottoporre a lint.
Cosa viene sottoposto a lint
La configurazione esatta si trova in lefthook.yml. Al momento della stesura, bin/lint copre:
Ruby
**/*.{rb,rake,thor}- Script Ruby sotto
bin/**/* Gemfile
Controlli:
rubocopsyntax_tree(stree check)
Formattazione JavaScript, GJS, CSS e SCSS
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- File asset corrispondenti di plugin e temi
Controlli:
prettier/pprettier
Linting di JavaScript e GJS
frontend/**/*.{js,gjs}- File JS corrispondenti di plugin e temi
Controlli:
eslint(con le regoletemplate-*dieslint-plugin-emberche coprono la parte di template dei file.gjs)
Linting di SCSS
app/assets/stylesheets/**/*.scss- File SCSS corrispondenti di plugin e temi
Controlli:
stylelint
Controlli YAML e locale
**/*.{yaml,yml}tranneconfig/database.yml**/{client,server}.en.yml
Controlli:
yaml-lintscript/i18n_lint.rb
Controllo dei tipi
Quando esegui bin/lint senza argomenti di file, il lint completo del repository esegue anche:
pnpm lint:types
Questo è il controllo stile Glint/TypeScript per le informazioni sui tipi JavaScript di Discourse.
![]()
bin/lint path/to/filee l’hook pre-commit non eseguono il controllo completo dei tipi. Usabin/lintsenza argomenti quando vuoi eseguire il lint completo su tutto il repository.
Cosa può essere corretto automaticamente
bin/lint --fix può correggere automaticamente molti problemi, ma non tutti.
L’auto-correzione è configurata per:
prettier --writeeslint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
In pratica, questo significa che --fix può riformattare e riscrivere:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Questi controlli non vengono corretti automaticamente da bin/lint --fix:
- Validazione della sintassi YAML
- Linting i18n per
client.en.yml/server.en.yml - Controllo Glint/di tipo
Relazione con gli hook git
L’hook pre-commit utilizza la stessa configurazione di lefthook di bin/lint, ma viene eseguito solo sui file in staging.
Questo significa che:
- un commit può fallire perché i file in staging non superano il linting
bin/lint --stagedè l’equivalente manuale più vicino all’hook pre-commitbin/lint --fix --stagedè un buon modo per riparare esattamente ciò che stai per commitare
Flusso di lavoro pratico
Per lo sviluppo quotidiano, questi sono i comandi più utili:
# Prima di commitare alcuni file modificati
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# Controlla esattamente cosa controllerà l'hook pre-commit
bin/lint --staged
# Pulisci tutto il lavoro in corso
bin/lint --fix --wip
# Esegui la suite completa di lint del repository, inclusi i controlli dei tipi
bin/lint
Questo documento è sottoposto a controllo versione: suggerisci modifiche su github.