👋

[Bug #21622] Prism で `p(p a, x: b => value)` がシンタックスエラーにならないバグ報告

に公開

[Bug #21622] Prism wrongly accepts command call to be a key of keyword argument

  • 次のコードは parse.y ではシンタックスエラーになるが Prism では有効な構文として扱われてしまうというバグ報告
p(p a, x: b => value)
p(p a, x: => value)
p(p a, &block => value)
p(p a, *args => value)
p(p a, **kwargs => value)
  • これ、どうなっているの…と思ったんですが Prism では p((p a, &block) => value) みたいに解釈されるみたいですね
    • (p a, &block) がキーの value が値の Hash として定義される
  • 実際に値を割り当てると以下のような挙動になる
a = "a"
b = "b"
x = "x"
value = "value"
block = proc {}
args = ["args"]
kwargs = { kwargs: "kwargs" }

p(p a, x: b => value)
# => {["a", {x: "b"}] => "value"}

p(p a, x: => value)
# => {["a", {x: "x"}] => "value"}

p(p a, &block => value)
# => {"a" => "value"}

p(p a, *args => value)
# => {["a", "args"] => "value"}

p(p a, **kwargs => value)
# => {["a", {kwargs: "kwargs"}] => "value"}
GitHubで編集を提案

Discussion