Francesco, that doesn't seem to be the case in my tests: [~/src/tools.analyzer.jvm/src/main/clojure]> cat test.clj (ns test (:require [clojure.string :as s])) ::s/foo
clojure.tools.analyzer.jvm> (-> (analyze-ns 'test) last :form) :clojure.string/foo Note that to analyze keywords in the form ::foo/bar, *ns* has to be set and all the aliases need to be setup, this can only happen if the ns form is evaluated after being analyzed, using analyze+eval or analyze-ns directly, there's an explaination on the tools.analyzer.jvm README regarding why `analyze` shouldn't be used to analyze whole namespaces and why you whould use analyze+eval or analyze-ns instead. In any case, keywords in the form ::foo/bar are resolved by the reader, not the analyzer. Nicola Francesco Bellomi writes: > Nicola, > > thank you for your work, and for :validate/wrong-tag-handler specifically, > which is very useful to me. > > It seems that analyzer refuses keywords in the form ::a/b, which are used > in some projects > (e.g. [org.clojure/core.typed] clojure.core.typed.check.fn contains > ::t/cmethods at line 21). > > Francesco > > > On Wednesday, August 13, 2014 6:54:54 PM UTC+2, Nicola Mometto wrote: >> >> >> As some of you might know, I've been working contiuously on my various >> tools.* contrib libraries for the past months and I've recently added >> tools.analyzer.js to the list of contrib libraries I maintain. >> >> Since I don't blog/tweet much about those libraries, I thought I'd write >> a report to let the community aware of the status of those libraries. >> >> ## tools.analyzer https://github.com/clojure/tools.analyzer >> >> tools.analyzer is a host-agnostic pluggable analyzer and collection of >> passes producing an AST in clojure data structures for clojure and >> other languages in the clojure language family, like clojurescript. >> >> The current release is 0.5.1, here's a list of notable changes that have >> made in in the last few months: >> >> * The analyzer now uses different environments for lexical state (like >> the locals map) and for global state (like namespaces mappings); the >> former is just a regular map passed to an analyze call, the latter is >> a dynamic var holding an atom and lives in the tools.analyzer.env >> namespace along with functions to setup/manipulate it. >> >> * The metadata elision mechanism has been vastly improved, allowing to >> specify different keys to elide based on the node :op, aswell as based >> on a predicate rather than simple key matching. >> >> * The env context now partecipates in a keyword hierarchy, the default >> contexts are :ctx/statement, :ctx/return and :ctx/expr and other >> contexts can be derived from those, as an example tools.analyzer >> utilizes :ctx.invoke/target and :ctx.invoke/params for nodes in invoke >> position. >> >> * Dispatch on clojure expressions types has been opened with the >> -analyze-form multimethod, allowing to provide custom evaluation >> strategies for custom types (this was needed for tools.analyzer.js >> because of clojurescript's #js syntax) >> >> * Documentation has been vastly improved with docstrings for every >> public function and pass, and the addition of an official AST >> quickref http://clojure.github.io/tools.analyzer/spec/quickref.html >> >> For a complete list of changes, refer to the CHANGELOG: >> https://github.com/clojure/tools.analyzer/blob/master/CHANGELOG.md >> >> For more informations and examples, refer to the README: >> https://github.com/clojure/tools.analyzer/blob/master/README.md >> >> ## tools.analyzer.jvm https://github.com/clojure/tools.analyzer.jvm >> >> tools.analyzer.jvm is a jvm-specific tools.analyzer extension, >> collection of passes and useful functions to deal with analysis of >> clojure on the JVM code. >> >> The current release is 0.5.2, here's a list of notable changes that have >> made in the last few months: >> >> * Added an analyze-ns function that returns a vector of AST nodes for >> every top-level form in that namespace; evaluates each form. >> >> * Added a configurable handler for wrong tags: while Clojure is >> permissive of type hints that don't resolve to a Class which it >> simply ignores in most cases, tools.analyzer.jvm's default behaviour >> has always been to throw an exception in those cases. This has been a >> longstanding issue for tools like eastwood that want to simply emit a >> warning on those cases rather than stopping analysis and error out. >> With the addition of this handlers, users can now control what happens >> when t.a.jvm hits a tag that can't be resolved to a Class. >> >> * Added optional Var-level tag inference >> >> * Improved analyze+eval to attach the result of the evaluation of the >> node to the AST, wrapping potential exceptions at evaluation time in >> an ExceptionThrown record. >> >> * Documentation has been vastly improved with docstrings for every >> public function and pass, and the addition of an official AST >> quickref http://clojure.github.io/tools.analyzer.jvm/spec/quickref.html >> >> For a complete list of changes, refer to the CHANGELOG: >> https://github.com/clojure/tools.analyzer.jvm/blob/master/CHANGELOG.md >> >> For more informations and examples, refer to the README: >> https://github.com/clojure/tools.analyzer.jvm/blob/master/README.md >> >> ## tools.analyzer.js https://github.com/clojure/tools.analyzer.js >> >> tools.analyzer.js is a js-specific tools.analyzer extension, collection >> of passes and useful functions to deal with analysis of clojurescript >> code. >> >> The current release is 0.1.0-beta4. >> >> The produced AST is not compatible with the one produced by >> cljs.analyzer even though they are similar as the cljs analyzer heavily >> influenced the AST format of tools.analyzer. >> tools.analyzer.js has several advantages over cljs.analyzer: >> >> * Heavily modular implementation, thanks to the :children-walking based >> multi-pass design. >> >> * Unified AST format and analyzer interface between clj and cljs code >> analyzers, this will allow library authors to write passes that can be >> shared between different analyzers and write code that will work for >> both clj and cljs with only minimal changes. >> >> * Caching of the namespace env: because of its multi-pass nature, t.a.js >> is a bit slower than the (mostly) single-pass cljs.analyzer, to >> compensate for this, t.a.js offers a mechanism of storing on disk & >> reloading the namespace map and bundles the namespace map of cljs.core >> so that it's not necessary to analyze it each time at startup like >> with cljs.analyzer. >> >> For a complete list of changes, refer to the CHANGELOG: >> https://github.com/clojure/tools.analyzer.js/blob/master/CHANGELOG.md >> >> For more informations and examples, refer to the README: >> https://github.com/clojure/tools.analyzer.js/blob/master/README.md >> >> ## tools.emitter.jvm https://github.com/clojure/tools.analyzer.jvm >> >> tools.emitter.jvm is a bytecode compiler for clojure, that uses >> tools.analyzer.jvm as its frontend. >> >> The current release is 0.1.0-beta5, currently the compiler has been >> tested and is working on clojure.core and most clojure namespaces from >> the standard library and the contrib libraries, in the last few months >> several enhancements to how the compiler works internally and regarding >> the emitted bytecode have been committed, for example: >> >> * A complete refactor of the internal emit and emit-class functions to >> be more functional and stateless, thanks to Reid McKenzie. >> >> * The emitted bytecode clears the "this" local before tail calls, see >> http://dev.clojure.org/jira/browse/CLJ-1250 for the issue this solves. >> >> * The emitted code hoists try/loop bodies in a different method rather >> than wrappping them in a fn*, see >> http://dev.clojure.org/jira/browse/CLJ-701 for the issue this solves; >> the implementation in t.e.jvm is more general than the one implemented >> for the clojure compiler. >> >> * Improved the load and eval functions to take an optional options map >> with options that can be propagated from load to eval, and from eval >> to the analyzer. >> >> For a complete list of changes, refer to the CHANGELOG: >> https://github.com/clojure/tools.emitter.jvm/blob/master/CHANGELOG.md >> >> For more informations and examples, refer to the README: >> https://github.com/clojure/tools.emitter.jvm/blob/master/README.md >> >> >> If you've made it this far and have any question or comment, >> please let me know and I'll be more than happy to reply. >> >> Nicola >> -- 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.