What does `@_exported import ` do?

I'm looking at the source for SPM and I see @_exported import for some of the imports in TSCLibc. What does this do exactly?

1 Like

Just re-export whatever you import, or import proxy/forwarding.

2 Likes

Thanks for the response. So just to be clear, this would mean that if I had module Foo:

// Foo.swift

func foo() { ... }

And module Bar:

// Bar.swift

@_exported import Foo

And dependencies set up like so:

//Package.swift
...
    targets: [
        .library(name: "Foo"),
        .library(name: "Bar", dependencies: ["Foo"]),
        .library(name: "Baz", dependencies: ["Bar"]),
    ]
...

Then from inside Baz, I wold still be able to caall foo without importing Foo directly:

// Baz.swift

import Bar

foo() // imported from Foo via Bar

Is that correct?

4 Likes

Yes. But keep in mind that anything starting with an underscore isn’t finalized yet, so you should not rely on it being stable.

2 Likes

bingo, you got it!