🕷 software releases

by ryan davis


sexp_processor version 4.10.0 has been released!

Published 2017-07-17 @ 15:52

sexp_processor branches from ParseTree bringing all the generic sexp processing tools with it. Sexp, SexpProcessor, Environment, etc… all for your language processing pleasure.


4.10.0 / 2017-07-17

  • 2 major enhancements:

    • Added experimental pattern matcher to Sexp. Forked from sexp_path.
    • Extended s to take a block and return a matcher: eg s{ s(:defn, atom, , __) }
  • 23 minor enhancements:

    • Added $STRICT_SEXP to crank down Sexp.[] and friends.
    • Added Matcher#/ w/ real functionality.
    • Added Sexp#/ to search with new patterns.
    • Added Sexp#map to ensure you get a Sexp back.
    • Added Sexp#new to create a new sexp with the same file/line/comment info.
    • Added Sexp#search_each to recursively search w/ new patterns. Returns enum if no block.
    • Added Sexp#sexp_body=
    • Added Sexp::Matcher.match_subs? and .match_subs= to extend =~ so you can match strictly.
    • Added Sexp::Matcher.parse to convert lispy string to safe matcher: “(defn atom _ ___)”
    • Added all mutation methods to STRICT_SEXP >= 4
    • Added deprecation message to Sexp#structure for [s(…)] forms.
    • Added strict_sexp.rb to help you clamp down for future changes. STRICT_SEXP=1+
    • Auto-require strict_sexp if $STRICT_SEXP is > 0.
    • Converted a lot of indexed access to sexp_type/sexp_body, etc.
    • Finally enforced SexpProcessor#process to only process sexps, not bare arrays.
    • Made Sexp#/ double-dispatch to Matcher#/.
    • Made Sexp#gsub work with new patterns.
    • Made Sexp#sub work with new patterns.
    • Made SexpProcessor STRICT_SEXP=4 compliant.
    • Retired SexpMatchSpecial & SexpAny. Never used by anything AFAICT.
    • Sexp#=== goes back to default.
    • Sexp#=~(pat) calls pat =~ self.
    • Sexp#sexp_body now takes optional offset. Use instead of sexp[n..-1].
  • 9 bug fixes:

    • Extended Sexp::Matcher::Parser.parse to lex more forms of regexp.
    • Finished off all missing doco.
    • Fixed == methods on all Matcher classes to include ivars.
    • Fixed Child#satisfy? to properly return false if failed.
    • Fixed Sexp#sexp_body to return a sexp using Sexp#new.
    • Fixed map to use Sexp#new.
    • Only try to set c_type if it responds to it. Make STRICT_SEXP safe.
    • R2C has a hack in SexpProcessor to call sexp_type=. Renamed to c_type= in R2C.
    • Removed very obsolete attrset test from pt_testcase.rb
  • home: https://github.com/seattlerb/sexp_processor
  • rdoc: http://docs.seattlerb.org/sexp_processor