From fe0eacb70a6fb51eb8547a275590e9b5406f9f98 Mon Sep 17 00:00:00 2001 From: Ayaz Hafiz Date: Wed, 16 Nov 2022 19:46:54 -0600 Subject: [PATCH] Propogate only_unseen phanton type count check --- crates/reporting/src/error/type.rs | 34 +++++++++++++----------- crates/reporting/tests/test_reporting.rs | 6 ++--- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/crates/reporting/src/error/type.rs b/crates/reporting/src/error/type.rs index 1d7c9de6c0..eebf683824 100644 --- a/crates/reporting/src/error/type.rs +++ b/crates/reporting/src/error/type.rs @@ -2434,24 +2434,24 @@ fn count_generated_name_usages<'a>( debug_assert!(!is_generated_name(name)); } Type(_, tys) => { - stack.extend(tys.iter().map(|t| (t, false))); + stack.extend(tys.iter().map(|t| (t, only_unseen))); } Record(fields, ext) => { - stack.extend(fields.values().map(|f| (f.as_inner(), false))); - ext_stack.push(ext); + stack.extend(fields.values().map(|f| (f.as_inner(), only_unseen))); + ext_stack.push((ext, only_unseen)); } TagUnion(tags, ext, _) => { - stack.extend(tags.values().flatten().map(|t| (t, false))); - ext_stack.push(ext); + stack.extend(tags.values().flatten().map(|t| (t, only_unseen))); + ext_stack.push((ext, only_unseen)); } RecursiveTagUnion(rec, tags, ext, _) => { - stack.push((rec, false)); - stack.extend(tags.values().flatten().map(|t| (t, false))); - ext_stack.push(ext); + stack.push((rec, only_unseen)); + stack.extend(tags.values().flatten().map(|t| (t, only_unseen))); + ext_stack.push((ext, only_unseen)); } Function(args, _lset, ret) => { - stack.extend(args.iter().map(|t| (t, false))); - stack.push((ret, false)); + stack.extend(args.iter().map(|t| (t, only_unseen))); + stack.push((ret, only_unseen)); } Alias(_, args, real, _) => { // Then, count up any phantom args that were missed b/c they're not referenced in @@ -2460,7 +2460,7 @@ fn count_generated_name_usages<'a>( stack.extend(args.iter().map(|t| (t, true))); // First, count the occurrences in the real var - stack.push((real, false)); + stack.push((real, only_unseen)); } Infinite | Error => {} Range(_) => {} @@ -2472,14 +2472,16 @@ fn count_generated_name_usages<'a>( fn count_generated_name_usages_in_exts<'a>( usages: &mut VecMap, - exts: impl IntoIterator, + exts: impl IntoIterator, ) { - for ext in exts { + for (ext, only_unseen) in exts { match ext { TypeExt::FlexOpen(name) => { if is_generated_name(name) { let count = usages.get_or_insert(name.clone(), || 0); - *count += 1; + if !only_unseen || *count == 0 { + *count += 1; + } } } TypeExt::RigidOpen(name) => { @@ -3102,13 +3104,13 @@ fn diff_tag_union<'b>( let gen_usages1 = { let mut usages = VecMap::default(); count_generated_name_usages(&mut usages, fields1.values().flatten()); - count_generated_name_usages_in_exts(&mut usages, [&ext1]); + count_generated_name_usages_in_exts(&mut usages, [(&ext1, false)]); usages }; let gen_usages2 = { let mut usages = VecMap::default(); count_generated_name_usages(&mut usages, fields2.values().flatten()); - count_generated_name_usages_in_exts(&mut usages, [&ext2]); + count_generated_name_usages_in_exts(&mut usages, [(&ext2, false)]); usages }; diff --git a/crates/reporting/tests/test_reporting.rs b/crates/reporting/tests/test_reporting.rs index af116dfe5d..e301e9c2c4 100644 --- a/crates/reporting/tests/test_reporting.rs +++ b/crates/reporting/tests/test_reporting.rs @@ -1330,7 +1330,7 @@ mod test_reporting { This `bar` value is a: - { bar : Int a } + { bar : Int * } But `f` needs its 1st argument to be: @@ -1398,7 +1398,7 @@ mod test_reporting { This `Blue` tag application has the type: - [Blue (Frac a)] + [Blue (Frac *)] But `f` needs its 1st argument to be: @@ -2788,7 +2788,7 @@ mod test_reporting { The argument is a record of type: - { y : Frac a } + { y : Frac * } But `f` needs its 1st argument to be: