| 1 | #!/bin/bash |
| 2 | # |
| 3 | # Usage: |
| 4 | # ./lint.sh [file.js] |
| 5 | # |
| 6 | # The zero-argument form lints everything. |
| 7 | |
| 8 | # See jshint/build/jshint-rhino.js for documentation on these parameters. |
| 9 | # devel defines logging globals (i.e. "console.log") |
| 10 | # browser defines standard web browser globals (i.e. "document") |
| 11 | # shadow disables warnings on multiple var definitions in one scope (i.e. two |
| 12 | # loops with "var i") |
| 13 | jsc_opts='maxerr:10000,devel:true,browser:true,shadow:true' |
| 14 | rhino_opts='maxerr=10000,devel=true,browser=true,shadow=true' |
| 15 | |
| 16 | if [ $# -gt 1 ]; then |
| 17 | echo "Usage: $0 [file.js]" |
| 18 | exit 1 |
| 19 | fi |
| 20 | |
| 21 | if [ $# -eq 0 ]; then |
| 22 | files=$(ls dygraph*.js plugins/*.js | grep -v combined | grep -v dev.js| grep -v externs) |
| 23 | else |
| 24 | files=$1 |
| 25 | fi |
| 26 | |
| 27 | jshint_opts="shadow=false" |
| 28 | |
| 29 | if [ -e /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc ]; then |
| 30 | # use JSC (Safari/JavaScriptCore) to run JSHint -- much faster than Rhino. |
| 31 | echo 'Running JSHint w/ JavaScriptCore (jsc)...' |
| 32 | for file in $files; do |
| 33 | ./jshint/env/jsc.sh $file $jsc_opts |
| 34 | done |
| 35 | else |
| 36 | # fall back to Rhino. |
| 37 | echo 'Running JSHint w/ Rhino...' |
| 38 | |
| 39 | for FILE in $files; do |
| 40 | LINT_RESULT=$(java -jar ./jsdoc-toolkit/java/classes/js.jar ./jshint/build/jshint-rhino.js $rhino_opts $FILE) |
| 41 | ERRORS=$(echo ${LINT_RESULT} | egrep [^\s] -c) |
| 42 | if [[ ${ERRORS} -ne 0 ]]; then |
| 43 | echo "[jshint] Error(s) in ${FILE}:" |
| 44 | printf "%s\n" "${LINT_RESULT}" |
| 45 | else |
| 46 | echo "[jshint] ${FILE} passed!" |
| 47 | fi |
| 48 | done |
| 49 | fi |