Add to project.clj dependencies:
All functionality is in the
> (use jai.query)
Manipulate source code like the DOM
jai makes it easy for querying and manipulation of clojure source code through an xpath/css-inspired syntax.
- to simplify traversal and manipulation of source code
- to provide higher level abstractions on top of rewrite-clj
- to leverage core.match's pattern matching
A blog post that tells a little bit more about it.
As lisp code follows a tree-like structure, it is very useful to be able to have a simple language to be able to query as well as update elements of that tree. The best tool for source code manipulation is rewrite-clj. However, it is hard to reason about the higher level concepts of code when using just a zipper for traversal.
jai is essentially a query/manipulation tool inspired by jquery and css selectors that make for easy dom manipulation and query. Instead of writing the following code with
(if (and (-> zloc z/prev z/prev z/sexpr (= "defn")) (-> zloc z/prev z/sexpr vector?) (do-something zloc) zloc)
jai allows the same logic to be written in a much more expressive manner:
($ zloc [(defn ^:% vector? | _)] do-something)
Please see the main documentation for usage and examples.
Copyright © 2015 Chris Zheng
Distributed under the MIT License