@@ -206,27 +206,17 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
206206 // swift-syntax does not distinguish the lexical integer/string forms
207207 // (hex/binary/octal, single- vs multi-line, raw): each is a single
208208 // `*LiteralExpr` kind, so one rule per literal type suffices.
209- rule!( ( integerLiteralExpr) @@node => expr {
210- let value = tree!( ( int_literal #{ node} ) ) ;
211- wrap_pattern_expr( & mut ctx, value)
212- } ) ,
213- rule!( ( floatLiteralExpr) @@node => expr {
214- let value = tree!( ( float_literal #{ node} ) ) ;
215- wrap_pattern_expr( & mut ctx, value)
216- } ) ,
217- rule!( ( booleanLiteralExpr) @@node => expr {
218- let value = tree!( ( boolean_literal #{ node} ) ) ;
219- wrap_pattern_expr( & mut ctx, value)
220- } ) ,
221- rule!( ( nilLiteralExpr) @@node => expr {
222- let value = tree!( ( builtin_expr #{ node} ) ) ;
223- wrap_pattern_expr( & mut ctx, value)
224- } ) ,
209+ coerce_to_pattern!( integerLiteralExpr) ,
210+ rule!( ( integerLiteralExpr) @@node => ( int_literal #{ node} ) ) ,
211+ coerce_to_pattern!( floatLiteralExpr) ,
212+ rule!( ( floatLiteralExpr) @@node => ( float_literal #{ node} ) ) ,
213+ coerce_to_pattern!( booleanLiteralExpr) ,
214+ rule!( ( booleanLiteralExpr) @@node => ( boolean_literal #{ node} ) ) ,
215+ coerce_to_pattern!( nilLiteralExpr) ,
216+ rule!( ( nilLiteralExpr) @@node => ( builtin_expr #{ node} ) ) ,
225217 // Plain string literals (no interpolation)
226- rule!( ( simpleStringLiteralExpr) @@node => expr {
227- let value = tree!( ( string_literal #{ node} ) ) ;
228- wrap_pattern_expr( & mut ctx, value)
229- } ) ,
218+ coerce_to_pattern!( simpleStringLiteralExpr) ,
219+ rule!( ( simpleStringLiteralExpr) @@node => ( string_literal #{ node} ) ) ,
230220 // String literals with interpolation
231221 coerce_to_pattern!( stringLiteralExpr) ,
232222 rule!(
@@ -243,10 +233,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
243233 =>
244234 ( call_expr callee: ( builtin_expr "interpolation" ) argument: { exprs} )
245235 ) ,
246- rule!( ( regexLiteralExpr) @@node => expr {
247- let value = tree!( ( regex_literal #{ node} ) ) ;
248- wrap_pattern_expr( & mut ctx, value)
249- } ) ,
236+ coerce_to_pattern!( regexLiteralExpr) ,
237+ rule!( ( regexLiteralExpr) @@node => ( regex_literal #{ node} ) ) ,
250238 // ---- Names ----
251239 // A function reference spelled with argument labels (`f(x:y:z:)`) is a
252240 // `declReferenceExpr` carrying `argumentNames`. Mark it unsupported for
0 commit comments