diff --git a/spec/compiler/crystal/tools/doc/type_spec.cr b/spec/compiler/crystal/tools/doc/type_spec.cr new file mode 100644 index 000000000000..b5978b4569ca --- /dev/null +++ b/spec/compiler/crystal/tools/doc/type_spec.cr @@ -0,0 +1,31 @@ +require "../../../spec_helper" + +describe Doc::Type do + it "doesn't show types for alias type" do + result = semantic(%( + class Foo + class Bar + end + end + + alias Alias = Foo + + Alias + )) + + program = result.program + + # Set locations to types relative to the included dir + # so they are included by the doc generator + foo_bar_type = program.types["Foo"].types["Bar"] + foo_bar_type.add_location(Location.new("./foo.cr", 1, 1)) + + alias_type = program.types["Alias"] + alias_type.add_location(Location.new("./foo.cr", 1, 1)) + + generator = Doc::Generator.new program, ["."], ".", nil + + doc_alias_type = generator.type(alias_type) + doc_alias_type.types.size.should eq(0) + end +end diff --git a/src/compiler/crystal/tools/doc/generator.cr b/src/compiler/crystal/tools/doc/generator.cr index 33367f8b55b9..1d762506fd4c 100644 --- a/src/compiler/crystal/tools/doc/generator.cr +++ b/src/compiler/crystal/tools/doc/generator.cr @@ -223,6 +223,13 @@ class Crystal::Doc::Generator def collect_subtypes(parent) types = [] of Type + # AliasType has defined `types?` to be the types + # of the aliased type, but for docs we don't want + # to list the nested types for aliases. + if parent.is_a?(AliasType) + return types + end + parent.types?.try &.each_value do |type| case type when Const, LibType