Project

General

Profile

Actions

Bug #16008

closed

Ripper hshptn node drops information

Added by kddnewton (Kevin Newton) over 5 years ago. Updated almost 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
2.7.0-preview1
[ruby-core:93816]

Description

Hi - I'm the author of the prettier plugin for ruby. I'm trying to get it to support 2.7 pattern matching. It works well for everything to do with the array pattern. However, for hash patterns, it drops certain information if you touch the on_label method (which I do to add metadata about the location of the token). For example,

require 'ripper'

class Parser < Ripper::SexpBuilder
  private

  def on_label(token)
    [:@label, token]
  end
end

content = <<~EORUBY
  case foo
  in { a: 1 }
    bar
  else
    baz
  end
EORUBY

pp Ripper::SexpBuilder.new(content).parse
pp Parser.new(content).parse

This script results in:

[:program,
 [:stmts_add,
  [:stmts_new],
  [:case,
   [:vcall, [:@ident, "foo", [1, 5]]],
   [:in,
    [:hshptn, nil, [[[:@label, "a:", [2, 5]], [:@int, "1", [2, 8]]]], nil],
    [:stmts_add, [:stmts_new], [:vcall, [:@ident, "bar", [3, 2]]]],
    [:else, [:stmts_add, [:stmts_new], [:vcall, [:@ident, "baz", [5, 2]]]]]]]]]
[:program,
 [:stmts_add,
  [:stmts_new],
  [:case,
   [:vcall, [:@ident, "foo", [1, 5]]],
   [:in,
    [:hshptn, nil, nil, nil],
    [:stmts_add, [:stmts_new], [:vcall, [:@ident, "bar", [3, 2]]]],
    [:else, [:stmts_add, [:stmts_new], [:vcall, [:@ident, "baz", [5, 2]]]]]]]]]

As you can see, in the second example the hashptn node has no label on it. I'm not entirely sure what's going on there. Any insight would be appreciated.


Files

ripper-hash-pattern-on_label-16008.patch (1.87 KB) ripper-hash-pattern-on_label-16008.patch jeremyevans0 (Jeremy Evans), 10/08/2019 04:37 PM

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #20055: Ripper seems to skip some checks like `void value expression` and `duplicated variable name`ClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0