Project

General

Profile

Actions

Bug #20776

open

[PRISM] Pattern matching syntax error message

Added by nobu (Nobuyoshi Nakada) about 1 month ago. Updated about 1 month ago.

Status:
Open
Assignee:
Target version:
-
[ruby-core:119401]

Description

Syntax error is fine, but is really expecting end-of-input there?

$ ruby -v -e '1 => $g'
ruby 3.4.0dev (2024-10-01T14:59:58Z master 169a5ee99e) +PRISM [arm64-darwin23]
-e:1: warning: possibly useless use of a variable in void context
-e: -e:1: syntax errors found (SyntaxError)
> 1 | 1 => $g
    |      ^~ unexpected global variable, expecting end-of-input
    |      ^~ expected a pattern expression after `=>`
  2 | 

And the line 2 is not in the input.

Updated by nobu (Nobuyoshi Nakada) about 1 month ago ยท Edited

  • Assignee set to prism
  • Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.1: DONTNEED, 3.2: DONTNEED, 3.3: UNKNOWN

The same code segfaulted crashed due to "Unexpected node type" in 3.3.
Probably some backports are needed.

Updated by kddnewton (Kevin Newton) about 1 month ago

What's happening with the error message is that it's seeing the $g and determining that it's not a valid pattern, so it assumes the pattern is missing. Then it's determining that there is no statement delimiter (newline or semicolon) between the statements, so it's saying it expected and end-of-input. Then it's finding the $g at the beginning of the next expression, so it's warning that it's possibly useless. Effectively it's parsing it like:

1 => <missing>
$g

I'm happy to change the error message to whatever would make that more clear.

The second newline is in there because it looked weird having errors hang off the end without another line indicating where the input ended, but I can remove that.

Actions

Also available in: Atom PDF

Like0
Like0Like0