Issue #6306 has been updated by mame (Yusuke Endoh).

Status changed from Open to Rejected

Hello,

2012/4/17, turboladen (Steve Loveless) <steve.loveless / gmail.com>:
> I'd expect (({[[1, 1], :on_kw, "def"]})) to be (({[[1, 1], :on_ident,
> "def]})).  Sure, "def" is a keyword, but since it's prefaced by a ':', it's
> not necessarily being used in that context.  The same behavior pertains to
> all other keywords that are used as Symbols.


Not a bug.  That is exactly what is happenning in the Ruby lexer internal.

I don't understand what you really want to do, but anyway, you must handle the context manually, as on_kw is not only the exceptional case.

  Ripper.lex(':@foo')[1][1] #=> :on_ivar
  Ripper.lex(':$foo')[1][1] #=> :on_gvar
  Ripper.lex(':@@foo')[1][1] #=> :on_cvar
  Ripper.lex(':Foo')[1][1] #=> :on_const
  Ripper.lex(':+')[1][1] #=> :on_op
  Ripper.lex(':"foo"')[1][1] #=> :on_tstring_content
  Ripper.lex(':"foo#{bar}baz"')

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
Bug #6306: Ripper lexes :on_kw when it should find :on_ident
https://bugs.ruby-lang.org/issues/6306#change-25947

Author: turboladen (Steve Loveless)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]


=begin
  1.9.3-p125 :001 > require 'ripper'
  => true 
  1.9.3-p125 :002 > Ripper.lex %Q{:def}
  => [[[1, 0], :on_symbeg, ":"], [[1, 1], :on_kw, "def"]]

I'd expect (({[[1, 1], :on_kw, "def"]})) to be (({[[1, 1], :on_ident, "def]})).  Sure, "def" is a keyword, but since it's prefaced by a ':', it's not necessarily being used in that context.  The same behavior pertains to all other keywords that are used as Symbols.
=end


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