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 18 commits into
base: dev
Choose a base branch
from
Draft

Syntax factory #1530

wants to merge 18 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 84.77509% with 44 lines in your changes missing coverage. Please review.

Project coverage is 50.88%. Comparing base (4390190) to head (3ce71cb).

Files with missing lines Patch % Lines
src/haz3lcore/lang/term/Grammar.re 82.75% 30 Missing ⚠️
src/haz3lmenhir/Conversion.re 87.50% 14 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              dev    #1530      +/-   ##
==========================================
+ Coverage   50.33%   50.88%   +0.55%     
==========================================
  Files         103      103              
  Lines       10442    10594     +152     
==========================================
+ Hits         5256     5391     +135     
- Misses       5186     5203      +17     
Files with missing lines Coverage Δ
src/haz3lcore/lang/term/IdTagged.re 66.66% <100.00%> (+3.50%) ⬆️
src/haz3lcore/lang/term/Typ.re 44.20% <ø> (ø)
src/haz3lmenhir/Conversion.re 54.41% <87.50%> (-1.36%) ⬇️
src/haz3lcore/lang/term/Grammar.re 74.35% <82.75%> (+7.01%) ⬆️

... and 3 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.

Base automatically changed from syntax_playground to dev February 25, 2025 17:20
let default_annotation = ann =>
Option.value(~default=DefaultAnnotation.default_value(), ann);
module Exp = {
let invalid = (~ann=?, s): exp_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.

Figure out if we want to have a pattern match from the original one to make sure we don't miss one of these.

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