0.3.13 (2026-06-06)
- attach do-blocks to dot calls with unary names (e9d0b8f)
- cap operator newlines by gap to RHS (52f4a45)
- classify map update pipe with binding ops (6f4d2ed)
- consume semicolons in bare stab body (ca367cd)
- don't advance past ) in empty call parens (dee5ef6)
- empty parens as a function call (0d38212)
- escaped \ operator as match in fn args (70ed091)
- greedy alias chain in parse_alias (a996978)
- handle {} in struct dot expression (1363ceb)
- handle all struct type expressions (a9a2161)
- handle do/end after dot-call expressions (871e059)
- handle in_match_op on comma LHS in fn args (6ee2f2a)
- handle newlines in empty call parens (3f530b7)
- handle newlines in empty struct type parens (9730cc4)
- handle nil/true/false in struct module attrs (9b27166)
- handle open paren in lone module attribute (d013fe5)
- handle semicolons in bare stab expression bodies (0cc8403)
- handle tuple literal in struct type after @ operator (e1ee310)
- handle unary ops in map update call skip (516496f)
- include bracket access in outer module attr (5b0df75)
- infinite loop in malformed tuples (e036e83)
- infix operator newlines metadata computation (e9b2535)
- low precedence operator as rhs of pipe in map (16f3898)
- make ellipsis standalone before dot and dot_call (cd9eef5)
- parse remote calls with args in struct types (0729b6f)
- parse sigil after @ in struct literal (1525aba)
- parse struct type calls like %@foo(){ (2502744)
- parse struct types with @ attr call args like %@t(o){} (b81fcaa)
- parse struct types with remote calls (00b4bf2)
- precedence inside map key (9067e06)
- push do-blocks into rightmost call for operator expressions (5f94955)
- raise left_paren precedence above unary (1252a58)
- range operator attribute in struct type (4e60123)
- semicolon separated arrow in try body (7e15ea5)
- semicolon separated arrows in case clause (5f09e66)
- semicolon separated arrows in case clause with arg in second (7e0f982)
- separate cond clauses after bare -> with ; (85cbf1c)
- skip consecutive eol/semi in grouped expressions (d3e7fd2)
- skip eoe tokens in parse_dot_expression (c3c1330)
- stop bare stab body at semicolons (26f42eb)
- stop filtering nil values from map update pairs (32be63f)
- stop map update pipe scan at closing delimiter (5b7eef7)
- struct with dynamic module via call + access (476dfef)
- ternary operatorin struct argument (8a790d0)
- treat pipe in map as map update when binding ops appear inside function call args (efbe6cf)
- widen stab_state through infix operators (c264b35)
0.3.12 (2026-05-16)
0.3.11 (2026-04-23)
- prefer recursion over multiple
Keyword.has_key?(#129) (47fad18) - replace list length-checks with pattern matching (#128) (883764e)
0.3.10 (2026-03-05)
0.3.9 (2026-03-04)
0.3.8 (2026-03-04)
- handle ellipsis before <-, ::, and when (#114) (221fe49)
- parse newline ternary continuation after ellipsis (#115) (708da64)
- preserve fn newline metadata after semicolons (#112) (52099ff)
- preserve leading nil in stab clause body (#120) (f0a79a0), closes #113
0.3.7 (2026-02-19)
- allow list literals in struct type parsing (#111) (f2eabee)
- parse assoc-map values outside key context (#102) (6751c15)
- parse nested struct/map targets in struct literals (#105) (3d1cc61)
- support dot-call struct targets like %e.(){} (#110) (706f0b0)
0.3.6 (2026-02-16)
0.3.5 (2026-02-10)
0.3.4 (2026-02-09)
0.3.3 (2026-02-08)
- add
:eofto the terminator list inparse_stab_expression/1(#92) (8f976ef) - better align parsing with elixir's matched/unmatched/no-parens (#93) (808783e)
0.3.2 (2026-02-01)
- associativity in bracketless kw list (#89) (91b5d5b)
- extract newlines only from newline carrying tokens (#86) (edba800)
- improve handling of matched/unmatched expressions (#88) (dd45cb1)
- keyword list associativity (#85) (a7d2a54)
- parse ellipsis_op as unary operator (#83) (e86f1f4)
- rearrange
!(left) in right(#91) (fae2579)
0.3.1 (2026-01-20)
0.3.0 (2026-01-19)
- handle eof inside list-esque constructs (#67) (14a2bf3)
- handle no_fuel_remaining in parse_with_comments (#73) (f777bb4)
- improve recovery from unexpected semicolons (#70) (792e9c9)
- infinite loop parsing incomplete struct (#66) (bebd845)
- parsing crashes on code with errors (#65) (b6bbdb4)
- recover from incomplete keyword lists (#71) (0513a5d)
0.2.1 (2025-06-03)
0.2.0 (2025-03-07)
- correctly match on successful tokenize (f937a7a)
- parse do blocks after paren_identifiers (2320bd4)
- reset nesting inside parameterless right stab expressions (1bf80bc)
0.1.5 (2025-02-07)
0.1.4 (2024-12-20)
0.1.3 (2024-06-19)
0.1.2 (2024-06-17)
0.1.1 (2024-06-14)
- include src directory (63b48a4)
0.1.0 (2024-06-14)
- accept column and line options (12a1827)
- accept options (d2bd1d5)
- access syntax (0372af3)
- adds &parse_with_comments/2 function (#19) (e90e686)
- anon functions (0548457)
- anonymous function capture syntax (3d553a0)
- at expressions (3a6e179)
- call anon function (f47b1e7)
- charlists (5f17497)
- chars, more literal encodings, eoe meta (80d26f2)
- container_cursor_to_quoted/2 (#33) (e47385f)
- do blocks, the right way (c3117a9)
- do/end token metadata (bcd839b)
- else block in if exprs (40f815b)
- end_of_expression and closing metadata (5424109)
- environment querying (#35) (e5111c5)
- even more error handling (6359193)
- even more more error handling (e5e7f50)
- fixup anon functions (34af2db)
- fuel (#23) (af84760)
- function calls (b6f3137)
- function capture (43f7b71)
- grouped expressions (44c87d3)
- handle access syntax on multiple lines (#10) (83d739a)
- heredoc (d8c9711)
- line and column meta (6807fd7)
- literal encoder (72b72fd)
- more access syntax (e91752a)
- more error handling (5e1f96b)
- more operators (96ebe05)
- multi aliases (b4d40f0), closes #3
- multi line grouped expressions (50f6c7c)
- parse a lot of stuff (e79f446)
- parse booleans (dba4466)
- parse call experssions to allow proper unquote (6c28852)
- parse floats (a76cdb0)
- pipe operator in lists (226e339)
- power operator (ad57a2b)
- quoted atom and match op (5a80e4b)
- rewrite what i had (4bbacdc)
- right stab expressions (1723064)
- sigils (24909d0)
- some error handling (a3e8534)
- string interpolation (7326458)
- structs and special identifiers (05fe4ed)
- tuples and left stab expressions (c036033)
- unsafe atoms (4cd820c)
- when (77c0eda)
- 0-arity anon function type spec (586c087)
- access syntax on dot call (d2bfb45)
- add eoe metadata to 0-arity anon functions (444b9a2)
- aliases can start with non alias tokens (7c557cc), closes #5
- ambiguous_op meta (b3e8ea4)
- bin: create tmp dir (#1) (39cc50b)
- block identifiers that take right stabs (1dbf037)
- blocks inside paren function calls (7e61ec2), closes #11
- bracketless kw list with new line between key and value (6089f71)
- consume fuel in infix loop (#24) (555b977)
- do blocks inside grouped expressions (e219362)
- don't encode errors directly into AST (#27) (df7732f)
- don't include closing meta when paren identifier has error (0580d2c)
- don't include closing meta when paren identifier has error (c3e1b1d)
- elixir-makeup/makeup (#17) (db80ec4)
- ellipsis op (4577b8c)
- empty block_identifiers (#20) (5953bed)
- env: reset pdict after expansion (#36) (d1db691)
- error handling (26e68d4)
- fix binding power of when_op (77db668)
- function calls with multi line args (8888a71)
- handle code that begins with comments (f549fb4)
- handle op_identifier (f5b9ba0)
- handle prefix operator with newline (#22) (4a2fcb6)
- in match op precedence (c8ebe2a)
- initialize error field in interpolation parser (8f991b8)
- list as only expr in stab (5712150)
- literal encoding for kw_identifier and capture ints (c6b206f)
- lone do blocks inside other expressions (8b47e3a)
- lone range op (9d631ff)
- more access syntax (d3ed437)
- more robust multi aliases (fb1e213)
- multiline lists (b36cbf5)
- nested access syntax (#15) (7af1625), closes #14
- new line after fn keyword (bbcf66a)
- newlines in bitstring (a585cb2)
- newlines in call expression (52ec090)
- newlines inside interpolation (99eb9ab)
- newlines on map dot syntax (3a6b8fe)
- newlines on tuples (774f5c5)
- parse list-like syntax error with a single item (#21) (d39f91d)
- parsing right stabs (8587642)
- pin operator in struct type (8e53932)
- pipe operator precedence (07fab38)
- precedence for prefix style dual_op (620ada5)
- precedence of access syntax (8111a21)
- remaining differences between string_to_quoted (c67d644)
- remove dbg and some comments (3ab807e)
- rest nestings in compound data structures (957da86)
- semicolons (#28) (f913c60)
- single element lists (e655d88)
- special case capture_int (bd03ac6)
- special case pipe op for maps (c05af09)
- stab collection, also more syntax (e98ed66)
- stabs within grouped expressions (b94706f)
- struct literal with module attr as type (1a0a6af)
- struct types (#16) (1000574), closes #13
- trailing commas (f260f97), closes #7
- trailing commas in lists (149c774)
- turn grouped !/not expressions into blocks (6a37c61)
- type/assoc precedence (62aa23e)
- unary operator (9faf653)
- unary operator for real (0be0f08)
- unquote in struct type (ea6dc48)
- unquote_splicing quirks (a9bce8a)
- unsafe keywords (da37dfd)
- upstream changes to the tokenizer (#34) (178b00b)
- various changes from testing elixir codebase (6312312)
- when operator in normal usage (bd7f244)
- don't use kw for opts (dc20c07)
- release 0.1.0 (4501ab4)