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.

Reply via email to