Quick link: Stuart’s ns Style Guide
Everyone has their own personal quirks when it comes to syntax. No matter how hard you try to lock it down with code review, IDEs, scripts, or check-in hooks, individual differences will emerge.
In Clojure the situation is generally pretty stable: most people follow the same general patterns, which are implemented fairly consistently across editors and IDEs.
With one exception: the ns
macro at the top of every file.
The original implementation of the ns
macro in Clojure was short, simple, and effective. It was also spectacularly over-generalized. ns
will take almost any combination of symbols, keywords, vectors, and lists and find something to evaluate.
There’s a spec of sorts in the docstring, but of course nobody reads that.
The laxness of the ns
implementation was a constant thorn in my side as I worked on tools.namespace. Now it’s causing more headaches as macro specs introduced in Clojure 1.9.0-alpha11 uncover a bevy of bad syntax in libraries.
I’ll admit to having my own syntactic quirks when it comes to ns
, but I make an effort to be consistent. After years of collecting preferences, I finally decided to write it all down.
So now you can read Stuart’s Opinionated Style Guide for Clojure Namespace Declarations and link to it during your next syntactic flamewar.