| Class | RDoc::RI::NameDescriptor |
| In: |
ri/util.rb
|
| Parent: | Object |
Break argument into its constituent class or module names, an optional method type, and a method name
arg may be
We‘re fairly casual about delimiters: folks can say Kernel::puts, Kernel.puts, or Kernel\puts for example. There‘s one exception: if you say IO::read, we look for a class method, but if you say IO.read, we look for an instance method
# File ri/util.rb, line 33
33: def initialize(arg)
34: @class_names = []
35: separator = nil
36:
37: tokens = arg.split(/(\.|::|#)/)
38:
39: # Skip leading '::', '#' or '.', but remember it might
40: # be a method name qualifier
41: separator = tokens.shift if tokens[0] =~ /^(\.|::|#)/
42:
43: # Skip leading '::', but remember we potentially have an inst
44:
45: # leading stuff must be class names
46:
47: while tokens[0] =~ /^[A-Z]/
48: @class_names << tokens.shift
49: unless tokens.empty?
50: separator = tokens.shift
51: break unless separator == "::"
52: end
53: end
54:
55: # Now must have a single token, the method name, or an empty array
56: unless tokens.empty?
57: @method_name = tokens.shift
58: # We may now have a trailing !, ?, or = to roll into
59: # the method name
60: if !tokens.empty? && tokens[0] =~ /^[!?=]$/
61: @method_name << tokens.shift
62: end
63:
64: if @method_name =~ /::|\.|#/ or !tokens.empty?
65: raise RiError.new("Bad argument: #{arg}")
66: end
67: if separator && separator != '.'
68: @is_class_method = separator == "::"
69: end
70: end
71: end