diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index c72bb2d6674b..a871c2c8de01 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1557,10 +1557,10 @@ object Parsers { else p } - /** Pattern2 ::= [varid `@'] InfixPattern + /** Pattern2 ::= [id `@'] InfixPattern */ val pattern2 = () => infixPattern() match { - case p @ Ident(name) if isVarPattern(p) && in.token == AT => + case p @ Ident(name) if in.token == AT => val offset = in.skipToken() // compatibility for Scala2 `x @ _*` syntax diff --git a/docs/docs/internals/syntax.md b/docs/docs/internals/syntax.md index 3ee64121fbfd..65f5e451349e 100644 --- a/docs/docs/internals/syntax.md +++ b/docs/docs/internals/syntax.md @@ -220,7 +220,7 @@ CaseClause ::= ‘case’ (Pattern [Guard] ‘=>’ Block | INT) Pattern ::= Pattern1 { ‘|’ Pattern1 } Alternative(pats) Pattern1 ::= PatVar ‘:’ RefinedType Bind(name, Typed(Ident(wildcard), tpe)) | Pattern2 -Pattern2 ::= [varid ‘@’] InfixPattern Bind(name, pat) +Pattern2 ::= [id ‘@’] InfixPattern Bind(name, pat) InfixPattern ::= SimplePattern { id [nl] SimplePattern } InfixOp(pat, op, pat) SimplePattern ::= PatVar Ident(wildcard) | Literal Bind(name, Ident(wildcard)) diff --git a/tests/pos/i3412.scala b/tests/pos/i3412.scala new file mode 100644 index 000000000000..29c2bfd7690a --- /dev/null +++ b/tests/pos/i3412.scala @@ -0,0 +1,5 @@ +class Test { + val A @ List() = List() + val B @ List(), C: List[Int] = List() + val D @ List(), E @ List() = List() +}