Analyzer for clojure code, host agnostic.
Entry point:
Platform implementers must provide dynamic bindings for:
Setting up the global env is also required, see 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 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 is a website building & hosting documentation for Clojure/Script libraries
× close