Commit graph

101 commits

Author SHA1 Message Date
Luke Boswell
a418bf4fb8
add is_loc_expr_suffixed helper 2024-04-14 13:45:00 +10:00
Luke Boswell
73b60113ff
fix for suffixed without arguments 2024-04-14 13:45:00 +10:00
Luke Boswell
56d91ce74c
support multiline suffixed statements 2024-04-14 13:45:00 +10:00
Luke Boswell
42fdcb7ff1
Make unit assignment optional for suffixed defs 2024-04-14 13:44:59 +10:00
Luke Boswell
ca01913ab3
add EExpr error for unexpected comma 2024-04-02 20:48:13 +11:00
Anton-4
30b5943b54
Merge pull request #6548 from roboteng/parser-docs
Parser docs examples
2024-03-26 19:35:39 +01:00
Anton-4
59ab438c1e
misc improvements 2024-03-26 16:38:09 +01:00
Luke Boswell
370ac1e6b8
move suffixed parsing into chomp_identifier_chain 2024-03-22 19:22:05 +11:00
Luke Boswell
e2557067c8
add nested snapshot for suffixed expr 2024-03-15 14:40:09 +11:00
Luke Boswell
8bbbd768ec
add snapshot test for suffixed expr 2024-03-15 14:39:21 +11:00
Richard Feldman
9bc0ab79af
Parse Expr::Suffixed 2024-03-15 14:39:14 +11:00
Richard Feldman
88042c2578
Rename has variable to implements 2024-03-15 14:39:04 +11:00
Brendan Hansknecht
5e8974177c
avoid bloating parse expr size 2023-12-02 21:18:32 -08:00
Brendan Hansknecht
3966d63e2f
add src and location to dbg 2023-12-02 21:18:31 -08:00
Brendan Hansknecht
b7f72eff86
add basic Dbg desugaring and LowLevelDbg 2023-11-29 21:05:48 -08:00
jecaro
55befee0b0
Dont swallow bad input while parsing spaces
Fix #5939
2023-11-21 19:47:17 +01:00
Anton-4
954f687666
minor fixes 2023-08-11 16:14:33 +02:00
Bryce Miller
afa5aaba94
has -> implements 2023-06-10 13:30:54 -04:00
Bryce Miller
e514d0cb83
Define and use IMPLEMENTS const in roc_parse::keyword 2023-05-29 07:21:27 -04:00
Bryce Miller
76c54c2e7a
loc_has_parser -> loc_implements_parser 2023-05-26 23:09:22 -04:00
Bryce Miller
b05befd770
ident: "has" -> ident: "implements" 2023-05-24 10:38:06 -04:00
Bryce Miller
46cb45f717
loc_has -> loc_implements 2023-05-20 19:24:08 -04:00
Bryce Miller
4b90948fcf
ast::HasAbilities -> ast::ImplementsAbilities 2023-05-20 19:13:01 -04:00
Bryce Miller
64c34a5c6d
ast::Has -> ast::Implements 2023-05-20 08:12:20 -04:00
Agustin Zubiaga
d1feb00170
Track spaces between : and <- in record builders 2023-05-17 11:49:06 -03:00
Agustin Zubiaga
731cd4257d
Record Builder colon arrow syntax 2023-05-16 22:44:55 -03:00
Agustin Zubiaga
232f5fd84c Take self by value in RecordField::to_* fns 2023-05-13 21:21:12 -03:00
Agustin Zubiaga
4a10ead0e4 Do not use unit for RecordField to_* fn errors 2023-05-13 21:15:54 -03:00
Agustin Zubiaga
f94004d137 Parse builders without backtracking from records 2023-05-13 20:05:42 -03:00
Agustin Zubiaga
d2a57112fd Unapplied record builder error 2023-05-08 20:16:38 -03:00
Agustin Zubiaga
6670fbb1ab Multiple record builder error 2023-05-08 19:26:47 -03:00
Agustin Zubiaga
735721769c Record Builder parsing 2023-05-05 23:26:20 -03:00
Jarl André Hübenthal
8bf888a5e6
chore: replace panic! with internal_error 2023-04-24 10:16:50 +02:00
Brendan Hansknecht
56ed985cc9
pass through correct path and type for ingested file 2023-04-09 14:03:32 -07:00
Brendan Hansknecht
f4411afbbc
get basic wiring of a value through the compiler 2023-04-09 14:03:31 -07:00
Joshua Warner
b5f284cd78
Fix several fmt+parse bugs found by fuzzing 2023-02-19 12:37:33 -08:00
Ayaz
9340a67e87
Merge pull request #4993 from joshuawarner32/tuple-gen-tuple-backend-experiment
Implement mono / code generation for tuples
2023-02-08 10:42:51 -05:00
Joshua Warner
3fee0d3e8f
Fix a bunch of bugs in parsing/formatting found by fuzzing 2023-02-07 20:25:56 -08:00
Joshua Warner
5a6be05ead
implement mono / lowering for tuples 2023-02-07 18:54:50 -08:00
Joshua Warner
31a4eb2bfd
Fix parsing of tuple accessors after an identifier - e.g. myIdent.2 2023-01-30 21:12:01 -08:00
Joshua Warner
3b51d7cd13
Fix multi-backpassing in top-level defs
Fixes #4821
2023-01-15 10:39:21 -08:00
Joshua Warner
0b8e68f70d
Fix approximately a bajillion fmt and parsing bugs
(discovered by fuzzing)

There's more to come, but this seems like a good batch for now.
2023-01-13 18:20:44 -08:00
Joshua Warner
94070e8ba6
Improve parsing of scalar literals
* Unify parsing of string literals and scalar literals, to (e.g.) ensure escapes are handled uniformly. Notably, this makes unicode escapes valid in scalar literals.
* Add a variety of custom error messages about specific failure cases of parsing string/scalar literals. For example, if we're expecting a string (e.g. a package name in the header) and the user tried using single quotes, give a clear message about that.
* Fix formatting of unicode escapes (they previously used {}, now correctly use () to match roc strings)
2023-01-07 15:12:52 -08:00
Joshua Warner
07ebc81cba
Be more lenient with indentation in record parsing
... and extract a shared helper with collection_trailing_sep_e, thereby resolving some inconsistencies with normal collection parsing.

... and delete some dead code while I'm at it
2023-01-02 18:53:15 -08:00
Joshua Warner
0da50a612d
Be more lenient with required indentation in collections
... and also remove a bunch of now-dead errors that can't be triggered.
2023-01-01 17:49:51 -08:00
Joshua Warner
a046428ce6
Add fuzzing for the formatter and fix bugs
This commit adds fuzzing for the (expr) formatter, with the same invariants that we use for fmt tests:
  * We start with text, which we parse
  * We format the AST, which must succeed
  * We parse back the AST and make sure it's identical igoring whitespace+comments
  * We format the new AST and assert it's equal to the first formatted version ("idempotency")

Interestingly, while a lot of bugs this found were in the formatter, it also found some parsing bugs.

It then fixes a bunch of bugs that fell out:
* Some small oversights in RemoveSpaces
* Make sure `_a` doesn't parse as an inferred type (`_`) followed by an identifier (parsing bug!)
* Call `extract_spaces` on a parsed expr before matching on it, lest it be Expr::SpaceBefore - when parsing aliases
* A few cases where the formatter generated invalid/different code
* Numerous formatting bugs that caused the formatting to not be idempotent

The last point there is worth talking further about. There were several cases where the old code was trying to enforce strong
opinions about how to insert newlines in function types and defs. In both of those cases, it looked like the goals of
(1) idempotency, (2) giving the user some say in the output, and (3) these strong opinions - were often in conflict.

For these cases, I erred on the side of following the user's existing choices about where to put newlines.

We can go back and re-add this strong opinionation later - but this seemed the right approach for now.
2022-12-17 09:52:09 -08:00
Joshua Warner
5f29402297
Give parser fuzzing some TLC
* The header + expr fuzzers can both be run again (header fuzzer had regressed).
* I ran the expr fuzzer for ~60 seconds with no additional panics uncovered
* "tab_crash" hit supposedly unreachable code in blankspace.rs - and I went to the liberty of dramatically simplifying all that code, rather than just trying to fix the bug
* Other failures were straight-forward error cases that should have been handled (and passed up the chain) instead of panicking
2022-12-11 08:39:52 -08:00
Folkert
b6622b71ec
stop parsing dbg as a value def 2022-11-30 14:18:48 +01:00
Joshua Warner
2b91af02df
Introduce record! combinator
... and refactor header parser to fully use combinators, in support of future combinator-based superpowers
2022-11-28 20:25:55 -08:00
Joshua Warner
451b2c0ded
Refactor collections 2022-11-26 09:55:54 -08:00