From: "shyouhei (Shyouhei Urabe)" Date: 2012-05-31T11:05:33+09:00 Subject: [ruby-core:45332] [ruby-trunk - Bug #6306] Ripper lexes :on_kw when it should find :on_ident Issue #6306 has been updated by shyouhei (Shyouhei Urabe). So, you need to have semantics of your input, not a lexical analysis. Right? Then your using Ripper.lex is a wrong idea. You should not only catch those lexer events but also catch parser events. You might find Ripper.sexp() implemenation handy. https://github.com/ruby/ruby/blob/trunk/ext/ripper/lib/ripper/sexp.rb ---------------------------------------- Bug #6306: Ripper lexes :on_kw when it should find :on_ident https://bugs.ruby-lang.org/issues/6306#change-26912 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/