def parse_visibility(code, default, container)
result = []
visibility_default = default || :public
used_modules = []
container.includes.each{|i| used_modules << i.name} if container
remaining_code = code.gsub(/^\s*?type[\s\,]+.*?\s+end\s+type.*?$/im, "")
remaining_code.split("\n").each{ |line|
if /^\s*?private\s*?$/ =~ line
visibility_default = :private
break
end
} if remaining_code
remaining_code.split("\n").each{ |line|
if /^\s*?private\s*?(::)?\s+(.*)\s*?(!.*?)?/i =~ line
methods = $2.sub(/!.*$/, '')
methods.split(",").each{ |meth|
meth.sub!(/!.*$/, '')
meth.gsub!(/:/, '')
result << {
"name" => meth.chomp.strip,
"visibility" => :private,
"used_modules" => used_modules.clone,
"file_or_module" => container,
"entity_is_discovered" => nil,
"local_name" => nil
}
}
elsif /^\s*?public\s*?(::)?\s+(.*)\s*?(!.*?)?/i =~ line
methods = $2.sub(/!.*$/, '')
methods.split(",").each{ |meth|
meth.sub!(/!.*$/, '')
meth.gsub!(/:/, '')
result << {
"name" => meth.chomp.strip,
"visibility" => :public,
"used_modules" => used_modules.clone,
"file_or_module" => container,
"entity_is_discovered" => nil,
"local_name" => nil
}
}
end
} if remaining_code
if container
result.each{ |vis_info|
vis_info["parent"] = container.name
}
end
return visibility_default, result
end