edamame.core
get-column-number
get-line-number
iobj?
- Returns true if obj can carry metadata.normalize-opts
- Expandsopts
into normalized opts, e.g.parse-next
- Parses next form from reader.parse-next+string
- Parses next form from reader.parse-ns-form
- Parsesns-form
, an s-expression, into map with: -:name
: the name of the namespace -:aliases
: a map of aliases to lib names.parse-string
- Parses first EDN value from string.parse-string-all
- Likeparse-string
but parses all values from string and returns them in a vector.reader
- Coerces x into indexing pushback-reader to be used with parse-next.source-reader
- Coerces x into source-logging-reader to be used with parse-next.
(get-column-number reader)
(get-line-number reader)
(iobj? obj)
Returns true if obj can carry metadata.
(normalize-opts opts)
Expands opts
into normalized opts, e.g. :all true
is expanded
into explicit options.
(parse-next reader)
(parse-next reader normalized-opts)
Parses next form from reader. Accepts same opts as parse-string
,
but must be normalized with normalize-opts
first.
(parse-next+string reader)
(parse-next+string reader normalized-opts)
Parses next form from reader. Accepts same opts as parse-string
,
but must be normalized with normalize-opts
first.
Returns read value + string read (whitespace-trimmed).
(parse-ns-form ns-form)
Parses ns-form
, an s-expression, into map with:
:name
: the name of the namespace:aliases
: a map of aliases to lib names
(parse-string s)
(parse-string s opts)
Parses first EDN value from string.
Supported parsing options can be true
for default behavior or a function
that is called on the form and returns a form in its place:
:deref
: parse forms starting with @
. If true
, the resulting
expression will be parsed as (deref expr)
.
:fn
: parse function literals (#(inc %)
). If true
, will be parsed as (fn [%1] (inc %))
.
:quote
: parse quoted expression 'foo
. If true
, will be parsed as (quote foo)
.
:read-eval
: parse read-eval (=(+ 1 2 3)
). If true
, the
resulting expression will be parsed as (read-eval (+ 1 2 3))
.
:regex
: parse regex literals (#"foo"
). If true
, defaults to
re-pattern
.
:var
: parse var literals (#'foo
). If true
, the resulting
expression will be parsed as (var foo)
.
:map
: parse map literal using a custom function, e.g. flatland.ordered.map/ordered-map
:set
: parse set literal using a custom function, e.g. flatland.ordered.set/ordered-set
:syntax-quote
: parse syntax-quote ((+ 1 2 3)
). Symbols get
qualified using :resolve-symbol
which defaults to identity
:
(parse-string "`x" {:syntax-quote {:resolve-symbol #(symbol "user" (str %))}})
;;=> (quote user/x)
By default, also parses unquote
and unquote-splicing
literals,
resolving them accordingly.
:unquote
: parse unquote (~x
). Requires :syntax-quote
to be set.
If true
and not inside syntax-quote
, defaults to clojure.core/unquote
.
:unquote-splicing
: parse unquote-splicing (~@x
). Requires :syntax-quote
to be set. If true
and not inside syntax-quote
, defaults
to clojure.core/unquote-splicing
.
:all
: when true
, the above options will be set to true
unless
explicitly provided.
Supported options for processing reader conditionals:
:read-cond
: - :allow
to process reader conditionals, or
:preserve
to keep all branches
:features
: - persistent set of feature keywords for reader conditionals (e.g. #{:clj}
).
:auto-resolve
: map of alias to namespace symbols for
auto-resolving keywords. Use :current
as the alias for the current
namespace.
:readers
: data readers.
:postprocess
: a function that is called with a map containing
:obj
, the read value, and :loc
, the location metadata. This can
be used to handle objects that cannot carry metadata differently. If
this option is provided, attaching location metadata is not
automatically added to the object.
:location?
: a predicate that is called with the parsed
object. Should return a truthy value to determine if location
information will be added.
:uneval
: a function of a map with :uneval
and :next
to preserve #_
expressions by combining them with next value.
Additional arguments to tools.reader may be passed with
:tools.reader/opts
, like :readers
for passing reader tag functions.
(parse-string-all s)
(parse-string-all s opts)
Like parse-string
but parses all values from string and returns them
in a vector.
(reader x)
Coerces x into indexing pushback-reader to be used with
parse-next. Accepts string or java.io.Reader
(source-reader x)
Coerces x into source-logging-reader to be used with
parse-next. Accepts string or java.io.Reader