Skip to content

Latest commit

 

History

History
241 lines (155 loc) · 8.18 KB

CHANGELOG.md

File metadata and controls

241 lines (155 loc) · 8.18 KB

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.

[Unreleased]

Added

  • std feature which is enabled by default. Disabling this feature will result in a no_std-compatible version of Chomp.
  • ascii::float parses a floating-point number with optional sign, fraction and exponent.
  • combinators::choice which attempts multiple heterogenous parsers from an iterator until one succeeds.
  • parsers::skip_while1 skips at least one token matching a predicate.

Changes

  • Updated either dependency to 1.0.0.

[0.3.1] - 2016-09-06

Added

  • combinators::either: Like or but allows different result types from the parsers.

Changes

  • Chomp is now licensed under both MIT and Apache-2.0 licenses.

Bugfixes

  • Feature tendril now compiles again.

[0.3.0] - 2016-09-01

Added

  • prelude module containing basic types, parsers and combinators.

    This is supposed to be the equivalent of Attoparsec's main package.

  • run_parser which executes a parser on any given Input type.

  • buffer::InputBuf which contains a slice and an incomplete flag, much as the old Input struct.

  • Input<Token=T, Buffer=&[T]> implementation for &[T] where T: Copy + PartialEq.

  • Input<Token=char, Buffer=&str> implementation for &str.

  • types::Buffer trait which is implemented for all buffers providing common logic to perform the final parsing on a buffer without knowing the exact buffer implementation.

  • types::U8Input trait alias for Input<Token=u8>.

  • primitives::Primitives trait providing access to the primitive methods of the Input trait.

    This is used for building fundamental parsers/combinators.

  • ParseResult::inspect allowing code to observe the success value.

  • types::numbering module for creating position-aware Input types.

  • parsers::skip_while using an efficient way of skipping data if provided, otherwise falls back on using take_while and throws the result away.

  • chomp::Error now includes a backtrace in test and debug build profiles thanks to the debugtrace crate. Backtraces can also be activated permanently using the backtrace feature but this will incur the significant cost of allocating backtraces even in the release profile.

  • Feature noop_error provides a zero-sized error type for the cases when the expected token is unimportant. Provides a small performance boost.

Changes

  • Backwards-incompatible: Input is now a trait with associated types Token and Buffer.

    This removes all incomplete logic from the parsers themselves and moves it into the InputBuf type. This InputBuf is used if a partial buffer is in memory. It also allows the parsers to operate directly on slices or use more effective means of storing buffers depending on the Input implementation.

    To upgrade you replace the previous concrete Input type with a generic, use its associated type if required, and refer to the Buffer associated type to allow for zero-copy parsing::

    -fn http_version(i: Input<u8>) -> U8Result<&[u8]>;
    +fn http_version<I: Input<Token=u8>>(i: I) -> SimpleResult<I, I::Buffer>;
    

    The associated types can be restricted if requried:

    fn request<I: U8Input>(i: I) -> SimpleResult<I, (Request<I::Buffer>, Vec<Header<I::Buffer>>)>
      where I::Buffer: ::std::ops::Deref<Target=[u8]>;
    
  • Backwards-incompatible: Moved types into a more logical module structure, prelude now exists as a prelude module.

  • Backwards-incompatible: chomp::Error is no longer an enum, this is to facillitate the support of backtraces while keeping code compatible between the different build profiles.

    Use chomp::Error::expected_token to determine if a specific token was expected.

  • Feature verbose_error is now default

Removed

  • Input::incomplete
  • Input::new
  • ParseResult::expect
  • ParseResult::unwrap_err
  • ParseResult::unwrap
  • buffer::IntoStream
  • primitives::InputClone
  • primitives::State

Bugfixes

  • combinators::bounded now have a defined behavior when a Range<usize> has start == end: They will parse exactly start times. This also fixed a few overflows and unreachable code being reachable.
  • combinators::bounded::many_till got fixed for an overflow happening when 0: usize was used to limit the number of iterations.

[0.2.6] - 2016-07-07

Bugfixes

  • Macro expansion is now again compatible with nightly.
  • Now uses std feature of conv dependency, fixing build breakage on rustc 1.2.0.

[0.2.5] - 2016-03-08

Added

  • combinators::bounded::sep_by: Bounded version of combinators::sep_by and combinators::sep_by1.

Changes

  • Improved performance of combinators using iterators.
  • Updated bitflags dependency

[0.2.4] - 2016-01-24

Changes

  • Backwards-incompatible: combinators::option will now return the default value if the parser reports incomplete and the input is finite.

[0.2.3] - 2016-01-21

Added

  • buffer::StreamError now implements From<ParseError>

Changes

  • Backwards-incompatible: combinators::or will now retry with the second parser if the first parser reports incomplete and the input is finite.

  • Improvements to parse! macro to make it more general and to make it easier to write simple parsers as one line. Completely updated grammar and reimplemented the macro to include:

    • Alternation operator (<|>)
    • Skip operator (<*)
    • Then operator (>>)
    • ret and err can now be used inline
    • Backwards-incompatible: ; is no longer allowed to terminate a parse! block.

[0.2.2] - 2016-01-13

Changes

  • Input::ret, ParseResult::bind and ParseResult::then no longer have type parameter defaults. This change only affects people on nightly who have type-parameter-defaults enabled. See Rust pull request #30724.

[0.2.1] - 2015-12-20

Changes

  • buffer::GrowingBuffer and buffer::data_source::ReadDataSource now derive Debug.
  • Rustdoc for public items previously lacking any documentation.

[0.2.0] - 2015-12-16

Added

  • parse_only: Runs a given parser on a finite input.
  • combinators::bounded::many: combinator applying a parser within a range bound, storing the data in a T: FromIterator.
  • combinators::bounded::skip_many: combinator applying a parser within a range bound, throwing away all produced data.
  • combinators::bounded::many_till: combinator applying a parser within a range bound until a second parser succeeds. If the second parser does not succeed within the given range the parsing will fail. The matches from the first parser will be stored in a T: FromIterator.

Changes

  • count, many1, sep_by1 now properly uses Iterator::size_hint
  • Backwards-incompatible: many, many1, sep_by, sep_by1, skip_many, skip_many1 are no longer considered incomplete if they end with a partial match as long as they have managed to satisfy the minimum count of matches.
  • Backwards-incompatible: buffer::ParseError has been renamed to buffer::StreamError to not conflict with the simple ParseError.
  • Slightly improved performance for count, many, many1, sep_by, sep_by1.

Deprecated

  • Input::new

    Use parse_only or buffer::SliceStream to parse a slice instead. For any advanced usage create an Input using primitives::input::new.

  • ParseResult::unwrap, ParseResult::unwrap_err, ParseResult::expect

    Use parse_only or the buffer::Stream implementations to obtain a Result instead of acting on the ParseResult directly.

[0.1.2] - 2015-12-02

Added

  • ascii::digit
  • ascii::is_end_of_line
  • ascii::is_horizontal_space
  • ascii::signed
  • ascii::skip_whitespace
  • combinators::look_ahead
  • combinators::many_till
  • combinators::matched_by
  • combinators::sep_by1
  • combinators::sep_by
  • combinators::skip_many1
  • parsers::peek_next
  • parsers::run_scanner
  • parsers::satisfy_with

[0.1.1] - 2015-11-28

Added

  • parsers::Error::new, useful for creating error values of unknown type.

[0.1.0] - 2015-11-24

Initial release.