<% if type.program? %>
  <%= type.full_name.gsub("::", "::") %>
<% else %>
  
    <%= type.abstract? ? "abstract " : ""%><%= type.visibility.try(&.+(" ")) %><%= 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 %>
<% if type.type_def? %>
  <%= Crystal::Doc.anchor_link("type-definition") %> Type Definition
<%= type.formatted_type_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 %>
    <% 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) %>
<% end %>