Sha256: 5f08e2e8ad4517e51ac17a55b1a2784765e38a28a35dc5ddbd10d37ab023515d

Contents?: true

Size: 959 Bytes

Versions: 6

Compression:

Stored size: 959 Bytes

Contents

require File.expand_path("../ripper_events_recorder", __FILE__)

# reports scanner events as hashes
class SexpBuilderWithScannerEvents < RipperEventsRecorder
  SCANNER_EVENTS.each do |event|
    module_eval(<<-End, __FILE__, __LINE__ + 1)
      def on_#{event}(tok)
        super
        { :#{ event } => tok }
      end
    End
  end

  PARSER_EVENT_TABLE.each do |event, arity|
    if /_new\z/ =~ event.to_s and arity == 0
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def on_#{event}
          super
          []
        end
      End
    elsif /_add\z/ =~ event.to_s
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def on_#{event}(list, item)
          super
          list.push item
          list
        end
      End
    else
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def on_#{event}(*args)
          super
          [:#{event}, *args]
        end
      End
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
reflexive-0.1.2 spec/sexp_builder_with_scanner_events.rb
reflexive-0.1.1 spec/sexp_builder_with_scanner_events.rb
reflexive-0.1.0 spec/sexp_builder_with_scanner_events.rb
reflexive-0.0.6 spec/sexp_builder_with_scanner_events.rb
reflexive-0.0.5 spec/sexp_builder_with_scanner_events.rb
reflexive-0.0.4 spec/sexp_builder_with_scanner_events.rb