Lint JavaScript on Commit
My team has been working a lot to improve our code quality and to introduce best practices between us. One way we’ve done this is through the use of JSHint. Because we use different editors it can be difficult to make sure that everyone’s environment is configured to analyze code the same way, but git is a common tool between us. Here is a pre-commit hook, which checks all .js files included in the commit against your JSHint configuration. If it doesn’t pass, the errors are printed to the screen and the commit is cancelled.
#!/bin/sh
# JSHint Pre-Commit
# Place this in your .git/hooks/pre-commit directory and rename to `pre-commit`
# expects jshint to be installed in your projects node_modules directory
EXIT_CODE=0
COLOR_RED="\x1B[31m"
COLOR_GREEN="\x1B[32m"
COLOR_NONE="\x1B[0m"
repo=$( git rev-parse --show-toplevel )
jshint=${repo}/node_modules/jshint/bin/hint
for file in $( exec git diff-index --cached --name-only HEAD ); do
if [[ $file == *".js"* ]]; then
status=$( exec git status --porcelain $file )
if [[ $status != D* ]]; then
# ${jshint} ${repo}/${file} >/dev/null 2>&1
${jshint} ${repo}/${file}
EXIT_CODE=$((${EXIT_CODE} + $?))
fi
fi
done
echo ""
if [[ ${EXIT_CODE} -ne 0 ]]; then
echo "${COLOR_RED}✘ JSHINT detected syntax problems.${COLOR_NONE}"
else
echo "${COLOR_GREEN}✔ JSHINT detected no errors.${COLOR_NONE}"
fi
exit $((${EXIT_CODE}))
Nick Nisi
A passionate TypeScript enthusiast, podcast host, and dedicated community builder.
Follow me on Bluesky.