From: "mame (Yusuke Endoh)" Date: 2012-04-17T12:38:11+09:00 Subject: [ruby-core:44400] [ruby-trunk - Bug #6306][Rejected] Ripper lexes :on_kw when it should find :on_ident Issue #6306 has been updated by mame (Yusuke Endoh). Status changed from Open to Rejected Hello, 2012/4/17, turboladen (Steve Loveless) : > 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 ---------------------------------------- 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/