Discourse는 git 훅에 lefthook을 사용하며, 동일한 검사를 수동으로 실행하기 위한 주요 CLI 진입점으로 bin/lint를 사용합니다.
로컬 클론에서 작업하고 있다면 훅을 한 번만 설치하십시오:
pnpm install
pnpm lefthook install
이후에는 git commit 시 스테이지된 파일이 자동으로 검사됩니다.
주요 명령어: bin/lint
pre-commit 훅을 기다리지 않고 저장소의 구성된 린터(linter)를 직접 실행하려면 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개 커밋에서 변경된 파일 및 추적되지 않는(untracked) 파일을 린트합니다bin/lint --staged: 스테이지된 파일만 린트합니다bin/lint --unstaged: 스테이지되지 않은(unstaged) 파일만 린트합니다bin/lint --wip: 스테이지된 파일, 스테이지되지 않은 파일, 그리고main이후 변경된 파일을 린트합니다bin/lint --fix ...: 선택된 파일에 대해 자동 수정(auto-fixer)을 실행합니다bin/lint --fix: 저장소 전체에서 사용 가능한 모든 자동 수정기를 실행합니다bin/lint --verbose: 기반이 되는 lefthook 명령어를 출력합니다
명시적으로 파일을 전달하면, bin/lint는 lefthook을 호출하기 전에 지원되는 린팅 가능 파일 유형으로 필터링합니다.
마크다운 파일은
docs/developer-guides/하위에서만 린트됩니다. 다른 마크다운 파일에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 및 로케일(locale) 검사
config/database.yml을 제외한**/*.{yaml,yml}**/{client,server}.en.yml
검사 항목:
yaml-lintscript/i18n_lint.rb
타입 검사
파일 인자 없이 bin/lint를 실행하면 전체 저장소 린트와 함께 다음도 실행됩니다:
pnpm lint:types
이것은 Discourse의 타입 정보를 위한 Glint/TypeScript 스타일의 검사입니다. TypeScript의 strict 모드에서 실행되며 게시용 선언(declarations)도 생성합니다.
![]()
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 훅과 가장 가까운 수동 등가 명령입니다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에서 가능합니다.