rewrite-clj

https://github.com/clj-commons/rewrite-clj
lread 2021-05-13T21:38:34.307300Z

Heya folks! I’m continuing to think about custom skip support for the rewrite-clj zipper. I’m thinking a :skip-pred option at zipper creation time as suggested-ish in https://github.com/clj-commons/rewrite-clj/issues/70 . As those in the know know, the current skip behaviour is hardcoded to skip Clojure whitespace and comments. The :skip-pred will allow folks to skip whatever nodes they like. For example to skip all nodes that are not sexpr-able a :skip-pred might be set to:

#(z/find % z/up* (complement z/sexpr-able?))
This says, I’m not interested in seeing nodes where the node or any of its parents are not sexpr-able. This seems good to me, but am always happy to hear feedback. Things get a little interesting if :skip-pred is very restrictive and makes me wonder what moving up and down might mean. For example, if I want to skip everything but comments, there is no down on a comment, so fine, but up? I suppose it would always navigate to the zipper root node? Or if we skip everything but a container node, let’s say a set, we would see all sets, but unless a set contained a set we would not otherwise see its children through navigation. If set1 contains a vector that contains set2, it seems to me that an up on set2 would bring me to set1. Would a down on set1 bring me to set2? I’m not sure yet, but these are the kinds of questions that are coming to mind.