@@ -1114,27 +1114,32 @@ object Parsers {
11141114 lookahead.observeArrowIndented()
11151115 if lookahead.token == INDENT || lookahead.token == EOF then
11161116 Some (() => expr(Location .InColonArg ))
1117- else if in.featureEnabled(Feature .relaxedLambdaSyntax)
1118- && ! in.currentRegion.isInstanceOf [InParens ]
1119- then
1120- Some : () =>
1121- val t = inSepRegion(SingleLineLambda (_)):
1122- expr(Location .InColonArg )
1123- accept(ENDlambda )
1124- t
1117+ else if in.featureEnabled(Feature .relaxedLambdaSyntax) then
1118+ isParamsAndArrow() match
1119+ case success @ Some (_) => success
1120+ case _ if ! in.currentRegion.isInstanceOf [InParens ] =>
1121+ Some : () =>
1122+ val t = inSepRegion(SingleLineLambda (_)):
1123+ expr(Location .InColonArg )
1124+ accept(ENDlambda )
1125+ t
1126+ case _ => None
11251127 else None
11261128 else None
1127- lookahead.nextToken()
1128- if lookahead.isIdent || lookahead.token == USCORE then
1129+ def isParamsAndArrow (): Option [() => Tree ] =
11291130 lookahead.nextToken()
1130- isArrowIndent()
1131- else if lookahead.token == LPAREN || lookahead.token == LBRACKET then
1132- lookahead.skipParens()
1133- isArrowIndent()
1134- else if lookahead.token == CASE && in.featureEnabled(Feature .relaxedLambdaSyntax) then
1135- Some (() => singleCaseMatch())
1136- else
1137- None
1131+ if lookahead.isIdent || lookahead.token == USCORE then
1132+ lookahead.nextToken()
1133+ isArrowIndent()
1134+ else if lookahead.token == LPAREN || lookahead.token == LBRACKET then
1135+ lookahead.skipParens()
1136+ isArrowIndent()
1137+ else if lookahead.token == CASE && in.featureEnabled(Feature .relaxedLambdaSyntax) then
1138+ Some (() => singleCaseMatch())
1139+ else
1140+ None
1141+ isParamsAndArrow()
1142+ end followingIsLambdaAfterColon
11381143
11391144 /** Can the next lookahead token start an operand as defined by
11401145 * leadingOperandTokens, or is postfix ops enabled?
@@ -2804,7 +2809,7 @@ object Parsers {
28042809 * | SimpleExpr (TypeArgs | NamedTypeArgs)
28052810 * | SimpleExpr1 ArgumentExprs
28062811 * | SimpleExpr1 ColonArgument
2807- * ColonArgument ::= colon [ LambdaStart]
2812+ * ColonArgument ::= colon { LambdaStart}
28082813 * indent (CaseClauses | Block) outdent
28092814 * | colon LambdaStart expr ENDlambda -- under experimental.relaxedLambdaSyntax
28102815 * | colon ExprCaseClause -- under experimental.relaxedLambdaSyntax
0 commit comments