Today I released version 0.6.0 of the tools.analyzer[1] and tools.analyzer.jvm[2] contrib libraries.
With this release comes a new feature I'm really excited about and that I believe will help users of this library significantly: a pass scheduler. Previous to this release, tools.analyzer passes had to be combined manually, requiring deep knowledge of the implementation of those passes, whose dependencies were not explicit. That usually resulted in users copy-pasting the tools.analyzer.jvm run-passes function using that as a template. With the new scheduler, all of this is no longer necessary as all it takes care of automatically pulling in dependencies and composing the passes in the required and most efficient order, composing together passes whenever possible, to minimize the overhead of a full tree traversal. To get a sense of how that has improved, here's run-passes from 0.5.6: https://github.com/clojure/tools.analyzer.jvm/blob/be55b4e32371060932ac8d4094eb5b1b77fe4349/src/main/clojure/clojure/tools/analyzer/jvm.clj#L430-L477 and here it is from 0.6.0, using the pass scheduler: https://github.com/clojure/tools.analyzer.jvm/blob/1757871eb828c419f8de1cf177f125897f653829/src/main/clojure/clojure/tools/analyzer/jvm.clj#L397-L427 Exposing the default-passes set, users who want to add a pass to the default passes run by t.a.jvm need only to bind run-passes to `(schedule (conj default-passes #'my-pass))`, or dissoc a default pass if not needed. To get started with the pass scheduler, here's its extensive docstring: https://github.com/clojure/tools.analyzer/blob/7a8cba9b26689675debdaabc83f20e485003bf5a/src/main/clojure/clojure/tools/analyzer/passes.clj#L137-L168 and here is a comprehensive example of a pass configuration via :pass-info: https://github.com/clojure/tools.analyzer.jvm/blob/1757871eb828c419f8de1cf177f125897f653829/src/main/clojure/clojure/tools/analyzer/passes/jvm/validate_loop_locals.clj#L150 Nicola [1]https://github.com/clojure/tools.analyzer [2]https://github.com/clojure/tools.analyzer.jvm -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.