I want to run JSLint before a commit into either a Mercurial or Git repo is done.
I want this as an automatic step that is set up instead of relying on the developer (ma
For git, there are examples in the .git/hooks directory. If you just need the file names for JSLint, you could use git diff --name-only
, which in my example will list the names of the files that differ from the current HEAD
.
JSLint with SpiderMonkey
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
The following is a variation of @Bitbieger's Git solution that works with Node.js and a local copy of node-jslint (i.e. you need to npm install jslint
in your root repository directory).
Additionally the script:
--indent 4 --white true
jslint options to ensure source code consistencyTo get it to work copy the following to .git/hooks/pre-commit
and don't forget to 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