-
Notifications
You must be signed in to change notification settings - Fork 150
/
checkfmt.sh
executable file
·31 lines (27 loc) · 1.21 KB
/
checkfmt.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
go install golang.org/x/tools/cmd/goimports
HAS_FMT_ERR=0
# For every Go file in the project, excluding vendor...
for file in $(go list -f '{{$dir := .Dir}}{{range .GoFiles}}{{printf "%s/%s\n" $dir .}}{{end}}{{range .TestGoFiles}}{{printf "%s/%s\n" $dir .}}{{end}}{{range .IgnoredGoFiles}}{{printf "%s/%s\n" $dir .}}{{end}}{{range .CgoFiles}}{{printf "%s/%s\n" $dir .}}{{end}}' ./... ); do
# ... if file does not contain standard generated code comment (https://golang.org/s/generatedcode)...
if ! grep -Exq '^// Code generated .* DO NOT EDIT\.$' $file; then
FMT_OUT="$(goimports -l -d $file)"
# ... and if goimports had any output...
if [[ -n "$FMT_OUT" ]]; then
if [ "$HAS_FMT_ERR" -eq "0" ]; then
# Only print this once.
HAS_FMT_ERR=1
echo 'Commit includes files that are not gofmt-ed' && \
echo 'run "make fmt"' && \
echo ''
fi
echo "$FMT_OUT" # Print output and continue, so developers don't fix one file at a t
fi
fi
done
## print at the end too... sometimes it is nice to see what to do at the end.
if [ "$HAS_FMT_ERR" -eq "1" ]; then
echo 'Commit includes files that are not gofmt-ed' && \
echo ''
fi
exit "$HAS_FMT_ERR"