Sha256: 17c143d3cacb5dfcac8c05b0f5e9aa75603052547ff6a52ba307080e086c33e2

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

require_relative "show_source_with_c_internals/code_fetcher"

module Pry::CInternals
  class ShowSourceWithCInternals < Pry::Command::ShowSource
    def options(opt)
      super(opt)
      opt.on :c, "c-source", "Show source of a C identifier in MRI (rather than Ruby method of same name)"
    end

    def show_c_source
      if opts.present?(:all)
        result, file = CodeFetcher.new(line_number_style: line_number_style)
                         .fetch_all_definitions(obj_name)
      else
        result, file = CodeFetcher.new(line_number_style: line_number_style)
                         .fetch_first_definition(obj_name)
      end
      if result
        set_file_and_dir_locals(file)
        pry_instance.pager.page result
      else
        raise Pry::CommandError, no_definition_message
      end
    end

    def process
      if opts.present?(:c) && !pry_instance.config.skip_cruby_source
        show_c_source
        return
      else
        super
      end
    rescue Pry::CommandError
      raise if pry_instance.config.skip_cruby_source
      show_c_source
    end

    private

    # We can number lines with their actual line numbers
    # or starting with 1 (base-one)
    def line_number_style
      if opts.present?(:'base-one')
        :'base-one'
      elsif opts.present?(:'line-numbers')
        :'line-numbers'
      else
        nil
      end
    end

    Pry::Commands.add_command(ShowSourceWithCInternals)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pry-doc-1.5.0 lib/pry-doc/pry_ext/show_source_with_c_internals.rb
pry-doc-1.4.0 lib/pry-doc/pry_ext/show_source_with_c_internals.rb
pry-doc-1.3.0 lib/pry-doc/pry_ext/show_source_with_c_internals.rb
pry-doc-1.2.0 lib/pry-doc/pry_ext/show_source_with_c_internals.rb