summaryrefslogblamecommitdiff
path: root/posts/2015-07-25-dont-remove-white-spaces.org
blob: 353edeacbcbdd7efdb0cc450478caa5bde9d283c (plain) (tree)
































































                                                                        
I don't like trailing white spaces in my source code. I've configured my
editors to highlight them so I don't add them by accident, and when
possible, I remove them. But it doesn't mean that all of them should be
removed blindly.

In this post, I'm talking about files that are managed by a SCM. When
working on such a text file, editor's hooks that delete them when
writing a file can be more annoying than keeping them in place. A change
should only touch lines that are relevant to the fix or feature beeing
added. Touching lines that are not relevant are creating noise in the
history. I've made this mistake in the past, and I've learned my
lessons.

** Pain for the reviewer

The person who will review the change will have to make an extra effort
to understand why the diff highlight some lines where it looks like
there's no change. It's a distraction to his main task, and it doesn't
bring any benefit to the change beeing submitted.

** Pain for the person browsing the history

When someone browse the history and try to understand what changed
between two versions, the deletion is just noise. It's already hard to
make the mental effort to read a diff, and understand what and why
things have changed. Adding some extra noise is annoying.

Running a tool like =git blame= shows how useless this is, for both the
person reading the history and the author.

** Tips

Configure your editor to highlight them. If you are using Emacs, you can
do it with

#+BEGIN_EXAMPLE
    (require 'whitespace)
    (global-whitespace-mode 1)
    (setq whitespace-style '(face trailing tabs tab-mark))
#+END_EXAMPLE

With vim, you can add the following:

#+BEGIN_EXAMPLE
    set list lcs=trail:·,tab:»·
    highlight ExtraWhitespace ctermbg=red guibg=red
#+END_EXAMPLE

It's also possible to configure =git= to highlight them when running
=git add -p=, by running

#+BEGIN_EXAMPLE
    git config --global core.whitespace trailing-space,space-before-tab
#+END_EXAMPLE

=git= will complain if it finds white spaces in your change, so you have
time to fix and remove them.

If you really don't want any trailing white spaces, you can also
configure your SCM with a post-commit hook to reject commits that
contains them.

If you're using =vimdiff= to read a diff, it's possible to not highlight
white spaces with =set diffopt+=iwhite=. This can makes it a little bit
easier to read messy diff.