Skip to content

Two divisions treated like regex literal #860

Description

@jpsim

Issue Kind

Parse of Valid Source Produced Invalid Syntax Tree

Source Code

UIColor(white: 216.0/255.0, alpha: 44.0/255.0)

Description

The Swift Parser thinks this is a regex literal: regexLiteral("/255.0, alpha: 44.0/")

Here are the full parse trees from the 5.7 release and the Swift Parser:

SwiftSyntax @ 0.50700.0 :

▿ SwiftSyntax.SourceFileSyntax
  ▿ statements: SwiftSyntax.CodeBlockItemListSyntax
    ▿ SwiftSyntax.CodeBlockItemSyntax
      ▿ item: SwiftSyntax.FunctionCallExprSyntax
        ▿ calledExpression: SwiftSyntax.IdentifierExprSyntax
          ▿ identifier: SwiftSyntax.TokenSyntax
            - text: "UIColor"
            ▿ leadingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            ▿ trailingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            ▿ tokenKind: SwiftSyntax.TokenKind.identifier
              - identifier: "UIColor"
          - declNameArguments: nil
        ▿ leftParen: Optional(SwiftSyntax.TokenSyntax)
          ▿ some: SwiftSyntax.TokenSyntax
            - text: "("
            ▿ leadingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            ▿ trailingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            - tokenKind: SwiftSyntax.TokenKind.leftParen
        ▿ argumentList: SwiftSyntax.TupleExprElementListSyntax
          ▿ SwiftSyntax.TupleExprElementSyntax
            ▿ label: Optional(SwiftSyntax.TokenSyntax)
              ▿ some: SwiftSyntax.TokenSyntax
                - text: "white"
                ▿ leadingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ trailingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ tokenKind: SwiftSyntax.TokenKind.identifier
                  - identifier: "white"
            ▿ colon: Optional(SwiftSyntax.TokenSyntax)
              ▿ some: SwiftSyntax.TokenSyntax
                - text: ":"
                ▿ leadingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ trailingTrivia: SwiftSyntax.Trivia
                  ▿ pieces: 1 element
                    ▿ TriviaPiece
                      - spaces: 1
                - tokenKind: SwiftSyntax.TokenKind.colon
            ▿ expression: SwiftSyntax.SequenceExprSyntax
              ▿ elements: SwiftSyntax.ExprListSyntax
                ▿ SwiftSyntax.ExprSyntax
                  ▿ floatingDigits: SwiftSyntax.TokenSyntax
                    - text: "216.0"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                      - floatingLiteral: "216.0"
                ▿ SwiftSyntax.ExprSyntax
                  ▿ operatorToken: SwiftSyntax.TokenSyntax
                    - text: "/"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.unspacedBinaryOperator
                      - unspacedBinaryOperator: "/"
                ▿ SwiftSyntax.ExprSyntax
                  ▿ floatingDigits: SwiftSyntax.TokenSyntax
                    - text: "255.0"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                      - floatingLiteral: "255.0"
            ▿ trailingComma: Optional(SwiftSyntax.TokenSyntax)
              ▿ some: SwiftSyntax.TokenSyntax
                - text: ","
                ▿ leadingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ trailingTrivia: SwiftSyntax.Trivia
                  ▿ pieces: 1 element
                    ▿ TriviaPiece
                      - spaces: 1
                - tokenKind: SwiftSyntax.TokenKind.comma
          ▿ SwiftSyntax.TupleExprElementSyntax
            ▿ label: Optional(SwiftSyntax.TokenSyntax)
              ▿ some: SwiftSyntax.TokenSyntax
                - text: "alpha"
                ▿ leadingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ trailingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ tokenKind: SwiftSyntax.TokenKind.identifier
                  - identifier: "alpha"
            ▿ colon: Optional(SwiftSyntax.TokenSyntax)
              ▿ some: SwiftSyntax.TokenSyntax
                - text: ":"
                ▿ leadingTrivia: SwiftSyntax.Trivia
                  - pieces: 0 elements
                ▿ trailingTrivia: SwiftSyntax.Trivia
                  ▿ pieces: 1 element
                    ▿ TriviaPiece
                      - spaces: 1
                - tokenKind: SwiftSyntax.TokenKind.colon
            ▿ expression: SwiftSyntax.SequenceExprSyntax
              ▿ elements: SwiftSyntax.ExprListSyntax
                ▿ SwiftSyntax.ExprSyntax
                  ▿ floatingDigits: SwiftSyntax.TokenSyntax
                    - text: "44.0"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                      - floatingLiteral: "44.0"
                ▿ SwiftSyntax.ExprSyntax
                  ▿ operatorToken: SwiftSyntax.TokenSyntax
                    - text: "/"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.unspacedBinaryOperator
                      - unspacedBinaryOperator: "/"
                ▿ SwiftSyntax.ExprSyntax
                  ▿ floatingDigits: SwiftSyntax.TokenSyntax
                    - text: "255.0"
                    ▿ leadingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ trailingTrivia: SwiftSyntax.Trivia
                      - pieces: 0 elements
                    ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                      - floatingLiteral: "255.0"
            - trailingComma: nil
        ▿ rightParen: Optional(SwiftSyntax.TokenSyntax)
          ▿ some: SwiftSyntax.TokenSyntax
            - text: ")"
            ▿ leadingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            ▿ trailingTrivia: SwiftSyntax.Trivia
              - pieces: 0 elements
            - tokenKind: SwiftSyntax.TokenKind.rightParen
        - trailingClosure: nil
        - additionalTrailingClosures: nil
      - semicolon: nil
      - errorTokens: nil
  ▿ eofToken: SwiftSyntax.TokenSyntax
    - text: ""
    ▿ leadingTrivia: SwiftSyntax.Trivia
      - pieces: 0 elements
    ▿ trailingTrivia: SwiftSyntax.Trivia
      - pieces: 0 elements
    - tokenKind: SwiftSyntax.TokenKind.eof

SwiftSyntax @ 598ff22 :

▿ SourceFileSyntax
  - unexpectedBeforeStatements: nil
  ▿ statements: CodeBlockItemListSyntax
    ▿ CodeBlockItemSyntax
      - unexpectedBeforeItem: nil
      ▿ item: FunctionCallExprSyntax
        - unexpectedBeforeCalledExpression: nil
        ▿ calledExpression: IdentifierExprSyntax
          - unexpectedBeforeIdentifier: nil
          ▿ identifier: identifier("UIColor")
            - text: "UIColor"
            ▿ leadingTrivia: []
              - pieces: 0 elements
            ▿ trailingTrivia: []
              - pieces: 0 elements
            ▿ tokenKind: SwiftSyntax.TokenKind.identifier
              - identifier: "UIColor"
          - unexpectedBetweenIdentifierAndDeclNameArguments: nil
          - declNameArguments: nil
        - unexpectedBetweenCalledExpressionAndLeftParen: nil
        ▿ leftParen: Optional(leftParen)
          ▿ some: leftParen
            - text: "("
            ▿ leadingTrivia: []
              - pieces: 0 elements
            ▿ trailingTrivia: []
              - pieces: 0 elements
            - tokenKind: SwiftSyntax.TokenKind.leftParen
        - unexpectedBetweenLeftParenAndArgumentList: nil
        ▿ argumentList: TupleExprElementListSyntax
          ▿ TupleExprElementSyntax
            - unexpectedBeforeLabel: nil
            ▿ label: Optional(identifier("white"))
              ▿ some: identifier("white")
                - text: "white"
                ▿ leadingTrivia: []
                  - pieces: 0 elements
                ▿ trailingTrivia: []
                  - pieces: 0 elements
                ▿ tokenKind: SwiftSyntax.TokenKind.identifier
                  - identifier: "white"
            - unexpectedBetweenLabelAndColon: nil
            ▿ colon: Optional(colon)
              ▿ some: colon
                - text: ":"
                ▿ leadingTrivia: []
                  - pieces: 0 elements
                ▿ trailingTrivia: spaces(1)
                  ▿ pieces: 1 element
                    ▿ spaces(1)
                      - spaces: 1
                - tokenKind: SwiftSyntax.TokenKind.colon
            - unexpectedBetweenColonAndExpression: nil
            ▿ expression: FloatLiteralExprSyntax
              - unexpectedBeforeFloatingDigits: nil
              ▿ floatingDigits: floatingLiteral("216.0")
                - text: "216.0"
                ▿ leadingTrivia: []
                  - pieces: 0 elements
                ▿ trailingTrivia: []
                  - pieces: 0 elements
                ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                  - floatingLiteral: "216.0"
            - unexpectedBetweenExpressionAndTrailingComma: nil
            - trailingComma: nil
        ▿ unexpectedBetweenArgumentListAndRightParen: Optional(UnexpectedNodesSyntax)
          ▿ some: UnexpectedNodesSyntax
            ▿ regexLiteral("/255.0, alpha: 44.0/")
              - text: "/255.0, alpha: 44.0/"
              ▿ leadingTrivia: []
                - pieces: 0 elements
              ▿ trailingTrivia: []
                - pieces: 0 elements
              ▿ tokenKind: SwiftSyntax.TokenKind.regexLiteral
                - regexLiteral: "/255.0, alpha: 44.0/"
            ▿ floatingLiteral("255.0")
              - text: "255.0"
              ▿ leadingTrivia: []
                - pieces: 0 elements
              ▿ trailingTrivia: []
                - pieces: 0 elements
              ▿ tokenKind: SwiftSyntax.TokenKind.floatingLiteral
                - floatingLiteral: "255.0"
        ▿ rightParen: Optional(rightParen)
          ▿ some: rightParen
            - text: ")"
            ▿ leadingTrivia: []
              - pieces: 0 elements
            ▿ trailingTrivia: []
              - pieces: 0 elements
            - tokenKind: SwiftSyntax.TokenKind.rightParen
        - unexpectedBetweenRightParenAndTrailingClosure: nil
        - trailingClosure: nil
        - unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures: nil
        - additionalTrailingClosures: nil
      - unexpectedBetweenItemAndSemicolon: nil
      - semicolon: nil
      - unexpectedBetweenSemicolonAndErrorTokens: nil
      - errorTokens: nil
  - unexpectedBetweenStatementsAndEOFToken: nil
  ▿ eofToken: eof
    - text: ""
    ▿ leadingTrivia: []
      - pieces: 0 elements
    ▿ trailingTrivia: []
      - pieces: 0 elements
    - tokenKind: SwiftSyntax.TokenKind.eof

Metadata

Metadata

Assignees

No one assigned

    Labels

    SwiftParserBugs in the (new) Parser written in Swift

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions