Created
January 18, 2012 16:49
-
-
Save joshuacc/1633985 to your computer and use it in GitHub Desktop.
JS Pre-commit hook
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
// Settings | |
"passfail" : false, // Stop on first error. | |
"maxerr" : 100, // Maximum error before stopping. | |
// Predefined globals whom JSHint will ignore. | |
"browser" : true, // Standard browser globals e.g. `window`, `document`. | |
"node" : false, | |
"rhino" : false, | |
"couch" : false, | |
"wsh" : true, // Windows Scripting Host. | |
"jquery" : true, | |
"prototypejs" : false, | |
"mootools" : false, | |
"dojo" : false, | |
"predef" : [ // Custom globals. | |
//"exampleVar", | |
//"anotherCoolGlobal", | |
//"iLoveDouglas" | |
"_" // Allow use of underscore.js | |
], | |
// Development. | |
"debug" : false, // Allow debugger statements e.g. browser breakpoints. | |
"devel" : false, // Allow developments statements e.g. `console.log();`. | |
// ECMAScript 5+. | |
"es5" : false, // Allow ECMAScript 5 syntax. | |
"strict" : false, // Require `use strict` pragma in every file. | |
"globalstrict" : false, // Allow global "use strict" (also enables 'strict'). | |
"esnext" : false, // Allow ES.next specific features such as const and let. | |
// The Good Parts. | |
"asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). | |
"laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. | |
"lastsemic" : false, // Tolerate missing semicolons only when the semicolon is omitted for the last statement in a one-line block. | |
"bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). | |
"boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. | |
"curly" : true, // Require {} for every new block or scope. | |
"eqeqeq" : true, // Require triple equals i.e. `===`. | |
"eqnull" : false, // Tolerate use of `== null`. | |
"evil" : false, // Tolerate use of `eval`. | |
"expr" : false, // Tolerate `ExpressionStatement` as Programs. | |
"forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. | |
"immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` | |
"latedef" : true, // Prohibit variable use before definition. | |
"loopfunc" : false, // Allow functions to be defined within loops. | |
"noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. | |
"regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. | |
"regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. | |
"scripturl" : false, // Tolerate script-targeted URLs. | |
"shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. | |
"supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. | |
"undef" : true, // Require all non-global variables be declared before they are used. | |
"funcscope" : false, // Tolerate declaring variables inside of control structures while accessing them later from the outside. | |
"iterator" : false, // Tolerate the __iterator__ property. This property is not supported by all browsers so use it carefully. | |
"onecase" : false, // Tolerate switches with just one case. | |
"proto" : false, // Tolerate the __proto__ property. This property is deprecated and not supported by all browsers. | |
// Personal styling preferences. | |
"newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. | |
"noempty" : true, // Prohibit use of empty blocks. | |
"nonew" : true, // Prohibit use of constructors for side-effects. | |
"nomen" : false, // Prohibit use of initial or trailing underbars in names. | |
"onevar" : false, // Allow only one `var` statement per function. | |
"plusplus" : false, // Prohibit use of `++` & `--`. | |
"sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. | |
"trailing" : true, // Prohibit trailing whitespaces. | |
"white" : true, // Check against strict whitespace and indentation rules. | |
"indent" : 4 // Specify indentation spacing | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# A pre-commit hook to lint JS files w/ jshint | |
# | |
# Requires node.js and jshint | |
if git rev-parse --verify HEAD >/dev/null 2>&1 | |
then | |
against=HEAD | |
else | |
# Initial commit: diff against an empty tree object | |
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 | |
fi | |
REPO=$(pwd) | |
EXIT_CODE=0 | |
for FILE in `git diff-index --name-only --cached ${against} | egrep '*.js'`; do | |
jshint ${FILE} --config ${REPO}/.git/hooks/jshint-config.json | |
EXIT_CODE=$((${EXIT_CODE} + $?)) | |
done | |
if [[ ${EXIT_CODE} -ne 0 ]]; then | |
echo "" | |
echo "JSHint detected syntax problems with ${EXIT_CODE} file(s)." | |
echo "Commit aborted." | |
fi | |
exit $((${EXIT_CODE})) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment