Skip to content

Commit a2d9808

Browse files
authored
Merge pull request #76728 from tshortli/se0444-acceptance
SE-0444: Promote MemberImportVisibility to an upcoming feature
2 parents 746c808 + d373036 commit a2d9808

8 files changed

+25
-10
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@
55
66
## Swift (next)
77

8+
* [SE-0444][]:
9+
When the upcoming feature `MemberImportVisibility` is enabled, Swift will
10+
require that a module be directly imported in a source file when resolving
11+
member declarations from that module:
12+
13+
```swift
14+
let recipe = "2 slices of bread, 1.5 tbs peanut butter".parse()
15+
// error: instance method 'parse()' is inaccessible due to missing import of
16+
// defining module 'RecipeKit'
17+
// note: add import of module 'RecipeKit'
18+
```
19+
20+
This new behavior prevents ambiguities from arising when a transitively
21+
imported module declares a member that conflicts with a member of a directly
22+
imported module.
23+
824
* Syntactic SourceKit queries no longer attempt to provide information
925
within the inactive `#if` regions. For example, given:
1026

@@ -10629,6 +10645,7 @@ using the `.dynamicType` member to retrieve the type of an expression should mig
1062910645
[SE-0428]: https://github.com/apple/swift-evolution/blob/main/proposals/0428-resolve-distributed-actor-protocols.md
1063010646
[SE-0431]: https://github.com/apple/swift-evolution/blob/main/proposals/0431-isolated-any-functions.md
1063110647
[SE-0442]: https://github.com/swiftlang/swift-evolution/blob/main/proposals/0442-allow-taskgroup-childtaskresult-type-to-be-inferred.md
10648+
[SE-0444]: https://github.com/swiftlang/swift-evolution/blob/main/proposals/0444-member-import-visibility.md
1063210649
[#64927]: <https://github.com/apple/swift/issues/64927>
1063310650
[#42697]: <https://github.com/apple/swift/issues/42697>
1063410651
[#42728]: <https://github.com/apple/swift/issues/42728>

include/swift/Basic/Features.def

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ UPCOMING_FEATURE(GlobalActorIsolatedTypesUsability, 0434, 6)
223223
// Swift 7
224224
UPCOMING_FEATURE(ExistentialAny, 335, 7)
225225
UPCOMING_FEATURE(InternalImportsByDefault, 409, 7)
226+
UPCOMING_FEATURE(MemberImportVisibility, 444, 7)
226227

227228
EXPERIMENTAL_FEATURE(StaticAssert, false)
228229
EXPERIMENTAL_FEATURE(NamedOpaqueTypes, false)
@@ -376,9 +377,6 @@ EXPERIMENTAL_FEATURE(GroupActorErrors, true)
376377
// Enable explicit isolation of closures.
377378
EXPERIMENTAL_FEATURE(ClosureIsolation, true)
378379

379-
// Whether lookup of members respects the enclosing file's imports.
380-
EXPERIMENTAL_FEATURE_EXCLUDED_FROM_MODULE_INTERFACE(MemberImportVisibility, true)
381-
382380
// Enable @implementation on extensions of ObjC classes with non-fixed layout
383381
// due to resilient stored properties. Requires OS support; this flag exists for
384382
// staging purposes.

lib/AST/FeatureSet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ UNINTERESTING_FEATURE(FullTypedThrows)
6868
UNINTERESTING_FEATURE(ExistentialAny)
6969
UNINTERESTING_FEATURE(InferSendableFromCaptures)
7070
UNINTERESTING_FEATURE(ImplicitOpenExistentials)
71+
UNINTERESTING_FEATURE(MemberImportVisibility)
7172

7273
// ----------------------------------------------------------------------------
7374
// MARK: - Experimental Features
@@ -275,7 +276,6 @@ static bool usesFeatureIsolatedAny(Decl *decl) {
275276
});
276277
}
277278

278-
UNINTERESTING_FEATURE(MemberImportVisibility)
279279
UNINTERESTING_FEATURE(IsolatedAny2)
280280
UNINTERESTING_FEATURE(GlobalActorIsolatedTypesUsability)
281281
UNINTERESTING_FEATURE(ObjCImplementation)

test/NameLookup/members_transitive.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// RUN: %target-swift-frontend -emit-module -I %t -o %t %S/Inputs/MemberImportVisibility/members_C.swift
55
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -verify-additional-prefix ambiguity-
66
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 6 -package-name TestPackage -verify-additional-prefix ambiguity-
7-
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -enable-experimental-feature MemberImportVisibility -verify-additional-prefix member-visibility-
7+
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -enable-upcoming-feature MemberImportVisibility -verify-additional-prefix member-visibility-
88

99
import members_C
1010
// expected-member-visibility-note 15{{add import of module 'members_B'}}{{1-1=internal import members_B\n}}

test/NameLookup/members_transitive_multifile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// RUN: %target-swift-frontend -emit-module -I %t -o %t %S/Inputs/MemberImportVisibility/members_C.swift
66
// RUN: %target-swift-frontend -typecheck -primary-file %t/main.swift %t/A.swift %t/B.swift %t/C.swift -I %t -verify -swift-version 5
77
// RUN: %target-swift-frontend -typecheck -primary-file %t/main.swift %t/A.swift %t/B.swift %t/C.swift -I %t -verify -swift-version 6
8-
// RUN: %target-swift-frontend -typecheck -primary-file %t/main.swift %t/A.swift %t/B.swift %t/C.swift -I %t -verify -swift-version 5 -enable-experimental-feature MemberImportVisibility -verify-additional-prefix member-visibility-
8+
// RUN: %target-swift-frontend -typecheck -primary-file %t/main.swift %t/A.swift %t/B.swift %t/C.swift -I %t -verify -swift-version 5 -enable-upcoming-feature MemberImportVisibility -verify-additional-prefix member-visibility-
99

1010
//--- main.swift
1111

test/NameLookup/members_transitive_multifile_access_level.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
// RUN: -primary-file %t/extensions.swift \
2020
// RUN: %t/imports.swift \
2121
// RUN: -I %t -package-name Package \
22-
// RUN: -enable-experimental-feature MemberImportVisibility \
22+
// RUN: -enable-upcoming-feature MemberImportVisibility \
2323
// RUN: -verify-additional-prefix public-by-default-
2424

2525
// RUN: %target-swift-frontend -typecheck -verify -swift-version 5 \
@@ -29,7 +29,7 @@
2929
// RUN: -primary-file %t/extensions.swift \
3030
// RUN: %t/imports.swift \
3131
// RUN: -I %t -package-name Package \
32-
// RUN: -enable-experimental-feature MemberImportVisibility \
32+
// RUN: -enable-upcoming-feature MemberImportVisibility \
3333
// RUN: -enable-upcoming-feature InternalImportsByDefault \
3434
// RUN: -verify-additional-prefix internal-by-default-
3535

test/NameLookup/members_transitive_objc.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/MemberImportVisibility -o %t %S/Inputs/MemberImportVisibility/Categories_E.swift
66
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 5
77
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 6
8-
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 5 -enable-experimental-feature MemberImportVisibility -verify-additional-prefix member-visibility-
8+
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 5 -enable-upcoming-feature MemberImportVisibility -verify-additional-prefix member-visibility-
99

1010
// REQUIRES: objc_interop
1111

test/NameLookup/members_transitive_underlying_clang.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// RUN: split-file %s %t
33
// RUN: %target-swift-frontend -typecheck -primary-file %t/Primary.swift %t/Other.swift -I %S/Inputs/MemberImportVisibility -module-name Underlying -verify -swift-version 5
44
// RUN: %target-swift-frontend -typecheck -primary-file %t/Primary.swift %t/Other.swift -I %S/Inputs/MemberImportVisibility -module-name Underlying -verify -swift-version 6
5-
// RUN: %target-swift-frontend -typecheck -primary-file %t/Primary.swift %t/Other.swift -I %S/Inputs/MemberImportVisibility -module-name Underlying -verify -swift-version 5 -enable-experimental-feature MemberImportVisibility
5+
// RUN: %target-swift-frontend -typecheck -primary-file %t/Primary.swift %t/Other.swift -I %S/Inputs/MemberImportVisibility -module-name Underlying -verify -swift-version 5 -enable-upcoming-feature MemberImportVisibility
66

77
//--- Other.swift
88
@_exported import Underlying

0 commit comments

Comments
 (0)