Skip to content

Instantly share code, notes, and snippets.

@seeliang
Last active September 7, 2024 13:06
Show Gist options
  • Save seeliang/0f0de424d1cdc4541c338f4ee93b7e6a to your computer and use it in GitHub Desktop.
Save seeliang/0f0de424d1cdc4541c338f4ee93b7e6a to your computer and use it in GitHub Desktop.
How to lint only changed files?

find out the differences

use git diff to generate file list

git diff --name-only master

limited to certain file types

add ext filter

git diff --name-only master | grep -E "(.js$|.ts$|.tsx$)"

handle the case of file removal

ignore deleted files

git diff --name-only --diff-filter=ACMRTUXB master | grep -E "(.js$|.ts$|.tsx$)"

node scripts

add eslint to package.json

....
"scripts":
  "lint:script": "eslint -c eslintrc.js $(git diff --name-only --diff-filter=ACMRTUXB master | grep  -E \"(.js$|.ts$|.tsx$)\")"

CI script

sample with circle ci here

....
"scripts":
 "lint:script": "eslint -c eslintrc.js $(git diff --name-only --diff-filter=ACMRTUXB origin/master | grep  -E \"(.js$|.ts$|.tsx$)\")"

for stylelint

will need grep fallback for empty result cases

 
 ....
 "scripts":
   "lint:style": "stylelint --config .stylelintrc.js $(git diff --name-only --diff-filter=ACMRTUXB origin/master | grep  -E \"(.js$|.ts$|.tsx$)\" || echo \".stylelintrc.js\")"

NOTE: make sure our local branch is up to date (merge origin/master)

@justin808
Copy link

@ko22009
Copy link

ko22009 commented May 17, 2023

I check this solution and it is not better then use cache.

@greghor
Copy link

greghor commented Jun 25, 2023

Just slightly adapted it for sqlfluff, another linter - and it works like a charm! thanks!

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