Module: Pry::Command::Ls::JRubyHacks

Included in:
MethodsHelper
Defined in:
lib/pry/commands/ls/jruby_hacks.rb

Instance Method Summary collapse

Instance Method Details

#rubbishness(name) ⇒ Object (private)

When removing jruby aliases, we want to keep the alias that is "least rubbish" according to this metric.


40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/pry/commands/ls/jruby_hacks.rb', line 40

def rubbishness(name)
  name.each_char.map do |x|
    case x
    when /[A-Z]/
      1
    when '?', '=', '!'
      -2
    else
      0
    end
  end.inject(&:+) + (name.size / 100.0)
end

#trim_jruby_aliases(methods) ⇒ Object (private)

JRuby creates lots of aliases for methods imported from java in an attempt to make life easier for ruby programmers. (e.g. getFooBar becomes get_foo_bar and foo_bar, and maybe foo_bar? if it returns a Boolean). The full transformations are in the assignAliases method of: https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java

This has the unfortunate side-effect of making the output of ls even more incredibly verbose than it normally would be for these objects; and so we filter out all but the nicest of these aliases here.

TODO: This is a little bit vague, better heuristics could be used. JRuby also has a lot of scala-specific logic, which we don't copy.


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/pry/commands/ls/jruby_hacks.rb', line 21

def trim_jruby_aliases(methods)
  grouped = methods.group_by do |m|
    m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase
  end

  grouped.flat_map do |_key, values|
    values = values.sort_by do |m|
      rubbishness(m.name)
    end

    found = []
    values.select do |x|
      (found.none? { |y| x == y }) && found << x
    end
  end
end