def complete name
klasses = classes.keys
completions = []
klass, selector, method = parse_name name
klass_name = method ? name : klass
if name !~ /#|\./ then
completions = klasses.grep(/^#{Regexp.escape klass_name}[^:]*$/)
completions.concat klasses.grep(/^#{Regexp.escape name}[^:]*$/) if
name =~ /::$/
completions << klass if classes.key? klass
elsif selector then
completions << klass if classes.key? klass
elsif classes.key? klass_name then
completions << klass_name
end
if completions.include? klass and name =~ /#|\.|::/ then
methods = list_methods_matching name
if not methods.empty? then
completions.delete klass
elsif selector then
completions.delete klass
completions << "#{klass}#{selector}"
end
completions.push(*methods)
end
completions.sort.uniq
end