Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Pre-commit hook to check for Javascript using ESLint
#!/bin/sh
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".jsx\{0,1\}$")
if [[ "$STAGED_FILES" = "" ]]; then
exit 0
fi
PASS=true
echo "\nValidating Javascript:\n"
# Check for eslint
which eslint &> /dev/null
if [[ "$?" == 1 ]]; then
echo "\t\033[41mPlease install ESlint\033[0m"
exit 1
fi
for FILE in $STAGED_FILES
do
eslint "$FILE"
if [[ "$?" == 0 ]]; then
echo "\t\033[32mESLint Passed: $FILE\033[0m"
else
echo "\t\033[41mESLint Failed: $FILE\033[0m"
PASS=false
fi
done
echo "\nJavascript validation completed!\n"
if ! $PASS; then
echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass ESLint but do not. Please fix the ESLint errors and try again.\n"
exit 1
else
echo "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
exit $?
@gajus

This comment has been minimized.

Copy link

commented May 14, 2016

This does not work if eslint is installed locally, which it will almost always will be. I cannot think of a clean solution, though.

@iamjochem

This comment has been minimized.

Copy link

commented Jun 29, 2016

@gajus, I had the same though. figured something out:

ESLINT="$(git rev-parse --show-toplevel)/node_modules/.bin/eslint"

check it's installed like so

if [[ ! -x "$ESLINT" ]]; then
  echo "\t\033[41mPlease install ESlint\033[0m (npm i --save --save-exact --dev eslint)"
  exit 1
fi

then use it in the for loop like so:

    "$ESLINT" "$FILE"
@mmottau

This comment has been minimized.

Copy link

commented Jul 18, 2016

@iamjochem, just wanted to send a quick note of thanks. Your post was very helpful.

@eXigentCoder

This comment has been minimized.

Copy link

commented Sep 15, 2016

If you are working on a project where you check in the node_modules folder, and you would like to exclude these files, you can change the line 3 to:
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".jsx\{0,1\}$"| grep -v "node_modules")

@azharkhan

This comment has been minimized.

Copy link

commented Mar 7, 2017

@iamjochem, thank you again for your command line fu on that post. it was very helpful and much appreciated!

@wpcarro

This comment has been minimized.

Copy link

commented Jan 5, 2018

@iamjochem - A simpler approach than assigning the eslint binary to $ESLINT would be calling:

$ npx eslint
@adnanaliarshad

This comment has been minimized.

Copy link

commented Nov 28, 2018

Any idea why I am facing this issue for above code?
This is occurring on source tree.

Validating Javascript:
env: node: No such file or directory
@filipef101

This comment has been minimized.

Copy link

commented Jan 8, 2019

bump

@nagarjunaj11

This comment has been minimized.

Copy link

commented Jul 17, 2019

HI I need some info reg the GIT prehook commits using ES Lint. Can anyone has idea?
Please give ur gmail id or phone number

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.