Commit Graph

530 Commits

Author SHA1 Message Date
rvcas e8a71cd63b chore: rename usefulness module 2023-08-01 21:13:50 -04:00
rvcas 03efb46e6f feat(exhaustiveness): algorithm U borrowed from elm 2023-08-01 21:13:50 -04:00
rvcas 97acd6d7bd
chore: Release 2023-07-15 21:37:10 -04:00
rvcas 77a627817b
chore: prepare changelog for release 2023-07-15 21:34:41 -04:00
rvcas 1b8e94fe32
feat: expect boolean sugar 2023-07-15 20:50:02 -04:00
rvcas db3b5c74bb fix: todo and fail spans 2023-07-15 20:08:16 -04:00
rvcas 69fdee9f7e fix: trace expr 2023-07-15 20:08:16 -04:00
rvcas 2edfd33594 fix: some attempted adjustments 2023-07-15 20:08:16 -04:00
rvcas 252b760ca1
test: remove prefix on all format tests 2023-07-14 16:56:27 -04:00
rvcas eafe3cdf75
test: fail with expr relates to #675 2023-07-14 13:09:55 -04:00
rvcas 621017bd93
chore: Release 2023-07-14 10:55:13 -04:00
rvcas e7c1b28b52
feat: add ability to reference validators in tests closes #632 2023-07-12 18:29:03 -04:00
rvcas 13ee62c05c fix: don't break failing test defs for current users 2023-07-12 09:16:37 -04:00
rvcas 03e7d6e944 feat: update syntax for failing test to be more consistent 2023-07-12 09:16:37 -04:00
rvcas 1ab1ff9a1f feat: rename error to fail 2023-07-12 09:16:37 -04:00
rvcas 914b8d4e74
fix: infer validator args as Data if Unbound closes #649 2023-07-11 13:51:17 -04:00
Cainã Costa b80c41b4b7 chore: cargo fmt 2023-07-11 13:06:25 -04:00
Cainã Costa 14652abd4f fix: port last missing test
This test has been added after the first implementation, so we move it
to the new format :)
2023-07-11 13:06:25 -04:00
Cainã Costa 7f7a86765d feat: bring back formatting imdepotency test 2023-07-11 13:06:25 -04:00
Cainã Costa c27ef8ad93 chore: refactor formatting tests
This changes the tests from normal assertions into snapshot tests, as
well as standardizing test names.
2023-07-11 13:06:25 -04:00
rvcas 94bf75dd1c
chore: delete unreferenced snapshots 2023-07-06 21:00:13 -04:00
KtorZ 126f2ab004 Implement new formatter for 'int'.
This is used for constants and patterns, which can carry negative
   values.
2023-07-06 16:10:46 -04:00
KtorZ 78d34f7f76 Fix parsing of negative int patterns and constants
This was trickier than expected as the expression parser, and in particular the bin-op parser will interpret negative patterns as a continuation of a binary operation and eventually choke on the next right-arrow symbol. This is due to how we actually completely erase newlines once we're done with the lexer. The newline separating when clause is actually semantically important. In principle, we could only parse an expression until the next newline.

  Ideally, we would keep that newline in the list of token but it's difficult to figure out which newline to keep between two right arrows since a clause guard can be written over multiple lines. Though, since we know that this is only truly a problem for negative integers, we can use the same trick as for tuples and define a new 'NewLineMinus' token. That token CANNOT be part of a binop expression. That means it's impossible to write a binary operation with a minus over multiple lines, or more specifically, with the '-' symbol on a newline. This sounds like a fair limitation. What we get in exchange is less ambiguity when parsing patterns following expressions in when clause cases.

  Another more cumbersome option could be to preserve the first newline encountered after a 'right-arrow' symbol and before any parenthesis or curly brace is found (which would otherwise signal the beginning of a new block). That requires to traverse, at least partially, the list of tokens twice. This feels unnecessary for now and until we do face a similar issue with a binary operator.
2023-07-06 16:10:46 -04:00
KtorZ 346df47232 Refactor chain parser
The main goal is to make the parser more reusable to be used for when-clauses, instead of the expression parser. A side goal has been to make it more readable by moving the construction of some untyped expression as method on UntypedExpr. Doing so, I got rid of the extra temporary 'ParseArg' type and re-used the generic 'CallArg' instead by simply using an Option<UntypedExpr> as value to get the same semantic as 'ParseArg' (which would distinguish between plain call args and holes). Now the chained parser is in a bit more reusable state.
2023-07-06 16:10:46 -04:00
KtorZ 549cf22cdd Rename (Un)TypedExpr.Int -> (Un)TypedExpr.UInt
We do not actually every parse negative values in there, as a negative value is a combination of a 'Negate' and 'UInt' expression.
  However, for patterns and constant, it'll be simpler to parse whole Int values as there's no ambiguity with arithmetic operations
  there. To avoid confusion of having some 'Int' constructors containing only non-negative values, and some being on the whole range,
  I've renamed the constructor to 'UInt' to make this more obvious.
2023-07-06 16:10:46 -04:00
KtorZ 5a4a2faa4d Split pattern parser into individual modules. 2023-07-06 16:10:46 -04:00
KtorZ 0650d6152d rename test cases for when/clause to somewhat match the file hierarchy. 2023-07-06 16:10:46 -04:00
KtorZ ed85cb1c00
Fix todo/error parsing
This was a bit more tricky than anticipated but played out nicely in
  the end. Now we have one holistic way of parsing todos and errors
  instead of it being duplicated between when/clause and sequence. The
  error/todo parser has been moved up to the expression part rather than
  being managed when parsing sequences. Not sure what motivated that to
  begin with.

  Fixes #621.
2023-07-05 20:12:57 +02:00
rvcas e331b3449b
chore: clippy fix 2023-07-05 12:06:03 -04:00
KtorZ a306d6e9f2
Move chain and chained parsing into their own submodule
Alleviate a bit more the top-level expression parser. Note that we
probably need a bit more disciplined in what we export and at what level
because there doesn't seem to be much logic as for whether a parser is
private, exported to the crate only or to the wide open. I'd be in favor
of exporting everything by default.
2023-07-05 15:18:07 +02:00
KtorZ 4f6defcf3e
rename: 'r' → 'expression' & 'seq_r' → 'sequence'
Better readability.
2023-07-05 14:42:14 +02:00
KtorZ 66296df9c3
Move parsing of literals under new 'literal' parser module group
Also moved the logic for 'int' and 'string' there though it is trivial. Yet, for bytearray, it tidies things nicely by removing them from the 'utils' module.
2023-07-05 14:37:29 +02:00
KtorZ e15cdaf248
Move 'utils::bytearray' to 'expr/bytearray' 2023-07-05 14:10:47 +02:00
KtorZ 44eb501d78
Favor pattern-match over if-else when parsing assignment kinds
Equality on a union-type is potentially dangerous as the compiler won't
complain if we add a new case that we don't cover. Reversing the
assignment by yielding a `Token` for a given `AssignmentKind`. This way
we can use a pattern-match that got us covered for future cases.
2023-07-05 14:01:13 +02:00
KtorZ 93e010b345
Replace 'public' utils with a more generic 'optional_flag'
The 'public' util was arguably not really adding much except a layer of indirection.
  In the end, one useful parsing behavior to abstract is the idea of 'optional flag' that we use for both 'pub' and 'opaque' keywords.
2023-07-05 13:57:34 +02:00
rvcas 5e8edcb340
test(parser): finish moving tests to their correct modules 2023-07-04 17:48:48 -04:00
rvcas 47567c5e6f
test(parser): some adjustments after rebase with @ktorz fix 2023-07-04 17:19:30 -04:00
rvcas b25db429be
test(parser): anon binop and ambiguous sequence 2023-07-04 17:19:30 -04:00
rvcas 8a6c81493c
test(parser): record create 2023-07-04 17:19:30 -04:00
rvcas a75bcff5c8
test(parser): type alias, anon fn, record update and more 2023-07-04 17:19:30 -04:00
rvcas bd8c13c372
test(parser): move over the validator tests and some misc tests to parser 2023-07-04 17:19:29 -04:00
rvcas 6b05d6a91e
test(parser): rename definitions to definition and more tests 2023-07-04 17:19:29 -04:00
rvcas baf807ca2d
test(parser): list spread 2023-07-04 17:19:29 -04:00
rvcas 44d0432560
test(parser): int list 2023-07-04 17:19:29 -04:00
rvcas f9c099a923
test: add indoc to assert_expr macro 2023-07-04 17:19:29 -04:00
rvcas 715752718d
test: assert_module 2023-07-04 17:19:29 -04:00
rvcas da0b969865
test: adjust snapshots 2023-07-04 17:19:29 -04:00
rvcas 8a7df7f66b
test: add empty list test 2023-07-04 17:19:29 -04:00
Cainã Costa 291dedf4e8
chore: refactor all parse tests to use assert_parse! 2023-07-04 17:19:28 -04:00
rvcas f878ef7cef
feat: move some token processing to the lexer 2023-07-04 17:19:28 -04:00
rvcas 2226747dc1
feat: finish splitting up parsers 2023-07-04 17:19:28 -04:00
Cainã Costa 63cdb8aa09
chore: add more details on snapshot tests
We added a macro to add more information about the code that is being
tested, so we can add lots and lots of small snapshot tests.
2023-07-04 17:19:28 -04:00
Cainã Costa eeaa1a05d2
feat: add first code snapshot test with insta 2023-07-04 17:19:28 -04:00
Cainã Costa 58c854fd3f
feat: add insta as dependency
We are going to start to add "golden"/snapshot tests, so we are using
[insta](https://insta.rs) to do so.
2023-07-04 17:19:28 -04:00
rvcas eea94fc9a4
feat: move anon fn, let, and expect 2023-07-04 17:19:28 -04:00
rvcas 9c98fc8026
feat: start splitting apart expr_parser 2023-07-04 17:19:28 -04:00
rvcas e3ed5d3b00
feat: move expr_parser and remove module.rs to definitions 2023-07-04 17:19:28 -04:00
rvcas 3339d41fdd
feat: finish moving definitions and start exprs 2023-07-04 17:19:27 -04:00
rvcas fc580d4fa0
feat(parser): move definitions to their own modules 2023-07-04 17:19:27 -04:00
KtorZ 49098d5a45 Bump miette to 5.9.0
No particular reason, but it's good to be up-to-date with our dependencies.
2023-07-04 16:51:59 -04:00
KtorZ 5a6cc855e6 Use byte count for token span in the lexer.
Somehow, miette doesn't play well with spans when using chars indices.
  So we have to count the number of bytes in strings / chars, so that
  spans align accordingly.
2023-07-04 16:51:59 -04:00
microproofs 67c072a1a9 test: add acceptance test 86
fix: prevent mutual recursion for expect type code gen functions
2023-07-04 12:24:25 -04:00
microproofs d641f731b7 fix: needed a stricter check for expect_pattern func on discard pattern 2023-06-28 15:54:59 -04:00
rvcas 90ff211205
chore: Release 2023-06-23 19:41:14 -04:00
rvcas d633129ddf
fix: clearer unused var warning closes #579 2023-06-23 19:04:54 -04:00
microproofs 8b3504e9a1 fix: `expect _ = ...` not including the cast from data logic if the type is data and right hand has a type annotation 2023-06-23 18:39:12 -04:00
microproofs 226556bdd6 fix: builtins using the incorrect data to type conversion when used as a function param. 2023-06-23 14:31:19 -04:00
microproofs db369da96e feat: Make traces produced by expect dependent on
the value of the tracing flag.
2023-06-23 14:03:23 -04:00
microproofs dbfa08a5a7 fix: issue with tuple clause
It was not consuming the next case if there was no condition being checked in the clause.
Now it properly always consumes the next clause unless last clause.
2023-06-23 12:36:15 -04:00
microproofs 626033ff9b fix: attempt to convert from opaque before doing monomorphization 2023-06-22 18:20:31 -04:00
microproofs 24f5c4de6b fix: the final clause of a when expecting another clause afterwards in nested list cases.
fix: all elements were being destructured in tuple clauses even if not used
2023-06-19 21:43:38 -04:00
KtorZ 4252ee6373
Implement formatter for anon binop. 2023-06-17 08:44:59 +02:00
KtorZ 91f03abb7b
Support all binary operator in the anonymous binop parser. 2023-06-17 08:44:45 +02:00
KtorZ d0b4c1c3b5
Add remaining boolean comparison operator to anon binop parser.
Nothing to see here as they all have the same signature. Implementing
  arithmetic bin-operators and boolean logic operators will require some
  more logic.
2023-06-17 07:57:37 +02:00
KtorZ ec94230294
Extend parser to accept anonymous binop as expressions.
This is simply a syntactic sugar which desugarize to a function call with two arguments mapped to the specified binary operator.
  Only works for '>' at this stage as a PoC, extending to all binop in the next commit.
2023-06-17 07:36:11 +02:00
KtorZ ba911d48ea
Refactor 'is_capture' field on function expressions.
Refactored into an enum to make it easier to extend with a new variant to support binary operators.
2023-06-17 07:26:46 +02:00
rvcas 85d82e5aec
chore: Release 2023-06-13 21:24:41 -04:00
microproofs 379c2fe2bf chore: Release 2023-06-13 20:32:22 -04:00
microproofs c3bb7b0f75 fix: tail list being expected on when it should be empty 2023-06-13 12:03:38 -04:00
microproofs af36b5ac77 fixes:
fix: Issue where using var pattern in a when was passing the constr index instead of the constr
fix: Issue where expecting on a list had unexpected behaviors based on list length
2023-06-13 12:03:38 -04:00
rvcas aeaec6bcd8
fix: record format when module select
- instead of checking the container we need to check
  the FieldAccess label.

closes #601
2023-06-13 00:18:32 -04:00
microproofs c5af6e0be3 chore: Release 2023-06-08 19:34:51 -04:00
KtorZ 6bd8e94e17
Preserve numeric underscore and hexadecimal notation through formatting. 2023-06-08 16:37:20 +02:00
KtorZ 0b7682306f
Refactor formatter to use new 'self.int' helper function. 2023-06-08 15:34:28 +02:00
KtorZ 79a2174f0a
Extend parser to support int as hexadecimal and numeric underscore.
We only allow numeric underscore for decimal numbers as I am not sure how we can define it for non-decimal numbers?
2023-06-08 15:33:50 +02:00
KtorZ 0ea11a4d13
Introduce new test cases for hexadecimal and underscore parsing. 2023-06-08 13:26:22 +02:00
rvcas 3fc9c8e0db
chore: re-add empty line handling by @KtorZ
Co-authored-by: KtorZ
2023-06-07 17:21:04 -04:00
rvcas 1747090931
fix: fmt crashing with comment at end of file
closes #568
2023-06-07 15:59:54 -04:00
KtorZ 0afc3aba13
Fix operator precedences, in particular |>
Fixes #571.
2023-06-06 17:17:47 +02:00
microproofs 5faa925aea fix: error when using nested boolean checks in when conditions 2023-06-06 03:04:12 -04:00
microproofs bfd2a50a6b fix: zero arg functions were grabbing extra dependencies they didn't need to
fix: Had the wrong conversion for constant maps to plutus data. Fixed to check for right conversion
2023-06-04 15:23:36 -04:00
rvcas cf6d04e95b
chore: some clippy warnings 2023-06-02 19:47:52 -04:00
microproofs cdf8bd6548 fix: list items in when were not being added to scope
fix: tuple clause must preserve previous clause properties state
2023-06-02 18:38:21 -04:00
microproofs 8f0cf289b4 fixes:
fix: rearrange clauses and fill in gaps now handles nested patterns in a uniform way
fix: discards in records was being sorted incorrectly leading to type issues
chore: remove some filter maps in cases where None is impossible anyway
chore: some refactoring on a couple functions to clean up
2023-06-02 18:38:21 -04:00
rvcas cb9a140601
chore: Release 2023-06-02 00:34:07 -04:00
rvcas e5d9398625 fix: add module name to type mismatch error
* if expected and given are equal then we show
  the module
* we could do it in all cases it looks kinda nice
* format is `Type - ModuleName`
2023-06-01 20:00:36 -04:00
microproofs 6955f79035 chore: update changelog
fix: Minor improvement to record update to use empty list instead of the null list from a record fields list.
2023-06-01 12:22:42 -04:00
microproofs c710d488d6 fix: need to sort record update args so they match indices order 2023-05-30 20:23:12 -04:00
microproofs 52a51acc69 fix: fix record update so it actually works
Created multiple tests of varying record updates
2023-05-30 20:23:12 -04:00
microproofs a65821d5ab fix: constrs that contain fields now work when passed as an arg to a function.
Convert acceptance test 22

Create test for passing constr as a function
2023-05-30 17:28:52 -04:00