lexpr 0.2.7

A representation for Lisp data
Documentation
# 0.2.7

New features:

- The `sexp` macro now accepts unquoted symbols made up of Rust
  punctuation characters, as long as they also comply with the R7RS
  syntax.

Fixes:

- The parser now copes better with symbols which are delimited with a
  non-space character (issue #40).

Maintenance-related changes:

- The dependency on `proc-macro-hack` is now gone; this required
  bumping the MSRV to 1.45 (issue #78).
- The dependency on `iota` and the dev-dependencies on `criterion`,
  `quickcheck` and `rand` have been updated.

# 0.2.6

This is a maintenance and bugfix release:

- Fix reading close square delimiter when interpreting square brackets
  as list delimiters. Issue reported and fixed by @raffalevy.

# 0.2.5

New features:

- An additional API that allows obtaining source location information
  is now available, thanks to the request of @emoon, who opened the
  very first issue on lexpr. The central point of the new API is the
  new `Datum` type, which combines a `Value` with location information.
- The iterators for cons cell chains now have a `peek` method.
- Number literals with R7RS radix prefixes are now understood. This
  allows for parsing of binary, octal, hexidecimal, and
  explicitly-decimal literals, e.g., `#b10101110`. `#o0777`,
  `#xDEADBEEF` and `#d42`. A sign is allowed to follow the radix
  prefix, as per R7RS formal syntax.

Besides some CI churn, the `quickcheck_macros` dev-dependency has been
updated, which eliminates old versions of `syn` and `quote` from the
transitive development build dependencies.

# 0.2.4

This is dependency-update release:

- The procedural `sexp` macro is now implemented on top of
  `proc-macro2` 1.0 and `quote` 1.0.
- `lexpr` now uses newer versions of `criterion`, `quickcheck` and
  `rand` in its `dev-dependencies`.

In addition, some minor code cleanups have been done, including slight
simplification of some doctest examples.

# 0.2.3

New features:

- Line comments are now recognized (and ignored) by the parser.
- The `Parser` type now implements `Iterator`. This should make
  reading multiple S-expressions from a single source considerably
  more ergonomic.

# 0.2.2

New features:

- The `Value` type now implements `FromStr` using the default syntax.

Parser bugfixes:

- "Peculiar identifiers", i.e. those starting with "+", "-" or ".",
  should now be handled properly.

- Number literals that start with a "+" are no longer erroneously
  parsed as symbols.

- The handling of dots inside lists should now be more robust,
  detecting invalid syntax that was accepted before.

# 0.2.1

Fix version number in README; no other changes.

# 0.2.0

Incompatible changes:

- The `Atom` enum no longer exists. All its variants are now part of
  the `Value` enum itself.
- List values are no longer represented as `List` and `ImproperList`
  variants, but are more faithfully modeled as chains of "cons"
  cells. See the `Value::Cons` variant and the new `Cons` data
  type. Conversion to vectors and iteration over cons cell chains is
  supported.
- The `String`, `Symbol` and `Keyword` variants no longer contain a
  `String`, but a `Box<str>` to reduce the memory footprint of
  `Value`. As in-place modification of these variants is expected to
  be a seldom-required operation, the ergonomic impact is deemed
  acceptable.
- The `Error` type, as it currently only relates to S-expression
  parsing, is now found in the `lexpr::parse` module.

New features:

- Serde support is now available via the companion crate
  [`serde-lexpr`], which is developed in parallel with `lexpr`,
  sharing the same git repository.
- There is now the `Value::Vector` variant for representing Lisp
  vectors. Vectors can be constructed via the `sexp!` macro using
  Scheme syntax, e.g. `sexp!(#(1 2 3))`. Both Emacs Lisp and Scheme
  syntax is supported for reading and printing.
- Characters are now supported with the `Value::Char` variant. Both
  Emacs Lisp and Scheme syntax is supported.
- Byte vectors are now supported with the `Value::Bytes` variant. This
  is supported for Scheme R6RS and R7RS syntax. For Emacs Lisp, this
  data type maps to unibyte strings.
- Escapes sequences in string literals now support the appropriate
  syntax for the selected Lisp dialect, instead of using JSON syntax.
- There is now a `Number::visit` method, which can be used to dispatch
  on the internal type of the number.

[`serde-lexpr`]: https://github.com/rotty/lexpr-rs/tree/master/serde-lexpr

# 0.1.3

Noteworthy changes:

- Initial parsing and printing support.

# 0.1.2

Noteworthy changes:

- New constructors `Value::list()`, `Value::improper_list()`, and
  `Value::empty_list()`.
- New predicates `Value::is_symbol()`, `Value::is_list()`, and
  `Value::is_improper_list()`.
- New accessor `Value::as_symbol()`.
- New conversions using the `From`/`Into` traits:
  - `Value` can now additionally be constructed from `Atom` and `Cow<str>`.
  - `Atom` can now additionally be constructed from `Cow<str>`.
- A few initial, basic API tests added.

# 0.1.1

Noteworthy changes:

- Fix in `Atom::keyword()`
- More accesor functions for `Value` and `Atom`
- Documentation expanded a bit
- We now build on travis-ci

# 0.1.0

Initial release, features:

- `Value` type and `sexp` macro and corresponding documentation.