aha. Biome (since v0.2) does not really have a concept of a “local” target or a dependency root. Biome has a concept called culture which is relative, orthogonal to module namespace, and is defined for every module in its modulegraph.
culture determines the “rights” a particular symbol has within a particular context, how much the compiler “trusts” relationships emanating from that symbol, and how the compiler breaks ties when edge cases occur.
culture is basically a generalization of “locality”, and because it is relative, it means Biome doesn’t have to globally privilege any symbol or group of symbols.
for a more concrete example of this in action, if you go to the docs for swift-json
, you’ll see that they connect to the docs for swift-grammar
. however it would be incorrect to say that swiftinit hosts documentation “for swift-json
that includes docs for swift-grammar
”, just as it would be incorrect to say that swiftinit hosts documentation “for swift-grammar
that includes docs for swift-json
”. the same is true for swift-nio
and the other packages on the site.
i considered these spellings but i rejected /TargetName-version
because it does not generalize well to branch references (TargetName-master
looks like a package name), and /TargetName@version
because i did not want @
signs showing up in URLs.
versions are also logically a package-level concept, so it makes more sense for it to show up on the left-hand side of the module name.
based on reading How to properly reference a type and module with the same name? , i assumed ``Something``
would refer to the module, and ``Something/Something``
would refer to the the symbol. if this is true, then ``/Something``
would not provide any additional expressive power.
i always found this strange, but i implemented the lookup algorithm in Biome this way for consistency with DocC.