I love this sort of thing, but I often get the sense from Clojurists I’ve worked with that macros are seen as too complicated (even slightly naughty) for most codebases. Always seems a shame as it’s the main superpower you’re getting from Lisp.
As an aside, Julia's MacroTools.jl defines pre- and post- code walking in four lines:
It's dead simple and obvious in retrospect, but I don't think I would have ever thought of that! I've always wondered if there's a lineage to this set of definitions. Does anyone know?