stdlib_libraries/ripper_grammar_forms_no_parens.rb

tests/_examples/stdlib_libraries/ripper_grammar_forms_no_parens.rb in the metorex repository.

# Ripper reads a separator after a condition, a command given as the one
# argument in parentheses, calls on a command's `do` block, and `return` in
# a singleton class the way MRI's parser does. A form MRI rejects gives nil.
require "ripper"

SOURCES = [
  "if a\n;b\nend",
  "if a;;b end",
  "if a ;\n ; b end",
  "if a\n\nb\nend",
  "if a;\nb\nend",
  "if a\nthen b end",
  "if a; then b end",
  "while a\n;b\nend",
  "while a;;b end",
  "until a\n\nb\nend",
  "for x in a\n;b\nend",
  "for x in a;b;end",
  "unless a\n;b\nend",
  "if a\nelsif c\n;b\nend",
  "case a\nwhen 1\n;b\nend",
  "case a\nwhen 1; ;b\nend",
  "begin\n;a\nrescue\n;b\nend",
  "while a do ;b end",
  "p(a.b 1)",
  "p(bar [2])",
  "p(gather ())",
  "p(a.b 1, 2)",
  "p(foo 1)",
  "p(foo 1, 2)",
  "foo(1, bar 2)",
  "p(foo 1 do end)",
  "foo do\nend.bar do\nend",
  "foo do end.bar 1 do end",
  "class << self; return 1; end",
  "class A; class << self; return 1; end; end",
  "foo(a.b 1)",
  "p(foo a: 1)",
  "p(foo 1, bar do end)",
  "p((foo 1 do end))",
  "p(foo bar { baz 1 do end })",
  "foo 1 do end",
  "foo 1 do end.bar do end",
  "foo 1 do end.bar",
  "foo 1 do end.bar 2",
  "foo 1 do end.bar { }",
  "foo 1 do end.bar(2) do end",
  "def m; class << self; return 1; end; end",
  "def m; class A; return 1; end; end",
  "def m; foo { class << self; return 1; end }; end",
  "TracePoint.new :call do |tp|\nend.enable do\nend",
  "a.b 1 do end.c do end.d",
  "foo 1 do end.bar(2)",
  "foo 1 do end.bar.baz",
].freeze

SOURCES.each { |source| p Ripper.sexp(source) }

Output:

[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 1]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:void_stmt], [:vcall, [:@ident, "b", [1, 6]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 3]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:vcall, [:@ident, "b", [3, 0]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:vcall, [:@ident, "b", [2, 0]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:vcall, [:@ident, "b", [2, 5]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:vcall, [:@ident, "b", [1, 11]]]], nil]]]
[:program, [[:while, [:vcall, [:@ident, "a", [1, 6]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 1]]]]]]]
[:program, [[:while, [:vcall, [:@ident, "a", [1, 6]]], [[:void_stmt], [:vcall, [:@ident, "b", [1, 9]]]]]]]
[:program, [[:until, [:vcall, [:@ident, "a", [1, 6]]], [[:vcall, [:@ident, "b", [3, 0]]]]]]]
[:program, [[:for, [:var_field, [:@ident, "x", [1, 4]]], [:vcall, [:@ident, "a", [1, 9]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 1]]]]]]]
[:program, [[:for, [:var_field, [:@ident, "x", [1, 4]]], [:vcall, [:@ident, "a", [1, 9]]], [[:vcall, [:@ident, "b", [1, 11]]]]]]]
[:program, [[:unless, [:vcall, [:@ident, "a", [1, 7]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 1]]]], nil]]]
[:program, [[:if, [:vcall, [:@ident, "a", [1, 3]]], [[:void_stmt]], [:elsif, [:vcall, [:@ident, "c", [2, 6]]], [[:void_stmt], [:vcall, [:@ident, "b", [3, 1]]]], nil]]]]
[:program, [[:case, [:vcall, [:@ident, "a", [1, 5]]], [:when, [[:@int, "1", [2, 5]]], [[:void_stmt], [:vcall, [:@ident, "b", [3, 1]]]], nil]]]]
[:program, [[:case, [:vcall, [:@ident, "a", [1, 5]]], [:when, [[:@int, "1", [2, 5]]], [[:void_stmt], [:vcall, [:@ident, "b", [2, 9]]]], nil]]]]
[:program, [[:begin, [:bodystmt, [[:void_stmt], [:vcall, [:@ident, "a", [2, 1]]]], [:rescue, nil, nil, [[:void_stmt], [:vcall, [:@ident, "b", [4, 1]]]], nil], nil, nil]]]]
[:program, [[:while, [:vcall, [:@ident, "a", [1, 6]]], [[:void_stmt], [:vcall, [:@ident, "b", [1, 12]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command_call, [:vcall, [:@ident, "a", [1, 2]]], [:@period, ".", [1, 3]], [:@ident, "b", [1, 4]], [:args_add_block, [[:@int, "1", [1, 6]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "bar", [1, 2]], [:args_add_block, [[:array, [[:@int, "2", [1, 7]]]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "gather", [1, 2]], [:args_add_block, [[:paren, [[:void_stmt]]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command_call, [:vcall, [:@ident, "a", [1, 2]]], [:@period, ".", [1, 3]], [:@ident, "b", [1, 4]], [:args_add_block, [[:@int, "1", [1, 6]], [:@int, "2", [1, 9]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "foo", [1, 2]], [:args_add_block, [[:@int, "1", [1, 6]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "foo", [1, 2]], [:args_add_block, [[:@int, "1", [1, 6]], [:@int, "2", [1, 9]]], false]]]]]]]
nil
nil
[:program, [[:method_add_block, [:call, [:method_add_block, [:method_add_arg, [:fcall, [:@ident, "foo", [1, 0]]], []], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [2, 3]], [:@ident, "bar", [2, 4]]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
[:program, [[:method_add_block, [:command_call, [:method_add_block, [:method_add_arg, [:fcall, [:@ident, "foo", [1, 0]]], []], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 10]], [:@ident, "bar", [1, 11]], [:args_add_block, [[:@int, "1", [1, 15]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
nil
nil
[:program, [[:method_add_arg, [:fcall, [:@ident, "foo", [1, 0]]], [:arg_paren, [[:command_call, [:vcall, [:@ident, "a", [1, 4]]], [:@period, ".", [1, 5]], [:@ident, "b", [1, 6]], [:args_add_block, [[:@int, "1", [1, 8]]], false]]]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "foo", [1, 2]], [:args_add_block, [[:bare_assoc_hash, [[:assoc_new, [:@label, "a:", [1, 6]], [:@int, "1", [1, 9]]]]]], false]]]]]]]
nil
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [:args_add_block, [[:paren, [[:method_add_block, [:command, [:@ident, "foo", [1, 3]], [:args_add_block, [[:@int, "1", [1, 7]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]], false]]]]]
[:program, [[:method_add_arg, [:fcall, [:@ident, "p", [1, 0]]], [:arg_paren, [[:command, [:@ident, "foo", [1, 2]], [:args_add_block, [[:method_add_block, [:method_add_arg, [:fcall, [:@ident, "bar", [1, 6]]], []], [:brace_block, nil, [[:method_add_block, [:command, [:@ident, "baz", [1, 12]], [:args_add_block, [[:@int, "1", [1, 16]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]]], false]]]]]]]
[:program, [[:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
[:program, [[:method_add_block, [:command_call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]], nil], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
[:program, [[:call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]]]]]
[:program, [[:method_add_arg, [:call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]]], [:args_add_block, [[:@int, "2", [1, 17]]], false]]]]
[:program, [[:method_add_block, [:command_call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]], nil], [:brace_block, nil, [[:void_stmt]]]]]]
[:program, [[:method_add_block, [:command_call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]], [:arg_paren, [:args_add_block, [[:@int, "2", [1, 17]]], false]]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
[:program, [[:def, [:@ident, "m", [1, 4]], [:params, nil, nil, nil, nil, nil, nil, nil], [:bodystmt, [[:sclass, [:var_ref, [:@kw, "self", [1, 16]]], [:bodystmt, [[:return, [:args_add_block, [[:@int, "1", [1, 29]]], false]]], nil, nil, nil]]], nil, nil, nil]]]]
nil
[:program, [[:def, [:@ident, "m", [1, 4]], [:params, nil, nil, nil, nil, nil, nil, nil], [:bodystmt, [[:method_add_block, [:method_add_arg, [:fcall, [:@ident, "foo", [1, 7]]], []], [:brace_block, nil, [[:sclass, [:var_ref, [:@kw, "self", [1, 22]]], [:bodystmt, [[:return, [:args_add_block, [[:@int, "1", [1, 35]]], false]]], nil, nil, nil]]]]]], nil, nil, nil]]]]
[:program, [[:method_add_block, [:command_call, [:method_add_block, [:command_call, [:var_ref, [:@const, "TracePoint", [1, 0]]], [:@period, ".", [1, 10]], [:@ident, "new", [1, 11]], [:args_add_block, [[:symbol_literal, [:symbol, [:@ident, "call", [1, 16]]]]], false]], [:do_block, [:block_var, [:params, [[:@ident, "tp", [1, 25]]], nil, nil, nil, nil, nil, nil], false], [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [2, 3]], [:@ident, "enable", [2, 4]], nil], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]]
[:program, [[:call, [:method_add_block, [:command_call, [:method_add_block, [:command_call, [:vcall, [:@ident, "a", [1, 0]]], [:@period, ".", [1, 1]], [:@ident, "b", [1, 2]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "c", [1, 13]], nil], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 21]], [:@ident, "d", [1, 22]]]]]
[:program, [[:method_add_arg, [:call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]]], [:arg_paren, [:args_add_block, [[:@int, "2", [1, 17]]], false]]]]]
[:program, [[:call, [:call, [:method_add_block, [:command, [:@ident, "foo", [1, 0]], [:args_add_block, [[:@int, "1", [1, 4]]], false]], [:do_block, nil, [:bodystmt, [[:void_stmt]], nil, nil, nil]]], [:@period, ".", [1, 12]], [:@ident, "bar", [1, 13]]], [:@period, ".", [1, 16]], [:@ident, "baz", [1, 17]]]]]