Skip to content

Structs with more than 32 keys have random order in docs #1016

@maartenvanvliet

Description

@maartenvanvliet

When I try to generate the documentation for a struct with a typespec that has more 32 keys, the order becomes random in the generated docs. I believe this has to do with an optimalization that happens to structs with over 32 keys.

See this commit for a failing test case.
maartenvanvliet@5198cf6

An output of the failing test

1) test modules returns the spec info for each non-private module type (ExDoc.RetrieverTest)
     test/ex_doc/retriever_test.exs:167
     Assertion with == failed
     code:  assert Macro.to_string(t.spec()) == "t() :: %TypesAndSpecs{a01: String.t(), a02: String.t(), a03: String.t(), a04: String.t(), a05: String.t(), a06: String.t(), a07: String.t(), a08: String.t(), a09: String.t(), a10: String.t(), a11: String.t(), a12: String.t(), a13: String.t(), a14: String.t(), a15: String.t(), a16: String.t(), a17: String.t(), a18: String.t(), a19: String.t(), a20: String.t(), a21: String.t(), a22: String.t(), a23: String.t(), a24: String.t(), a25: String.t(), a26: String.t(), a27: String.t(), a28: String.t(), a29: String.t(), a30: String.t(), a31: String.t(), a32: String.t(), a33: String.t()}"
     left:  "t() :: %TypesAndSpecs{a19: String.t(), a33: String.t(), a01: String.t(), a12: String.t(), a30: String.t(), a23: String.t(), a03: String.t(), a21: String.t(), a05: String.t(), a11: String.t(), a07: String.t(), a04: String.t(), a26: String.t(), a16: String.t(), a06: String.t(), a13: String.t(), a27: String.t(), a24: String.t(), a31: String.t(), a15: String.t(), a29: String.t(), a02: String.t(), a32: String.t(), a17: String.t(), a10: String.t(), a08: String.t(), a25: String.t(), a20: String.t(), a09: String.t(), a28: String.t(), a18: String.t(), a14: String.t(), a22: String.t()}"
     right: "t() :: %TypesAndSpecs{a01: String.t(), a02: String.t(), a03: String.t(), a04: String.t(), a05: String.t(), a06: String.t(), a07: String.t(), a08: String.t(), a09: String.t(), a10: String.t(), a11: String.t(), a12: String.t(), a13: String.t(), a14: String.t(), a15: String.t(), a16: String.t(), a17: String.t(), a18: String.t(), a19: String.t(), a20: String.t(), a21: String.t(), a22: String.t(), a23: String.t(), a24: String.t(), a25: String.t(), a26: String.t(), a27: String.t(), a28: String.t(), a29: String.t(), a30: String.t(), a31: String.t(), a32: String.t(), a33: String.t()}"
     stacktrace:
       test/ex_doc/retriever_test.exs:188: (test)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions