Skip to content

Commit 865d1ed

Browse files
committed
DX: Check trailing spaces in project files only
Previously the `check_trailing_spaces.sh` script was checking files that do not belong to the project, for example: - diverse `composer.lock` files - local development files like `.idea` or temporary files created In its' previous design, the list of files to check for trailing spaces is generated by `find` which is not aware about different files (not) in the project. To exclude non-project files, it worked with a larger blacklist of checking if a file is not in diverse paths, for example and most prominently: - -not -path "./.git/*" which is kind of contradictory as the project *is* managed by git, but that folder can have a totally different name. This blacklist is pretty verbose and also needs extra knowledge and care due to the nature of `find` as it operates on file-system level, not project level more specifically. Files in the project are managed by `git` and `git` knows which files belong into the project and which not. Git on ... - ... repository level contains the information which project files are ignored. for example the `composer.lock` files. - ... developer or system level also knows about which files are ignored. for example the `.idea` folder (see "global .gitignore") Change here is to replace `find` as file-system only utility with `git` itself, namely the `git-grep` command, for the operation to obtain the list of files to check. This includes the exec-call of grep, as gits' grep is a little more powerful, too [1] *and* is compatible in the output format for the post-processing with sed in the check-script. This allows to drop the manually crafted blacklist and to specifically mark paths/files not to be checked [2] which are (only) the test fixtures in: - tests/Fixtures/ The knowledge of git about the project itself and how the developer works next to the reduced list of files to check has the additional benefit of a cache and overall results in a much better performance. [1]: Fun with "git grep" <https://gitster.livejournal.com/27674.html> [2]: pathspec - gitglossary <https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec>
1 parent e5de921 commit 865d1ed

File tree

1 file changed

+3
-9
lines changed

1 file changed

+3
-9
lines changed

check_trailing_spaces.sh

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,16 @@
22
set -eu
33

44
files_with_trailing_spaces=$(
5-
find . \
6-
-type f \
7-
-not -path "./.git/*" \
8-
-not -path "./dev-tools/bin/*" \
9-
-not -path "./dev-tools/vendor/*" \
10-
-not -path "./vendor/*" \
11-
-not -path "./tests/Fixtures/*" \
12-
-exec grep -EIHn "\\s$" {} \; \
5+
git grep -EIn "\\s$" \
6+
':!tests/Fixtures/*' \
137
| sort -fh
148
)
159

1610
if [ "$files_with_trailing_spaces" ]
1711
then
1812
printf '\033[97;41mTrailing whitespaces detected:\033[0m\n'
1913
e=$(printf '\033')
20-
echo "${files_with_trailing_spaces}" | sed -E "s/^\\.\\/([^:]+):([0-9]+):(.*[^\\t ])?([\\t ]+)$/${e}[0;31m - in ${e}[0;33m\\1${e}[0;31m at line ${e}[0;33m\\2\\n ${e}[0;31m>${e}[0m \\3${e}[41;1m\\4${e}[0m/"
14+
echo "${files_with_trailing_spaces}" | sed -E "s/^([^:]+):([0-9]+):(.*[^\\t ])?([\\t ]+)$/${e}[0;31m - in ${e}[0;33m\\1${e}[0;31m at line ${e}[0;33m\\2\\n ${e}[0;31m>${e}[0m \\3${e}[41;1m\\4${e}[0m/"
2115

2216
exit 3
2317
fi

0 commit comments

Comments
 (0)