Discourse는 git 훅에 lefthook을 사용하며, 동일한 검사를 수동으로 실행하기 위한 주요 CLI 진입점으로 bin/lint를 사용합니다.
로컬 클론에서 작업 중이라면 훅을 한 번만 설치하십시오:
pnpm install
pnpm lefthook install
이후에는 git commit 시 스테이징된 파일이 자동으로 검사됩니다.
주요 명령어: bin/lint
pre-commit 훅을 기다리는 대신 저장소의 설정된 린터를 직접 실행하려면 bin/lint를 사용하십시오.
일반적인 사용 예:
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: 스테이징된 파일, 스테이징되지 않은 파일, 그리고main이후 변경된 파일을 린트합니다.bin/lint --fix ...: 선택된 파일에 대해 자동 수정 도구를 실행합니다.bin/lint --fix: 저장소 전체에서 사용 가능한 모든 자동 수정 도구를 실행합니다.bin/lint --verbose: 기반이 되는 lefthook 명령어를 출력합니다.
명시적으로 파일을 전달하면 bin/lint는 lefthook을 호출하기 전에 지원되는 린트 가능한 파일 유형으로 필터링합니다.
마크다운 문서 파일은 현재
bin/lint의 일부가 아니므로,bin/lint path/to/doc.md를 실행하면 린트할 파일이 없다는 메시지가 표시됩니다.
린트 대상
정확한 구성은 lefthook.yml에 있습니다. 작성 시점에 bin/lint는 다음 항목을 포함합니다:
Ruby
**/*.{rb,rake,thor}bin/**/*하위의 Ruby 스크립트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(.gjs파일의 템플릿 부분을 다루는eslint-plugin-ember의template-*규칙 포함)
SCSS 린팅
app/assets/stylesheets/**/*.scss- 매칭되는 플러그인 및 테마 SCSS 파일
검사 항목:
stylelint
YAML 및 로케일 검사
config/database.yml을 제외한**/*.{yaml,yml}**/{client,server}.en.yml
검사 항목:
yaml-lintscript/i18n_lint.rb
타입 검사
파일 인자 없이 bin/lint를 실행하면 전체 저장소 린트와 함께 다음이 실행됩니다:
pnpm lint:types
이는 Discourse의 JavaScript 타입 정보를 위한 Glint/TypeScript 스타일의 검사입니다.
![]()
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 구문 검증
client.en.yml/server.en.yml에 대한 i18n 린팅- Glint/타입 검사
git 훅과의 관계
pre-commit 훅은 bin/lint와 동일한 lefthook 구성을 사용하지만, 스테이징된 파일에 대해서만 실행됩니다.
즉:
- 스테이징된 파일이 린팅을 통과하지 못하면 커밋이 실패할 수 있습니다.
bin/lint --staged는 pre-commit 훅과 가장 유사한 수동 equivalent입니다.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에서 제안하십시오.