# Boolean condition before a let chain fn check(enabled: bool, value: Option) { if enabled && let Some(x) = value && x > 0 {} } ==> SourceFile( FunctionItem( fn, BoundIdentifier, ParamList( Parameter(BoundIdentifier, TypeIdentifier), Parameter(BoundIdentifier, GenericType(TypeIdentifier, TypeArgList(TypeIdentifier)))), Block( ExpressionStatement( IfExpression( if, LetChain( Identifier, LetDeclaration(let, TuplePattern(TypeIdentifier, BoundIdentifier), Identifier), BinaryExpression(Identifier, CompareOp, Integer)), Block))))) # Let condition in a match guard fn check(value: Option) { match value { _ if true && let Some(x) = value => {}, _ => {} } } ==> SourceFile( FunctionItem( fn, BoundIdentifier, ParamList(Parameter(BoundIdentifier, GenericType(TypeIdentifier, TypeArgList(TypeIdentifier)))), Block( ExpressionStatement( MatchExpression( match, Identifier, MatchBlock( MatchArm( _, Guard(if, LetChain(Boolean, LetDeclaration(let, TuplePattern(TypeIdentifier, BoundIdentifier), Identifier))), Block), MatchArm(_, Block))))))) # Let condition before a let chain fn compare(left: Option, right: Option) { if let Some(left) = left && let Some(right) = right && left < right {} } ==> SourceFile( FunctionItem( fn, BoundIdentifier, ParamList( Parameter(BoundIdentifier, GenericType(TypeIdentifier, TypeArgList(TypeIdentifier))), Parameter(BoundIdentifier, GenericType(TypeIdentifier, TypeArgList(TypeIdentifier)))), Block( ExpressionStatement( IfExpression( if, LetChain( LetDeclaration(let, TuplePattern(TypeIdentifier, BoundIdentifier), Identifier), LetDeclaration(let, TuplePattern(TypeIdentifier, BoundIdentifier), Identifier), BinaryExpression(Identifier, CompareOp, Identifier)), Block)))))