add a check for conflicting adjacent tags as well
This commit is contained in:
parent
0ddebe0317
commit
f4b78e202a
@ -17,6 +17,7 @@ pub fn check(cx: &Ctxt, cont: &Container) {
|
|||||||
check_identifier(cx, cont);
|
check_identifier(cx, cont);
|
||||||
check_variant_skip_attrs(cx, cont);
|
check_variant_skip_attrs(cx, cont);
|
||||||
check_internal_tag_field_name_conflict(cx, cont);
|
check_internal_tag_field_name_conflict(cx, cont);
|
||||||
|
check_adjacent_tag_conflict(cx, cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Getters are only allowed inside structs (not enums) with the `remote`
|
/// Getters are only allowed inside structs (not enums) with the `remote`
|
||||||
@ -217,3 +218,20 @@ fn check_internal_tag_field_name_conflict(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// In the case of adjacently-tagged enums, the type and the
|
||||||
|
/// contents tag must differ, for the same reason.
|
||||||
|
fn check_adjacent_tag_conflict(cx: &Ctxt, cont: &Container) {
|
||||||
|
let (type_tag, content_tag) = match *cont.attrs.tag() {
|
||||||
|
EnumTag::Adjacent { ref tag, ref content } => (tag, content),
|
||||||
|
EnumTag::Internal { .. } | EnumTag::External | EnumTag::None => return,
|
||||||
|
};
|
||||||
|
|
||||||
|
if type_tag == content_tag {
|
||||||
|
let message = format!(
|
||||||
|
"Enum tags `{}` for type and content conflict with each other",
|
||||||
|
type_tag
|
||||||
|
);
|
||||||
|
cx.error(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user