Skip to content

Commit e58ddb5

Browse files
Fix variable_references logic to catch all variable references
1 parent 10eb844 commit e58ddb5

1 file changed

Lines changed: 31 additions & 11 deletions

File tree

compiler/rustc_macros/src/diagnostics/message.rs

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,46 @@ fn verify_variables_used(msg_span: Span, message_str: &str, variant: Option<&Var
6464

6565
fn variable_references<'a>(msg: &fluent_syntax::ast::Message<&'a str>) -> Vec<&'a str> {
6666
let mut refs = vec![];
67+
6768
if let Some(Pattern { elements }) = &msg.value {
6869
for elt in elements {
69-
if let PatternElement::Placeable {
70-
expression: Expression::Inline(InlineExpression::VariableReference { id }),
71-
} = elt
72-
{
73-
refs.push(id.name);
74-
}
70+
traverse_pattern(elt, &mut refs);
7571
}
7672
}
7773
for attr in &msg.attributes {
7874
for elt in &attr.value.elements {
79-
if let PatternElement::Placeable {
80-
expression: Expression::Inline(InlineExpression::VariableReference { id }),
81-
} = elt
82-
{
83-
refs.push(id.name);
75+
traverse_pattern(elt, &mut refs);
76+
}
77+
}
78+
79+
fn traverse_pattern<'a>(elem: &PatternElement<&'a str>, refs: &mut Vec<&'a str>) {
80+
match elem {
81+
PatternElement::TextElement { .. } => {}
82+
PatternElement::Placeable { expression } => traverse_expression(expression, refs),
83+
}
84+
}
85+
fn traverse_expression<'a>(expr: &Expression<&'a str>, refs: &mut Vec<&'a str>) {
86+
match expr {
87+
Expression::Select { selector, variants } => {
88+
traverse_inline_expr(selector, refs);
89+
for variant in variants {
90+
for pattern in &variant.value.elements {
91+
traverse_pattern(pattern, refs);
92+
}
93+
}
94+
}
95+
Expression::Inline(expr) => {
96+
traverse_inline_expr(expr, refs);
8497
}
8598
}
8699
}
100+
fn traverse_inline_expr<'a>(elem: &InlineExpression<&'a str>, refs: &mut Vec<&'a str>) {
101+
match elem {
102+
InlineExpression::VariableReference { id } => refs.push(id.name),
103+
_ => {}
104+
}
105+
}
106+
87107
refs
88108
}
89109

0 commit comments

Comments
 (0)