Skip to content

Instantly share code, notes, and snippets.

@shettayyy
Last active December 10, 2021 05:27
Show Gist options
  • Save shettayyy/328da46a99a9d7c746636df1cf769675 to your computer and use it in GitHub Desktop.
Save shettayyy/328da46a99a9d7c746636df1cf769675 to your computer and use it in GitHub Desktop.
Pre-commit hook for Linting JS with ESLint before commit.
#!/bin/sh
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".jsx\{0,1\}$")
ESLINT="$(git rev-parse --show-toplevel)/node_modules/.bin/eslint"
if [[ "$STAGED_FILES" = "" ]]; then
exit 0
fi
PASS=true
printf "\nValidating Javascript:\n"
# Check for eslint
if [[ ! -x "$ESLINT" ]]; then
printf "\t\033[41mPlease install ESlint\033[0m (npm i --save-dev eslint)"
exit 1
fi
for FILE in $STAGED_FILES
do
"$ESLINT" "$FILE"
if [[ "$?" == 0 ]]; then
printf "\t\033[32mESLint Passed: $FILE\033[0m"
else
printf "\t\033[41mESLint Failed: $FILE\033[0m"
PASS=false
fi
done
printf "\nJavascript validation completed!\n"
if ! $PASS; then
printf "\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
printf "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
exit $?
@scottkidder
Copy link

scottkidder commented Jun 15, 2018

+1 @ri7nz solution even though I'm just on Zsh.

@chriscauley
Copy link

One more tip: instead of saving this to .git/hooks/pre-commit save it to scripts/pre-commit (or somewhere in your repo). Then run ln -s $PWD/scripts/pre-commit .git/hooks/ and add a note about this to your README.md or CONTRIBUTORS.md file. This way anyone who clones the repo will have the hook as well.

@adnanaliarshad
Copy link

adnanaliarshad commented Nov 28, 2018

@rashtay any idea why I am facing this issue?

This is occurring on source tree.

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

@agilles28
Copy link

thank you @rashtay, thank you all for this!

@shettayyy
Copy link
Author

@adnanaliarshad Need more details

@agilles28 Most welcome :)

@streichsbaer Awesome

@rajneshbiz
Copy link

rajneshbiz commented Mar 16, 2020

if you are use Tmux+Zsh & have an error with message

.git/hooks/pre-commit: 7: .git/hooks/pre-commit: [[: not found

Validating Javascript:
.git/hooks/pre-commit: 16: .git/hooks/pre-commit: [[: not found

this my solution, cange line 1 on pre-commit-eslint from

#!/bin/sh

To

#!/bin/bash

i tested on my ubuntu with Tmux+Zsh

thanks

Hi
I tried it but every time it result succeed whereas ng lint in angular project having eslint issue then why it all time result succeed.
please help me. I am facing this since days.

@massifaqiri
Copy link

It fails on error, but not on warnings. What to change in this script so that it fails on warnings too?

Copy link

ghost commented Mar 8, 2021

It fails on error, but not on warnings. What to change in this script so that it fails on warnings too?

You should configure your .eslintrc to treat rules you consider important as errors. You can also change the command to "$ESLINT" "$FILE" --max-warnings 0 instead.

@shettayyy
Copy link
Author

Hello Everyone,

I created this a long time ago and I no more write such manual scripts. I rely on husky for everything. So pardon me for my delayed response or if I am unable to help. I see there are a lot of helpful comments. I thank each and everyone for making this better. Cheers.

@julix-unity
Copy link

julix-unity commented Nov 19, 2021

Hello Everyone,

I created this a long time ago and I no more write manual scripts. I rely on husky for everything. So pardon me for my delayed response or if I am unable to help. I see there are a lot of helpful comments. I thank each and everyone for making this better. Cheers.

Could you update this then? I think that's why you're still getting so much traffic here.
https://levelup.gitconnected.com/how-to-run-eslint-using-pre-commit-hook-25984fbce17e

Edit: nevermind :D lol big notice right at the top, I skimmed past it - my bad.

@shettayyy
Copy link
Author

Could you update this then? I think that's why you're still getting so much traffic here.
https://levelup.gitconnected.com/how-to-run-eslint-using-pre-commit-hook-25984fbce17e

Edit: nevermind :D lol big notice right at the top, I skimmed past it - my bad.

Edited the notice to clearly indicate I am not maintaining this gist anymore. Thank you for the suggestion @julix-unity ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment