Skip to content

Instantly share code, notes, and snippets.

@luuuis
Forked from dahjelle/pre-commit.sh
Last active September 19, 2021 16:18
Show Gist options
  • Save luuuis/e41fd71134ce88ac5e9359cbdbfb6273 to your computer and use it in GitHub Desktop.
Save luuuis/e41fd71134ce88ac5e9359cbdbfb6273 to your computer and use it in GitHub Desktop.
Pre-commit hook for eslint, linting *only* staged changes.
#!/usr/bin/env bash
set -uo pipefail
IFS=$'\n\t'
#
# Improvements from dahjelle/pre-commit.sh:
# - does not lint deleted files,
# - lints all staged files before exiting with an error code,
# - handles spaces and other unusual chars in file names.
#
# Based also on @jancimajek's one liner in that Gist.
#
# ESLint staged changes only
git diff --diff-filter=d --cached --name-only -z -- '*.js' '*.jsx' \
| xargs -0 -I % sh -c 'git show ":%" | ./node_modules/.bin/eslint --stdin --stdin-filename "%";'
eslint_exit=$?
if [ ${eslint_exit} -eq 0 ]; then
echo "✓ ESLint passed"
else
echo "✘ ESLint failed!" 1>&2
exit ${eslint_exit}
fi
@Artoria2e5
Copy link

Artoria2e5 commented Dec 1, 2019

would lint working directory

Why would it? eslint has a filename-receiving CLI interface too. Git diff operates on file level.

@wojpawlik
Copy link

wojpawlik commented Mar 16, 2020

react-boilerplate/react-boilerplate#1064 (comment)

Btw., I was trying to sidestep the issue by linting before staging instead, but thedevs-network/the-guard-bot@b379aab :)

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