[swift-users] Package module name collisions

Jason Lee jasonlee9 at gmail.com
Mon Feb 1 21:50:17 CST 2016

Hmm, ok, so I wasn't too far off. I guess this still is along the lines of
the Obj-C way of namespacing. Sorta.. I'm going to look into this more on
the swift package project and in the mean time, I'll use the relevant
project name prefix in the module name. Thanks!

On Mon, Feb 1, 2016 at 5:53 PM, Erica Sadun <erica at ericasadun.com> wrote:

> This is a good reason why package names should be clear and specific,
> avoiding common phrases and terms that will overlap.
> A proven way to avoid such issues is to namespace your packages in some
> way, e.g. prefer SadunStringUtilities vs SwiftString.
> At this time there is no built-in way that I know of how to deal with
> module name collisions. So let me speculate about what
> a solution might look like. (Skip to the next message if this doesn't
> interest.) Having a reverse domain name as
> part of the Package declaration syntax maybe could address part of the
> issue, for example:
> import PackageDescription
> let package = Package(
>     name: "SwiftString"
>     origin: "com.sadun"
> )
> and in the case of name conflicts use:
> import com.sadun.SwiftString
> import com.LeeJason.SwiftString
> with all the annoying resolution that might involve in disambiguating
> symbols.  I could also
> see some kind of package alias being needed if this problem got too bad,
> e.g.
> packagealias Sadun = com.sadun.SwiftString
> packagealias LeeJ = com.lLeeJason.SwiftString
> let x = LeeJ.countStringItems(someString)
> but I don't know how Swift would disambiguate, for example, two packages
> that both created
>  public extensions on String both being imported into the same file, and
> both offering conflicting, say, properties.
> -- Erica
> On Feb 1, 2016, at 6:41 PM, Jason Lee via swift-users <
> swift-users at swift.org> wrote:
> Today I introduced a dependency on another project's package with brought
> over a module name that conflicted with one he modules in my project.
> Currently my project has multiple modules (and executables) in the package
> and everything is working well for me. However, when I got this conflict
> today, I was thinking this will be a problem going forward. I'm sure it's
> been solved already by the package manager team, but I haven't figured out
> how to do this from the docs yet.
> An example:
> Package 'A' has a module named 'Base'
> My package also has a module named 'Base'
> When I build, I get a circular ref error now. One way I was thinking I cld
> fix this on my end is to prefix all my module names with my package name
> (seems redundant, of course). Something like 'Base' becomes 'MyAppBase'.
> And my imports could look like so:
> import Foundation
> import Base
> import MyAppBase
> Any thoughts on this? Thx.
> - jason
> Sent from my iPhone
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160201/c36745ca/attachment.html>

More information about the swift-users mailing list