Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Syntax factory #1530

Draft
wants to merge 8 commits into
base: syntax_playground
Choose a base branch
from
Draft

Syntax factory #1530

wants to merge 8 commits into from

Conversation

7h3kk1d
Copy link
Contributor

@7h3kk1d 7h3kk1d commented Feb 20, 2025

Add factory functions for AST

Needs to be merged after #1518

Adds a bunch of helper functions for building up the AST with default annotations.

…statics tests

- Uses temp module to remove fresh/invalid calls in statics test
- Uses Info error module to create expressions with default no errors
Copy link

codecov bot commented Feb 20, 2025

Codecov Report

Attention: Patch coverage is 83.14176% with 44 lines in your changes missing coverage. Please review.

Project coverage is 48.36%. Comparing base (593d49a) to head (e1e1597).

Files with missing lines Patch % Lines
src/haz3lcore/lang/term/Grammar.re 82.28% 31 Missing ⚠️
src/haz3lmenhir/Conversion.re 84.52% 13 Missing ⚠️
Additional details and impacted files
@@                  Coverage Diff                  @@
##           syntax_playground    #1530      +/-   ##
=====================================================
+ Coverage              47.75%   48.36%   +0.61%     
=====================================================
  Files                    102      102              
  Lines                  10342    10507     +165     
=====================================================
+ Hits                    4939     5082     +143     
- Misses                  5403     5425      +22     
Files with missing lines Coverage Δ
src/haz3lcore/lang/term/IdTagged.re 65.00% <100.00%> (+1.84%) ⬆️
src/haz3lmenhir/Conversion.re 52.61% <84.52%> (-1.56%) ⬇️
src/haz3lcore/lang/term/Grammar.re 75.37% <82.28%> (+8.25%) ⬆️

... and 2 files with indirect coverage changes

};

// pat
let pat_invalid = (~ann=?, s): pat_t(DefaultAnnotation.t) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can also nest modules inside here instead of prepending sort. This works with local open so you could do:

FTemp.(Exp.(list([int(1), int(2), cast(int(3), Typ.int(), Typ.unknown(Internal)))))

Comment on lines 433 to 445
ty_prod([
ty_tup_label(
ty_label("a"),
ty_prod([
ty_tup_label(
ty_label("b"),
ty_prod([
ty_tup_label(ty_label("c"), ty_unknown(Hole(EmptyHole))),
]),
),
]),
),
]),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example of the fresh calls being removed.

Comment on lines 795 to 884
Common(
TupleLabelError({
malformed_labels: [],
duplicate_labels: [],
invalid_labels: ["c"],
typ:
TupLabel(
Label("c") |> Typ.fresh,
Int |> Typ.fresh,
)
|> Typ.fresh,
}),
),
),
TupLabel(
error_exp(
Exp(Common(NoType(InvalidLabel("c")))),
Label("c"),
Inconsistent(
FTemp.(
Expectation({
ana:
ty_parens(
ty_prod([
ty_int(),
ty_tup_label(ty_label("a"), ty_string()),
]),
),
syn:
ty_prod([
ty_tup_label(ty_label("c"), ty_int()),
ty_tup_label(ty_label("a"), ty_string()),
]),
})
),
no_error_exp(Int(1)),
),
),
no_error_exp(
TupLabel(
no_error_exp(Label("a")),
no_error_exp(String("hello")),
),
),
tuple(
~ann=
Some(
Exp(
Common(
TupleLabelError({
malformed_labels: [],
duplicate_labels: [],
invalid_labels: ["c"],
typ:
FTemp.(
ty_prod([
ty_tup_label(ty_label("c"), ty_int()),
ty_tup_label(ty_label("a"), ty_string()),
])
),
}),
),
),
]),
),
),
[
{
tup_label(
~ann=
Some(
Exp(
Common(
TupleLabelError({
malformed_labels: [],
duplicate_labels: [],
invalid_labels: ["c"],
typ:
FTemp.(
ty_tup_label(ty_label("c"), ty_int())
),
}),
),
),
),
error_exp(
Exp(Common(NoType(InvalidLabel("c")))),
Label("c"),
),
int(1),
);
},
tup_label(label("a"), string("hello")),
],
),
),
no_error_exp(Bool(true)),
),
bool(true),
)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test is significantly smaller and only 30 out of the remaining ~90 lines are the AST. The rest are the annotations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant