method
parse_method
v1_8_7_72 -
Show latest stable
- Class:
RDoc::RubyParser
parse_method(container, single, tk, comment)private
No documentation available.
# File lib/rdoc/parsers/parse_rb.rb, line 1882
def parse_method(container, single, tk, comment)
progress(".")
@stats.num_methods += 1
line_no = tk.line_no
column = tk.char_no
start_collecting_tokens
add_token(tk)
add_token_listener(self)
@scanner.instance_eval{@lex_state = EXPR_FNAME}
skip_tkspace(false)
name_t = get_tk
back_tk = skip_tkspace
meth = nil
added_container = false
dot = get_tk
if dot.kind_of?(TkDOT) or dot.kind_of?(TkCOLON2)
@scanner.instance_eval{@lex_state = EXPR_FNAME}
skip_tkspace
name_t2 = get_tk
case name_t
when TkSELF
name = name_t2.name
when TkCONSTANT
name = name_t2.name
prev_container = container
container = container.find_module_named(name_t.name)
if !container
added_container = true
obj = name_t.name.split("::").inject(Object) do |state, item|
state.const_get(item)
end rescue nil
type = obj.class == Class ? NormalClass : NormalModule
if not [Class, Module].include?(obj.class)
warn("Couldn't find #{name_t.name}. Assuming it's a module")
end
if type == NormalClass then
container = prev_container.add_class(type, name_t.name, obj.superclass.name)
else
container = prev_container.add_module(type, name_t.name)
end
end
else
# warn("Unexpected token '#{name_t2.inspect}'")
# break
skip_method(container)
return
end
meth = AnyMethod.new(get_tkread, name)
meth.singleton = true
else
unget_tk dot
back_tk.reverse_each do
|tk|
unget_tk tk
end
name = name_t.name
meth = AnyMethod.new(get_tkread, name)
meth.singleton = (single == SINGLE)
end
remove_token_listener(self)
meth.start_collecting_tokens
indent = TkSPACE.new(1,1)
indent.set_text(" " * column)
meth.add_tokens([TkCOMMENT.new(line_no,
1,
"# File #{@top_level.file_absolute_name}, line #{line_no}"),
NEWLINE_TOKEN,
indent])
meth.add_tokens(@token_stream)
add_token_listener(meth)
@scanner.instance_eval{@continue = false}
parse_method_parameters(meth)
if meth.document_self
container.add_method(meth)
elsif added_container
container.document_self = false
end
# Having now read the method parameters and documentation modifiers, we
# now know whether we have to rename #initialize to ::new
if name == "initialize" && !meth.singleton
if meth.dont_rename_initialize
meth.visibility = :protected
else
meth.singleton = true
meth.name = "new"
meth.visibility = :public
end
end
parse_statements(container, single, meth)
remove_token_listener(meth)
# Look for a 'call-seq' in the comment, and override the
# normal parameter stuff
if comment.sub!(/:?call-seq:(.*?)^\s*\#?\s*$/m, '')
seq = $1
seq.gsub!(/^\s*\#\s*/, '')
meth.call_seq = seq
end
meth.comment = comment
end