mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 13:29:12 +00:00
Add fx to ErrorType
This commit is contained in:
parent
8a65617704
commit
6533e9084d
6 changed files with 66 additions and 30 deletions
|
@ -1846,7 +1846,7 @@ fn describe_wanted_function(tipe: &ErrorType) -> DescribedFunction {
|
|||
use ErrorType::*;
|
||||
|
||||
match tipe {
|
||||
Function(args, _, _) => DescribedFunction::Arguments(args.len()),
|
||||
Function(args, _, _, _) => DescribedFunction::Arguments(args.len()),
|
||||
Alias(_, _, actual, AliasKind::Structural) => describe_wanted_function(actual),
|
||||
Alias(_, _, actual, AliasKind::Opaque) => {
|
||||
let tag = if matches!(
|
||||
|
@ -2698,12 +2698,13 @@ fn to_doc_help<'b>(
|
|||
use ErrorType::*;
|
||||
|
||||
match tipe {
|
||||
Function(args, _, ret) => report_text::function(
|
||||
Function(args, _, fx, ret) => report_text::function(
|
||||
alloc,
|
||||
parens,
|
||||
args.into_iter()
|
||||
.map(|arg| to_doc_help(ctx, gen_usages, alloc, Parens::InFn, arg))
|
||||
.collect(),
|
||||
fx,
|
||||
to_doc_help(ctx, gen_usages, alloc, Parens::InFn, *ret),
|
||||
),
|
||||
Infinite => alloc.text("∞"),
|
||||
|
@ -2940,7 +2941,7 @@ fn count_generated_name_usages<'a>(
|
|||
stack.extend(tags.values().flatten().map(|t| (t, only_unseen)));
|
||||
ext_stack.push((ext, only_unseen));
|
||||
}
|
||||
Function(args, _lset, ret) => {
|
||||
Function(args, _lset, _fx, ret) => {
|
||||
stack.extend(args.iter().map(|t| (t, only_unseen)));
|
||||
stack.push((ret, only_unseen));
|
||||
}
|
||||
|
@ -3115,7 +3116,7 @@ fn to_diff<'b>(
|
|||
}
|
||||
}
|
||||
|
||||
(Function(args1, _, ret1), Function(args2, _, ret2)) => {
|
||||
(Function(args1, _, fx1, ret1), Function(args2, _, fx2, ret2)) => {
|
||||
if args1.len() == args2.len() {
|
||||
let mut status = Status::Similar;
|
||||
let arg_diff = diff_args(alloc, Parens::InFn, args1, args2);
|
||||
|
@ -3123,8 +3124,8 @@ fn to_diff<'b>(
|
|||
status.merge(arg_diff.status);
|
||||
status.merge(ret_diff.status);
|
||||
|
||||
let left = report_text::function(alloc, parens, arg_diff.left, ret_diff.left);
|
||||
let right = report_text::function(alloc, parens, arg_diff.right, ret_diff.right);
|
||||
let left = report_text::function(alloc, parens, arg_diff.left, fx1, ret_diff.left);
|
||||
let right = report_text::function(alloc, parens, arg_diff.right, fx2, ret_diff.right);
|
||||
let mut left_able = arg_diff.left_able;
|
||||
left_able.extend(ret_diff.left_able);
|
||||
let mut right_able = arg_diff.right_able;
|
||||
|
@ -3713,9 +3714,10 @@ fn should_show_diff(t1: &ErrorType, t2: &ErrorType) -> bool {
|
|||
.any(|(p1, p2)| should_show_diff(p1, p2))
|
||||
})
|
||||
}
|
||||
(Function(params1, ret1, l1), Function(params2, ret2, l2)) => {
|
||||
(Function(params1, ret1, fx1, l1), Function(params2, ret2, fx2, l2)) => {
|
||||
if params1.len() != params2.len()
|
||||
|| should_show_diff(ret1, ret2)
|
||||
|| fx1 != fx2
|
||||
|| should_show_diff(l1, l2)
|
||||
{
|
||||
return true;
|
||||
|
@ -3777,8 +3779,8 @@ fn should_show_diff(t1: &ErrorType, t2: &ErrorType) -> bool {
|
|||
| (_, TagUnion(_, _, _))
|
||||
| (RecursiveTagUnion(_, _, _, _), _)
|
||||
| (_, RecursiveTagUnion(_, _, _, _))
|
||||
| (Function(_, _, _), _)
|
||||
| (_, Function(_, _, _)) => true,
|
||||
| (Function(_, _, _, _), _)
|
||||
| (_, Function(_, _, _, _)) => true,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4236,7 +4238,7 @@ mod report_text {
|
|||
use crate::report::{Annotation, RocDocAllocator, RocDocBuilder};
|
||||
use roc_module::ident::Lowercase;
|
||||
use roc_types::pretty_print::Parens;
|
||||
use roc_types::types::{ErrorType, RecordField, TypeExt};
|
||||
use roc_types::types::{ErrorFunctionFx, ErrorType, RecordField, TypeExt};
|
||||
use ven_pretty::DocAllocator;
|
||||
|
||||
fn with_parens<'b>(
|
||||
|
@ -4250,11 +4252,15 @@ mod report_text {
|
|||
alloc: &'b RocDocAllocator<'b>,
|
||||
parens: Parens,
|
||||
args: Vec<RocDocBuilder<'b>>,
|
||||
fx: ErrorFunctionFx,
|
||||
ret: RocDocBuilder<'b>,
|
||||
) -> RocDocBuilder<'b> {
|
||||
let function_doc = alloc.concat([
|
||||
alloc.intersperse(args, alloc.reflow(", ")),
|
||||
alloc.reflow(" -> "),
|
||||
match fx {
|
||||
ErrorFunctionFx::Pure => alloc.text(" -> "),
|
||||
ErrorFunctionFx::Effectful => alloc.text(" => "),
|
||||
},
|
||||
ret,
|
||||
]);
|
||||
|
||||
|
@ -4820,7 +4826,7 @@ fn type_problem_to_pretty<'b>(
|
|||
rigid_able_vs_different_flex_able(x, abilities, other_abilities)
|
||||
}
|
||||
RigidVar(y) | RigidAbleVar(y, _) => bad_double_rigid(x, y),
|
||||
Function(_, _, _) => rigid_able_vs_concrete(x, alloc.reflow("a function value")),
|
||||
Function(_, _, _, _) => rigid_able_vs_concrete(x, alloc.reflow("a function value")),
|
||||
Record(_, _) => rigid_able_vs_concrete(x, alloc.reflow("a record value")),
|
||||
Tuple(_, _) => rigid_able_vs_concrete(x, alloc.reflow("a tuple value")),
|
||||
TagUnion(_, _, _) | RecursiveTagUnion(_, _, _, _) => {
|
||||
|
@ -4909,7 +4915,7 @@ fn type_problem_to_pretty<'b>(
|
|||
bad_rigid_var(x, msg)
|
||||
}
|
||||
RigidVar(y) | RigidAbleVar(y, _) => bad_double_rigid(x, y),
|
||||
Function(_, _, _) => bad_rigid_var(x, alloc.reflow("a function value")),
|
||||
Function(_, _, _, _) => bad_rigid_var(x, alloc.reflow("a function value")),
|
||||
Record(_, _) => bad_rigid_var(x, alloc.reflow("a record value")),
|
||||
Tuple(_, _) => bad_rigid_var(x, alloc.reflow("a tuple value")),
|
||||
TagUnion(_, _, _) | RecursiveTagUnion(_, _, _, _) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue