Improve error message when shadowing builtin type

Closes #3109
This commit is contained in:
Ayaz Hafiz 2022-09-21 12:54:26 -05:00
parent ae122a0aea
commit 5f117be306
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
5 changed files with 90 additions and 62 deletions

View file

@ -2302,11 +2302,6 @@ fn to_pending_alias_or_opaque<'a>(
opt_derived: Option<&'a Loc<ast::HasAbilities<'a>>>,
kind: AliasKind,
) -> PendingTypeDef<'a> {
let shadow_kind = match kind {
AliasKind::Structural => ShadowKind::Alias,
AliasKind::Opaque => ShadowKind::Opaque,
};
let region = Region::span_across(&name.region, &ann.region);
match scope.introduce_without_shadow_symbol(&Ident::from(name.value), region) {
@ -2361,7 +2356,12 @@ fn to_pending_alias_or_opaque<'a>(
}
}
Err((original_region, loc_shadowed_symbol)) => {
Err((original_sym, original_region, loc_shadowed_symbol)) => {
let shadow_kind = match kind {
AliasKind::Structural => ShadowKind::Alias(original_sym),
AliasKind::Opaque => ShadowKind::Opaque(original_sym),
};
env.problem(Problem::Shadowing {
original_region,
shadow: loc_shadowed_symbol,
@ -2422,11 +2422,11 @@ fn to_pending_type_def<'a>(
.introduce_without_shadow_symbol(&Ident::from(name.value), name.region)
{
Ok(symbol) => Loc::at(name.region, symbol),
Err((original_region, shadowed_symbol)) => {
Err((original_symbol, original_region, shadowed_symbol)) => {
env.problem(Problem::Shadowing {
original_region,
shadow: shadowed_symbol,
kind: ShadowKind::Ability,
kind: ShadowKind::Ability(original_symbol),
});
return PendingTypeDef::AbilityShadows;
}

View file

@ -284,14 +284,14 @@ impl Scope {
&mut self,
ident: &Ident,
region: Region,
) -> Result<Symbol, (Region, Loc<Ident>)> {
) -> Result<Symbol, (Symbol, Region, Loc<Ident>)> {
match self.introduce_help(ident.as_str(), region) {
Err((_, original_region)) => {
Err((symbol, original_region)) => {
let shadow = Loc {
value: ident.clone(),
region,
};
Err((original_region, shadow))
Err((symbol, original_region, shadow))
}
Ok(symbol) => Ok(symbol),
}

View file

@ -22,9 +22,9 @@ pub enum BadPattern {
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ShadowKind {
Variable,
Alias,
Opaque,
Ability,
Alias(Symbol),
Opaque(Symbol),
Ability(Symbol),
}
/// Problems that can occur in the course of canonicalization.