<% if type.program? %> <%= type.full_name.gsub("::", "::") %> <% else %> <%= type.abstract? ? "abstract " : ""%><%= type.kind %> <%= type.full_name.gsub("::", "::") %> <% end %>

<% if type.superclass %> <%= type.superclass_hierarchy %> <% end %> <% if doc = type.formatted_doc %>

<%= Crystal::Doc.anchor_link("overview") %> Overview

<%= doc %> <% end %> <% if type.alias? %>

<%= Crystal::Doc.anchor_link("alias-definition") %> Alias Definition

<%= type.formatted_alias_definition %> <% end %> <%= OtherTypesTemplate.new("Included Modules", type, type.included_modules) %> <%= OtherTypesTemplate.new("Extended Modules", type, type.extended_modules) %> <%= OtherTypesTemplate.new("Direct Known Subclasses", type, type.subclasses) %> <%= OtherTypesTemplate.new("Direct including types", type, type.including_types) %> <% if locations = type.locations %>

<%= Crystal::Doc.anchor_link("defined-in") %> Defined in:

<% locations.each do |location| %> <% if url = project_info.source_url(location) %> <%= location.filename_in_project %><% if location.show_line_number %>:<%= location.line_number %><% end %> <% else %> <%= location.filename_in_project %><% if location.show_line_number %>:<%= location.line_number %><% end %> <% end %>
<% end %> <% end %> <% unless type.constants.empty? %> <% if type.enum? %>

<%= Crystal::Doc.anchor_link("enum-members") %> Enum Members

<% else %>

<%= Crystal::Doc.anchor_link("constant-summary") %> Constant Summary

<% end %>
<% type.constants.each do |const| %>
<%= const.name %> = <%= const.formatted_value %>
<% if doc = const.formatted_doc %>
<%= doc %>
<% end %> <% end %>
<% end %> <%= MethodSummaryTemplate.new("Constructors", type.constructors) %> <%= MethodSummaryTemplate.new(type.program? ? "Method Summary" : "Class Method Summary", type.class_methods) %> <%= MethodSummaryTemplate.new("Macro Summary", type.macros) %> <%= MethodSummaryTemplate.new("Instance Method Summary", type.instance_methods) %>
<% type.ancestors.each do |ancestor| %> <%= MethodsInheritedTemplate.new(type, ancestor, ancestor.instance_methods, "Instance") %> <%= MethodsInheritedTemplate.new(type, ancestor, ancestor.constructors, "Constructor") %> <%= MethodsInheritedTemplate.new(type, ancestor, ancestor.class_methods, "Class") %> <%= MacrosInheritedTemplate.new(type, ancestor, ancestor.macros) %> <% end %>
<%= MethodDetailTemplate.new("Constructor Detail", type.constructors) %> <%= MethodDetailTemplate.new(type.program? ? "Method Detail" : "Class Method Detail", type.class_methods) %> <%= MethodDetailTemplate.new("Macro Detail", type.macros) %> <%= MethodDetailTemplate.new("Instance Method Detail", type.instance_methods) %>