[#54738] [ruby-trunk - Bug #8358][Open] TestSprintf#test_float test failuer on mingw32 — "phasis68 (Heesob Park)" <phasis@...>

36 messages 2013/05/02

[#54749] [ruby-trunk - Feature #8361][Open] Alternative syntax for block parameter — "alexeymuranov (Alexey Muranov)" <redmine@...>

12 messages 2013/05/02

[#54798] [ruby-trunk - Bug #8370][Open] Constants MAX_MULTIPART_LENGTH in cgi\core.rb — "xibbar (Takeyuki FUJIOKA)" <xibbar@...>

17 messages 2013/05/05

[#54850] [ruby-trunk - Feature #8377][Open] Deprecate :: for method calls in 2.1 — "charliesome (Charlie Somerville)" <charliesome@...>

27 messages 2013/05/07

[#54881] [ruby-trunk - Bug #8384][Open] Cannot build ruby against OpenSSL build with "no-ec2m" — "vo.x (Vit Ondruch)" <v.ondruch@...>

16 messages 2013/05/09

[#54921] [ruby-trunk - Bug #8393][Open] A class who's parent class is in a module can go wrong if files are required in the wrong order — "eLobato (Daniel Lobato Garcia)" <elobatocs@...>

15 messages 2013/05/12

[#54939] [ruby-trunk - Bug #8399][Open] Remove usage of RARRAY_PTR in C extensions when not needed — "dbussink (Dirkjan Bussink)" <d.bussink@...>

32 messages 2013/05/12

[#55053] [ruby-trunk - Feature #8426][Open] Implement class hierarchy method caching — "charliesome (Charlie Somerville)" <charliesome@...>

21 messages 2013/05/19

[#55096] [ruby-trunk - Feature #8430][Open] Rational number literal — "mrkn (Kenta Murata)" <muraken@...>

28 messages 2013/05/21

[#55197] [ruby-trunk - Feature #8461][Open] Easy way to disable certificate checking in XMLRPC::Client — "herwinw (Herwin Weststrate)" <herwin@...>

11 messages 2013/05/29

[ruby-core:54873] [ruby-trunk - Feature #8321] Ripper: I would like coordinates for keywords

From: "nobu (Nobuyoshi Nakada)" <nobu@...>
Date: 2013-05-09 01:57:38 UTC
List: ruby-core #54873
Issue #8321 has been updated by nobu (Nobuyoshi Nakada).


Do you mean changing following code from `current' to `proposal'?

*code
  Ripper.sexp(<<SRC)
  if some
    test
  elsif yet
    another
  else
    test
  end
  SRC

*current
  [:program,
    [
      [:if,
        [:vcall, [:@ident, "some", [1, 3]]],
        [
          [:vcall, [:@ident, "test", [2, 2]]]
        ],
        [:elsif,
          [:vcall, [:@ident, "yet", [3, 6]]],
          [
            [:vcall, [:@ident, "another", [4, 2]]]
          ],
          [:else,
            [
              [:vcall, [:@ident, "test", [6, 2]]]
            ]
          ]
        ]
      ]
    ]
  ]

*proposal
  [:program,
    [
      [:if,
        [:vcall, [:@ident, "some", [1, 3]]],
        [
          [:vcall, [:@ident, "test", [2, 2]]]
        ],
        [:elsif,
          [:vcall, [:@ident, "yet", [3, 6]]],
          [
            [:vcall, [:@ident, "another", [4, 2]]]
          ],
          [:else,
            [
              [:vcall, [:@ident, "test", [6, 2]]]
            ],
  	  [6, 0]	# location of `if'
          ],
  	[3, 0]		# location of `elsif'
        ],
        [1, 0]		# location of `else'
      ]
    ]
  ]


Or do you want the end location of `vcall's?

----------------------------------------
Feature #8321: Ripper: I would like coordinates for keywords
https://bugs.ruby-lang.org/issues/8321#change-39212

Author: ericp (Eric Promislow)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


=begin
Ripper gives the (({[line, column]})) coordinates for identifiers, strings, and numbers.

I would like it if it appended those coordinates to most of the block keywords,
including (({:program})), (({:if})), (({:while})), (({:unless})), (({:end})), (({:def})), (({:class})), (({:module})), etc.  As with the
identifiers, it should go at the end.  So an (({if}))-block would be represented as
 [0] :if
 [1] CONDITION
 [2] BLOCK
 [3] [:elsif, ...] || [:else, ...] || nil
 [4] [lineNo, colNo] # location of the leading :if/:elsif/:else/:unless

I currently get the first coordinate of ((%CONDITION%)), and then look up the preceding
(({:if}))/(({:elsif}))/(({:else})) using (({Ripper.lex(src).find_all{|posn kwd name| kwd == :on_kw && %w/if else elsif/.include?(name) }}))

So the info is in Ripper.  It would be more convenient if I could get that info in the src tree.

Note that my suggestion won't break (most) existing code, as the new data goes at the end
of the list.

The same would be useful for other keywords, including (({:module})) (({:class})) (({:def})) (({:try})) (({:catch})) (({:begin})) (({:rescue})).
=end



-- 
http://bugs.ruby-lang.org/

In This Thread