add failing test for ignored fields canonicalization

This commit is contained in:
Joshua Warner 2025-01-10 21:46:20 -08:00
parent 408379f8d3
commit 7d464a2989
No known key found for this signature in database
GPG key ID: 89AD497003F93FDD
7 changed files with 217 additions and 3 deletions

View file

@ -974,6 +974,18 @@ pub fn canonicalize_expr<'a>(
}),
Output::default(),
),
Err(CanonicalizeRecordProblem::InvalidIgnoredValue {
field_name,
field_region,
record_region,
}) => (
Expr::RuntimeError(roc_problem::can::RuntimeError::InvalidIgnoredValue {
field_name,
field_region,
record_region,
}),
Output::default(),
),
}
} else {
// only (optionally qualified) variables can be updated, not arbitrary expressions
@ -1676,6 +1688,18 @@ pub fn canonicalize_record<'a>(
}),
Output::default(),
),
Err(CanonicalizeRecordProblem::InvalidIgnoredValue {
field_name,
field_region,
record_region,
}) => (
Expr::RuntimeError(roc_problem::can::RuntimeError::InvalidIgnoredValue {
field_name,
field_region,
record_region,
}),
Output::default(),
),
}
}
}
@ -2016,6 +2040,11 @@ enum CanonicalizeRecordProblem {
field_region: Region,
record_region: Region,
},
InvalidIgnoredValue {
field_name: Lowercase,
field_region: Region,
record_region: Region,
},
}
fn canonicalize_fields<'a>(
env: &mut Env<'a>,
@ -2064,6 +2093,21 @@ fn canonicalize_fields<'a>(
record_region: region,
});
}
Err(CanonicalizeFieldProblem::InvalidIgnoredValue {
field_name,
field_region,
}) => {
env.problems.push(Problem::InvalidIgnoredValue {
field_name: field_name.clone(),
field_region,
record_region: region,
});
return Err(CanonicalizeRecordProblem::InvalidIgnoredValue {
field_name,
field_region,
record_region: region,
});
}
}
}
@ -2075,6 +2119,10 @@ enum CanonicalizeFieldProblem {
field_name: Lowercase,
field_region: Region,
},
InvalidIgnoredValue {
field_name: Lowercase,
field_region: Region,
},
}
fn canonicalize_field<'a>(
env: &mut Env<'a>,
@ -2105,9 +2153,10 @@ fn canonicalize_field<'a>(
}),
// An ignored value, e.g. `{ _name: 123 }`
IgnoredValue(_, _, _) => {
internal_error!("Somehow an IgnoredValue record field was not desugared!");
}
IgnoredValue(name, _, value) => Err(CanonicalizeFieldProblem::InvalidIgnoredValue {
field_name: Lowercase::from(name.value),
field_region: Region::span_across(&name.region, &value.region),
}),
// A label with no value, e.g. `{ name }` (this is sugar for { name: name })
LabelOnly(_) => {