DocC fails when type/framework/package names collide

When the package, framework, and a type have basically the same name, how do I get DocC to render my custom landing and type pages instead of the defaults?

Sometimes I get my landing page to render, sometimes the data type's, never both, often neither

Some readers want more of the story:


Use case:

My package is named SlothWatcher. One of the source files is SlothWatcher.swift, which implements enum SlothWatcher, which serves as a namespace for various constants and functions.

I think it's totally reasonable (and common?) to:

  • Name the package SlothWatcher.
  • Name the backbone namespace enum SlothWatcher.
  • Name the file defining the backbone namespace SlothWatcher.swift

Enter DocC

Now I want DocC to generate documentation. DocC adds some requirements, which are all or some combination of:

  • The docc documentation catalog must be named SlothWatcher.docc.
  • The landing page for the documentation catalog, if overriden, must be named SlothWatcher.md.
  • The first line of that file must be # SlothWatcher (name in double-backticks).
  • All documentation referring to the enum docs must use SlothWatcher/SlothWatcher. Certainly in body text, and I've tried it both ways as the header for the enum extension.
  • If there's a naming rule for the enum extension file, I haven't found it. (Other than that you can't easily put a slash into a file name.)

I've lost track. Some of these may not be required at all, given that Xcode defaults none of them.

How, if at all, can I get this into working order?

Replies

I think it's totally reasonable (and common?) to:

  • Name the package SlothWatcher.
  • Name the backbone namespace enum SlothWatcher.

Reasonable: Yes! A good idea right now: No )-:

Using the same identifier for the module name and a root type within that module is a known issue in Swift itself. This is a hard problem to fix and that fix may require new syntax. Given that, my advice is that you not do this.

Once there’s a fix for the Swift bug you should revisit the DocC side of this.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"