Skip to content

Trailing closures are wrongly accepted for enum-case-patterns #79047

Open
@rintaro

Description

@rintaro

Description

According to the document, if an enum case pattern includes a sub-pattern, it must be a tuple pattern, which should always be enclosed in parentheses.

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/patterns/#Enumeration-Case-Pattern

enum-case-pattern → type-identifier? . enum-case-name tuple-pattern?
tuple-pattern → ( tuple-pattern-element-list? )

But, matching patterns like case .foo { true }: is accepted.

Reproduction

func ~= <T>(_ lhs: () -> Bool, rhs: T) -> Bool { true }

enum E {
  case foo(Int)
}

func test(v: E) {
  switch v {
    case .foo { true } : break
    default: break
  }
}

Expected behavior

Compiler should diagnose it, or documentation should be corrected to accept trailing closures.

Environment

Swift version 6.0.3

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepts invalidBug: Accepts invalidbugA deviation from expected or documented behavior. Also: expected but undesirable behavior.closuresFeature: closurescompilerThe Swift compiler itselfenum case patternsFeature → patterns: Enumeration case patternspatternsFeature: patternsswift 6.2type checkerArea → compiler: Semantic analysis

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions