Skip to content

Instantly share code, notes, and snippets.

@oroce
Created April 25, 2014 08:42
Show Gist options
  • Save oroce/11282380 to your computer and use it in GitHub Desktop.
Save oroce/11282380 to your computer and use it in GitHub Desktop.
run eslint only on changed (*.js files) files using pre-commit
{
"scripts": {
"eslint": "LIST=`git diff-index --name-only HEAD | grep .*\\.js | grep -v json`; if [ \"$LIST\" ]; then eslint $LIST; fi"
},
"devDependencies": {
"pre-commit": "0.0.7",
"eslint": "~0.5.1"
},
"pre-commit": [
"eslint"
]
}
@scottwarren
Copy link

When I run npm run eslint it doesn't do anything

@EddieOne do you have any modified/changed (according to Git) *.js files locally? If not, it won't (and shouldn't) do anything

@kelvien
Copy link

kelvien commented Jul 10, 2018

Just adding to this thread

git diff-index --name-only HEAD | grep -E "(.*)\.(jsx|js)" | xargs node_modules/eslint/bin/eslint.js -c .eslintrc

@grebenyuksv-preply
Copy link

A tiny thing: you might want to grep -E "(.*)\.(jsx|js)$"

@vogelino
Copy link

vogelino commented Oct 24, 2018

This includes files that where deleted. Eslint obviously cannot check deleted files and therefor crashes. Is there a way to exclude these?

PS: Thx for this very useful snippet!

@vogelino
Copy link

I found the solution, apparently you can exclude deleted filed using --diff-filter=d.
This gives us:

LIST=`git diff-index --name-only --diff-filter=d HEAD | grep .*\\.js | grep -v json`; if [ \"$LIST\" ]; then eslint --fix $LIST; fi

@lifenstein
Copy link

This works well enough if there are only a handful of files, but in a large project with hundreds if not thousands of files, a large merge commit can include a lot of ofiles. LIST is too big in this case - I'm getting ENAMETOOLONG error.

@Vhndaree
Copy link

Vhndaree commented Jan 10, 2020

@grebenyuksv-preply I think it is great idea to run lint on all possible ext but I got this err
/bin/sh: 1: [: src/services/acc.js: unexpected operator
my setup "LIST=`git diff-index --name-only HEAD | grep -E \"(.*)\\.(jsx|js|scss)$\" | grep -v json;`; if [ $LIST ]; then eslint $LIST; fi"
You have any idea, Why I'm having this?

@protoEvangelion
Copy link

This worked for me on mac:

        "eslint": "LIST=`git diff-index --name-only --diff-filter=d HEAD | grep -E \"(.*)\\.(tsx|ts)\" | grep -v json`; if [ \"$LIST\" ]; then eslint $LIST --fix; fi",

@Bananen1234
Copy link

Awesome dudes! Wont need lint-staged anymore

@Bananen1234
Copy link

Problem here with using eslint --fix, is that the script is passing successfully, but the fixed file is now unstaged, and git is commiting the erronous change still unfixed. Can I reuse the list of staged files and git add them??

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