Analyzer for clojure code, host agnostic.
Entry point:
Platform implementers must provide dynamic bindings for:
Setting up the global env is also required, see eastwood.copieddeps.dep1.clojure.tools.analyzer.env
See clojure.tools.analyzer.core-test for an example on how to setup the analyzer.
Analyzer for clojure code, host agnostic. Entry point: * analyze Platform implementers must provide dynamic bindings for: * macroexpand-1 * parse * create-var * var? Setting up the global env is also required, see eastwood.copieddeps.dep1.clojure.tools.analyzer.env See clojure.tools.analyzer.core-test for an example on how to setup the analyzer.
(-parse form env)Takes a form and an env map and dispatches on the head of the form, that is a special form.
Takes a form and an env map and dispatches on the head of the form, that is a special form.
(analyze form env)Given a form to analyze and an environment, a map containing:
returns an AST for that form.
Every node in the AST is a map that is guaranteed to have the following keys:
Additionaly if the AST node contains sub-nodes, it is guaranteed to have:
It is considered a node either the top-level node (marked with :top-level true) or a node that can be reached via :children; if a node contains a node-like map that is not reachable by :children, there's no guarantee that such a map will contain the guaranteed keys.
Given a form to analyze and an environment, a map containing:
* :locals a map from binding symbol to AST of the binding value
* :context a keyword describing the form's context from the :ctx/* hierarchy.
** :ctx/expr the form is an expression: its value is used
** :ctx/return the form is an expression in return position, derives :ctx/expr
** :ctx/statement the value of the form is not used
* :ns a symbol representing the current namespace of the form to be
analyzed
returns an AST for that form.
Every node in the AST is a map that is *guaranteed* to have the following keys:
* :op a keyword describing the AST node
* :form the form represented by the AST node
* :env the environment map of the AST node
Additionaly if the AST node contains sub-nodes, it is guaranteed to have:
* :children a vector of the keys of the AST node mapping to the sub-nodes,
ordered, when that makes sense
It is considered a node either the top-level node (marked with :top-level true)
or a node that can be reached via :children; if a node contains a node-like
map that is not reachable by :children, there's no guarantee that such a map
will contain the guaranteed keys.(analyze-fn-method [params & body :as form] {:keys [locals local] :as env})Like analyze, but does not mark the form with :top-level true
Like analyze, but does not mark the form with :top-level true
(analyze-in-env env)Takes an env map and returns a function that analyzes a form in that env
Takes an env map and returns a function that analyzes a form in that env
(create-var sym env)Creates a var for sym and returns it
Creates a var for sym and returns it
(macroexpand form env)Repeatedly calls macroexpand-1 on form until it no longer represents a macro form, then returns it.
Repeatedly calls macroexpand-1 on form until it no longer represents a macro form, then returns it.
(macroexpand-1 form env)If form represents a macro form, returns its expansion, else returns form.
If form represents a macro form, returns its expansion, else returns form.
(parse [op & args] env)Multimethod that dispatches on op, should default to -parse
Multimethod that dispatches on op, should default to -parse
(parse-recur [_ & exprs :as form] {:keys [context loop-locals loop-id] :as env})Set of special forms common to every clojure variant
Set of special forms common to every clojure variant
(var? obj)Returns true if obj represent a var form as returned by create-var
Returns true if obj represent a var form as returned by create-var
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |