문제

나는 수은 또는 git repo에 커밋되기 전에 jslint를 실행하고 싶습니다.

나는 이것을 개발자 (주로 나)에 미리 실행하는 것을 기억하는 대신에 설정된 자동 단계로 원한다. 일반적으로 개발 중에 JSLINT를 실행하지만 REPO에 커밋되기 전에 JSLINT를 전달하는 JS 파일에 계약을 지정하려고합니다.

Mercurial의 경우 이 페이지 Precommit 구문을 철자하지만 사용 가능한 것으로 보이는 유일한 변수는 Commit과 관련된 Parent1 및 Parent2 Changeet ID입니다. 내가 정말로 원하는 것은 커밋과 관련된 파일 이름 목록이므로 .js 파일을 선택하고 jslint를 실행할 수 있습니다.

git에 대한 비슷한 문제, 사전 커밋 스크립트의 일부로 사용 가능한 기본 정보는 제한적으로 보입니다.

작동하는 것은 Precommit 스크립트의 일부로 HG 상태/git 상태를 호출하는 것입니다. JS 파일을 찾기 위해 출력 한 다음 작업을 수행합니다. 그래도 더 쉬운 것을 기대하고 있었고, 사전 커밋 후크의 일부로 상태를 호출하는 것이 올바른 정보를 반영하는지 확실하지 않습니다. 예를 들어 GIT에서 변경 파일이 아직 추가되지 않았지만 GIT 커밋 용도 -A는 파일이 Commit 세트의 일부로 GIT 상태 출력의 올바른 섹션에 표시됩니까?

업데이트: 나는 무언가가 작동하는데 여기에 볼 수 있습니다. http://github.com/jrburke/dvcs_jslint/

도움이 되었습니까?

해결책

git의 경우 .git/hooks 디렉토리에 예가 있습니다. JSLINT의 파일 이름 만 있으면 사용할 수 있습니다. git diff --name-only, 내 예에서는 현재와 다른 파일의 이름을 나열합니다. HEAD.

다른 팁

다음은 @bitbieger의 git 솔루션의 변형입니다. node.js 그리고 현지 사본 노드 -jslint (즉, 필요합니다 npm install jslint 루트 리포지토리 디렉토리에서).

또한 스크립트 :

  • 모든 .html 및 .json 파일과 .js를 통해 jslint를 실행합니다.
  • 추가, 복사 또는 수정 된 파일보다 JSLINT 만 실행합니다. 이렇게하면 JSLINT가 이름이 변경되거나 삭제 된 파일의 오류가 발생하지 않습니다.
  • 사용자가 볼 수 있도록 JSLINT 오류를 복제합니다
  • 사용 --indent 4 --white true 소스 코드 일관성을 보장하기위한 JSLINT 옵션

작업을 수행하려면 다음을 복사하십시오 .git/hooks/pre-commit 그리고 잊지 마세요 chmod +x .git/hooks/pre-commit

# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done

Spidermonkey와 JSLINT

for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top