Swiftinit updates: January 2024

hi all, it’s been a while since our last update, so i’ve written up some release notes covering the most prominent user-facing improvements we’ve rolled out in the latest update to swiftinit.org.


:dress: Browse conforming types

Swiftinit now supports browsing all the conforming types of a protocol, including conforming types in other packages.

To view conforming types, visit the doc page for any protocol (such as Comparable) and navigate to the Browse conforming types link.

image

image

:uk: Package realms

To better accommodate growth of the site, the Swiftinit package index is now divided into multiple package realms, which determine the visibility of extensions and conforming types.

Packages in the same realm can:

  • contribute extensions to the original page for the extended type, and can
  • contribute conforming types to the master list of conformers to the target protocol.

Packages in different realms can still link to each other normally, and cross-package references are unaffected by package realms. However, realms are helpful for limiting the number of extensions shown on popular types, such as Sequence.

If a package is unable to publish extensions to types in a different package realm, you can still view the extensions on a package-local extension page (example). Such pages are linked in turquoise in the sidebar.

image

Most of the existing packages in the Swiftinit index have been grandmothered into the public realm and continue to share extensions.

:toolbox: Linkable list item anchors

It is now possible to share a link to a particular list item within a type’s member list, instead of a link to the referenced declaration itself, which may have been inherited from a protocol. Some developers may find this helpful for communicating to colleagues that a particular type supports an API.

image

To obtain the link, click on the $ sigil before the member’s signature.

:shopping_cart: SwiftPM product details

Swiftinit now collects information about all the SwiftPM products declared in a package’s manifest, and can display a list of all the modules included in a particular package product, including transitive dependencies.

Package products are found under the Products section of the landing page for a package snapshot’s documentation. (Example)

:pancakes: Source links for composite documentation

Swiftinit source links now show all the source files that contributed to the documentation for a particular symbol, instead of just the link to its doccomment. Practically, this means it is now possible to view the raw DocC curation list for symbols with manually-curated members.

image

:microscope: Mangled symbol infobox

Swiftinit now includes an expandable infobox containing the mangled name of each declaration, and the DocC hash you would need to refer to that symbol when writing documentation.

image

Internally, the database also supports looking up symbols by ABI name and we aim to surface this as a public debugging tool soon.

:pie: Module-level statistics

Swiftinit now has dedicated pages for viewing statistics about a specific module, instead of the package as a whole. (Previously, it was not possible to view the breakdowns, only a summary of each module.)

Module-level statistics can often provide a much clearer picture of how well-documented a package is, if a package vends a large number of undocumented C symbols.

16 Likes