🔖

[bugs.ruby] [Bug #20278] `,` がない事によるエラーメッセージを改善したチケット

2024/02/28に公開

[Bug #20278] syntax error, unexpected local variable or method, expecting ')' (SyntaxError) - but I think it should report that a ',' is missing, or alternatively, that suggesting ')' is the most likely cause but not always (e. g. reword it a bit)

  • 以下のように途中で , が抜けているコードを実行したときに
class Foobar

  def foo1
    var1 = 1
    var2 = 2
    Foobar.some_method(
      var1   # <- ここの , が抜けている!
      var2,
    )
  end

  def self.some_method(a, b)
    puts a
  end

end

Foobar.new
  • 以下のようなエラーが表示される
/tmp/vAanI2B/86: --> /tmp/vAanI2B/86
expected a `)` to close the argumentsexpected a newline or semicolon after the statementcannot parse the expression
   1  class Foobar
   3    def foo1
>  4      var1 = 1
>  5      var2 = 2
>  6      Foobar.some_method(
>  9      )
  10    end
  16  endSo ruby indicates that there is an issue with var2 and a ')' was expecting. But I think ruby should instead have
expected a ','. I don't know whether ruby can distinguish between this; both var1 and var2 were already defined prior, so I think in theory the ruby parser could find out that there are two separate variables, and assume that a ',' could also be missing. I don't know if this is always the case, but at the least I think in the example code I showed, ruby saying that a ')' was expected, was wrong, in my opinion.
/tmp/vAanI2B/86:8: syntax error, unexpected local variable or method, expecting ')' (SyntaxError)
      var2
      ^~~~
  • このときに
# 引数を閉じるには `)` が必要ですステートメントの後に改行またはセミコロンが必要です式を解析できません
expected a `)` to close the argumentsexpected a newline or semicolon after the statementcannot parse the expression
# 構文エラー、予期しないローカル変数またはメソッド、「)」が必要です (SyntaxError)
syntax error, unexpected local variable or method, expecting ')' (SyntaxError)
  • がエラーメッセージとして適切でないという内容
  • 前者は arguments expectedstatement cannot のようにスペースがあるのが正しいという指摘
    • これ、全然気づかなかった‥・
  • 者は ) が原因なように読めるが実際には , がないことによるエラー起因なのが読みづらいという指摘
  • 後者に関しては以下のように ) だけではなくて , も含めるようにすればどうか、と提案されている
syntax error, unexpected local variable or method, expecting ')' (SyntaxError)
↓
syntax error, unexpected local variable or method, expecting ')' or ',' (SyntaxError)
  • まあ〜ないよりはあったほうがよさそう、ってぐらいすかねえ
  • syntax_suggest みたいになんかいい感じにエラー箇所が検知できれば…
GitHubで編集を提案

Discussion