Skip to content
Supercharged method introspection in IRB
C Ruby Java C++
Latest commit af986e4 Feb 6, 2015 @oggy Bump to version 3.1.0.
Failed to load latest commit information.
lib Bump to version 3.1.0. Feb 6, 2015
.travis.yml See if we work with rbx 2.4.1. Jan 6, 2015


Looksee Build Status Gem Version

A tool for illustrating the ancestry and method lookup path of objects. Handy for exploring unfamiliar codebases.


Install me:

gem install looksee

Pop this in your .irbrc:

require 'looksee'

Now each object has a method ls, which shows you all its methods.

irb> [].ls
=> BasicObject
  !       __send__       instance_exec             singleton_method_undefined
  !=      equal?         method_missing
  ==      initialize     singleton_method_added
  __id__  instance_eval  singleton_method_removed
  !~                       frozen?                     puts
  <=>                      gem                         raise
  ===                      gem_original_require        rand
  =~                       gets                        readline
  Array                    global_variables            readlines
  Complex                  hash                        remove_instance_variable
  Float                    initialize_clone            require
  Integer                  initialize_copy             require_relative
  Rational                 initialize_dup              respond_to?
  String                   inspect                     respond_to_missing?
  __callee__               instance_of?                select
  __method__               instance_variable_defined?  send
  `                        instance_variable_get       set_trace_func
  abort                    instance_variable_set       singleton_class
  at_exit                  instance_variables          singleton_methods
  autoload                 is_a?                       sleep
  autoload?                iterator?                   spawn
  binding                  kind_of?                    sprintf
  block_given?             lambda                      srand
  caller                   load                        syscall
  catch                    local_variables             system
  class                    loop                        taint
  clone                    method                      tainted?
  define_singleton_method  methods                     tap
  display                  nil?                        test
  dup                      object_id                   throw
  enum_for                 open                        to_enum
  eql?                     p                           to_s
  eval                     print                       trace_var
  exec                     printf                      trap
  exit                     private_methods             trust
  exit!                    proc                        untaint
  extend                   protected_methods           untrace_var
  fail                     public_method               untrust
  fork                     public_methods              untrusted?
  format                   public_send                 warn
  freeze                   putc
  default_src_encoding  irb_binding
  all?            each_cons         flat_map  min_by        slice_before
  any?            each_entry        grep      minmax        sort
  chunk           each_slice        group_by  minmax_by     sort_by
  collect         each_with_index   include?  none?         take
  collect_concat  each_with_object  inject    one?          take_while
  count           entries           map       partition     to_a
  cycle           find              max       reduce        to_set
  detect          find_all          max_by    reject        zip
  drop            find_index        member?   reverse_each
  drop_while      first             min       select
  &            count       hash             rassoc                size
  *            cycle       include?         reject                slice
  +            delete      index            reject!               slice!
  -            delete_at   initialize       repeated_combination  sort
  <<           delete_if   initialize_copy  repeated_permutation  sort!
  <=>          drop        insert           replace               sort_by!
  ==           drop_while  inspect          reverse               take
  []           each        join             reverse!              take_while
  []=          each_index  keep_if          reverse_each          to_a
  assoc        empty?      last             rindex                to_ary
  at           eql?        length           rotate                to_s
  clear        fetch       map              rotate!               transpose
  collect      fill        map!             sample                uniq
  collect!     find_index  pack             select                uniq!
  combination  first       permutation      select!               unshift
  compact      flatten     pop              shift                 values_at
  compact!     flatten!    product          shuffle               zip
  concat       frozen?     push             shuffle!              |

Methods are colored according to whether they're public, protected, private, undefined (using Module#undef_method), or overridden.

You can hide, say, private methods like this:

irb> [].ls :noprivate

Or filter the list by Regexp:

irb> [].ls /^to_/
 => BasicObject
  to_enum  to_s
  to_yaml  to_yaml_properties  to_yaml_style
  to_a  to_set
  to_a  to_ary  to_s  to_yaml

Proxy objects

Objects that delegate everything via method_missing to some other object can be tricky, because they will delegate ls itself. To view such objects, you can always do:


This method inspects the object via interpreter extensions, so it works for the most Byzantine object. It will also work for BasicObject instances that don't have an ls method. Object#ls is simply a wrapper around Looksee.[].

To the source!

If you want to know more about any of those methods, Looksee can take you straight to the source in your editor:

[].ls.edit :to_set

By default, this uses vi; customize it like this:

# %f = file, %l = line number
Looksee.editor = "mate -l%l %f"

ls in your way?

If you have a library that for some reason can't handle an ls method existing on Object, you may rename it like this:

Looksee.rename ls: :_ls

Quick Reference

We've got one:



Looksee supports:

  • MRI 1.9.3, 2.0, 2.1, 2.2
  • JRuby 1.7
  • Rubinius 2.4


  • Bug reports
  • Source
  • Patches: Fork on Github, send pull request.
    • Include tests where practical.
    • Leave the version alone, or bump it in a separate commit.


Copyright (c) George Ogata. See LICENSE for details.

Something went wrong with that request. Please try again.