Skip to content

v1.0.1

Choose a tag to compare

@pboling pboling released this 22 Feb 10:23
· 17 commits to main since this release
v1.0.1
3a6ee9a

1.0.1 - 2026-02-22

  • TAG: v1.0.1
  • COVERAGE: 98.13% -- 263/268 lines in 10 files
  • BRANCH COVERAGE: 91.18% -- 62/68 branches in 10 files
  • 96.77% documented

Added

  • Config#segment_pattern option — a parslet character class constraining which characters
    are valid inside token segments (default: "[A-Za-z0-9_]"). This prevents false positive
    token matches against Ruby block parameters ({ |x| expr }), shell variable expansion
    (${VAR:+val}), and other syntax that structurally resembles tokens but contains spaces
    or punctuation in the "segments".
  • Resolve#resolve now validates replacement keys against the config's segment_pattern and
    raises ArgumentError if a key contains characters that the grammar would never parse.

Fixed

  • False positive token matches — the grammar previously used any (match any character)
    for segment content, which allowed spaces, operators, and punctuation inside token segments.
    This caused Ruby block syntax like { |fp| File.exist?(fp) } and shell expansion like
    ${CLASSPATH:+:$CLASSPATH} to be incorrectly parsed as tokens. With multi-separator configs
    (["|", ":"]), the second | was reconstructed as : during on_missing: :keep
    roundtripping, silently corrupting source files. The grammar now uses
    match(segment_pattern) instead of any, limiting segments to word characters by default.

Official Discord 👉️ Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate on Polar Donate to my FLOSS efforts at ko-fi.com Donate to my FLOSS efforts using Patreon