whiteout - Say 'No' to Whitespace

I recently whipped up a command-line utility / Ruby gem called ‘whiteout’ which removes trailing whitespace from files. As you would imagine, it’s a simple piece of code, but it’s a bit more convenient than the shell script I was using. It also gave me a chance to learn how to cut a gem and how to structure a command-line utility in Ruby.

You can use whiteout to remove trailing whitespace from a single file, a directory of files (recursively), or from standard input:

$ whiteout foo.rb
$ whiteout -r bar/
$ echo -e "quux   \nxyzzy" | whiteout - > baz.txt

Convenient, right? And you can install it with a simple gem install whiteout (as 230 others already have!).

One could make a perfectly reasonable case that Ruby is too slow of a language for this type of utility, but I tend to think that in this age of spare cycles the most important aspect of a utility is defining its interface and establishing its presence. The underlying code can be swapped out later.

git whiteout

Let’s call a spade a spade: checking in code with janky whitespace is shameful. But fighting Xcode’s whitespace habits is time-consuming. Instead of bothering, drop this in your .gitconfig:

[alias]
  whiteout = !whiteout `git ls-files -m`

Now, when you run your pre-commit diff and find messy whitespace, just run git whiteout to remove trailing whitespace from every file you’ve modified. Go, go, programmer laziness.