Skip to content

Commit 1f06cd7

Browse files
committed
Tweak diagnostic for a high-access member in a low-access extension
Before: declaring a public instance method in a private extension After: 'public' modifier conflicts with extension's default access of 'private'
1 parent 86de35b commit 1f06cd7

File tree

6 files changed

+37
-38
lines changed

6 files changed

+37
-38
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,9 +1210,10 @@ WARNING(access_control_setter_redundant,none,
12101210
"%1",
12111211
(AccessLevel, DescriptiveDeclKind, AccessLevel))
12121212
WARNING(access_control_ext_member_more,none,
1213-
"declaring %select{%error|a fileprivate|an internal|a public|open}0 %1 in "
1214-
"%select{a private|a fileprivate|an internal|a public|%error}2 extension",
1215-
(AccessLevel, DescriptiveDeclKind, AccessLevel))
1213+
"'%select{%error|fileprivate|internal|public|open}0' modifier conflicts "
1214+
"with extension's default access of "
1215+
"'%select{private|fileprivate|internal|public|%error}1'",
1216+
(AccessLevel, AccessLevel))
12161217
WARNING(access_control_ext_member_redundant,none,
12171218
"'%select{%error|fileprivate|internal|public|%error}0' modifier is redundant "
12181219
"for %1 declared in %select{a private (equivalent to fileprivate)|a fileprivate"

lib/Sema/TypeCheckAttr.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1640,7 +1640,6 @@ void AttributeChecker::visitAccessControlAttr(AccessControlAttr *attr) {
16401640
auto diag = TC.diagnose(attr->getLocation(),
16411641
diag::access_control_ext_member_more,
16421642
attr->getAccess(),
1643-
D->getDescriptiveKind(),
16441643
extAttr->getAccess());
16451644
swift::fixItAccess(diag, cast<ValueDecl>(D), defaultAccess, false,
16461645
true);

test/ClangImporter/objc_override.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ class MyHashableNSObject: NSObject {
116116
}
117117
}
118118

119-
120119
// FIXME: Remove -verify-ignore-unknown.
121120
// <unknown>:0: error: unexpected note produced: overridden declaration is here
122121
// <unknown>:0: error: unexpected note produced: setter for 'boolProperty' declared here

test/Compatibility/accessibility.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,17 @@ public extension PublicStruct {
8080
private func extImplPublic() {}
8181
}
8282
internal extension PublicStruct {
83-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
83+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
8484
fileprivate func extFuncInternal() {}
8585
private func extImplInternal() {}
8686
}
8787
fileprivate extension PublicStruct {
88-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
88+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
8989
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
9090
private func extImplFilePrivate() {}
9191
}
9292
private extension PublicStruct {
93-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
93+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
9494
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
9595
private func extImplPrivate() {}
9696
}
@@ -100,17 +100,17 @@ public extension InternalStruct { // expected-error {{extension of internal stru
100100
private func extImplPublic() {}
101101
}
102102
internal extension InternalStruct {
103-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
103+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
104104
fileprivate func extFuncInternal() {}
105105
private func extImplInternal() {}
106106
}
107107
fileprivate extension InternalStruct {
108-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
108+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
109109
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
110110
private func extImplFilePrivate() {}
111111
}
112112
private extension InternalStruct {
113-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
113+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
114114
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
115115
private func extImplPrivate() {}
116116
}
@@ -120,17 +120,17 @@ public extension FilePrivateStruct { // expected-error {{extension of fileprivat
120120
private func extImplPublic() {}
121121
}
122122
internal extension FilePrivateStruct { // expected-error {{extension of fileprivate struct cannot be declared internal}} {{1-10=}}
123-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
123+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
124124
fileprivate func extFuncInternal() {}
125125
private func extImplInternal() {}
126126
}
127127
fileprivate extension FilePrivateStruct {
128-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
128+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
129129
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
130130
private func extImplFilePrivate() {}
131131
}
132132
private extension FilePrivateStruct {
133-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
133+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
134134
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
135135
private func extImplPrivate() {}
136136
}
@@ -140,17 +140,17 @@ public extension PrivateStruct { // expected-error {{extension of private struct
140140
private func extImplPublic() {}
141141
}
142142
internal extension PrivateStruct { // expected-error {{extension of private struct cannot be declared internal}} {{1-10=}}
143-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
143+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
144144
fileprivate func extFuncInternal() {}
145145
private func extImplInternal() {}
146146
}
147147
fileprivate extension PrivateStruct { // expected-error {{extension of private struct cannot be declared fileprivate}} {{1-13=}}
148-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
148+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
149149
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
150150
private func extImplFilePrivate() {}
151151
}
152152
private extension PrivateStruct {
153-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
153+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
154154
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
155155
private func extImplPrivate() {}
156156
}
@@ -175,10 +175,10 @@ public class Base {
175175

176176

177177
public extension Base {
178-
open func extMemberPublic() {} // expected-warning {{declaring open instance method in a public extension}}
178+
open func extMemberPublic() {} // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
179179
}
180180
internal extension Base {
181-
open func extMemberInternal() {} // expected-warning {{declaring open instance method in an internal extension}}
181+
open func extMemberInternal() {} // expected-warning {{'open' modifier conflicts with extension's default access of 'internal'}}
182182
}
183183

184184
public class PublicSub: Base {

test/SILGen/accessibility_warnings.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,34 +66,34 @@ public extension PublicStruct {
6666

6767
internal extension PublicStruct {
6868
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings12PublicStructV17extMemberInternalyyF
69-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
69+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
7070
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV15extImplInternal33_5D2F2E026754A901C0FF90C404896D02LLyyF
7171
private func extImplInternal() {}
7272
}
7373
private extension PublicStruct {
7474
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV16extMemberPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
75-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
75+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
7676
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings12PublicStructV14extImplPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
7777
private func extImplPrivate() {}
7878
}
7979

8080
internal extension InternalStruct {
8181
// CHECK-DAG: sil hidden [ossa] @$s22accessibility_warnings14InternalStructV09extMemberC0yyF
82-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
82+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
8383
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings14InternalStructV07extImplC033_5D2F2E026754A901C0FF90C404896D02LLyyF
8484
private func extImplInternal() {}
8585
}
8686
private extension InternalStruct {
8787
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings14InternalStructV16extMemberPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
88-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
88+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
8989
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings14InternalStructV14extImplPrivate33_5D2F2E026754A901C0FF90C404896D02LLyyF
9090
private func extImplPrivate() {}
9191
}
9292

9393

9494
private extension PrivateStruct {
9595
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV09extMemberC0yyF
96-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
96+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
9797
// CHECK-DAG: sil private [ossa] @$s22accessibility_warnings13PrivateStruct33_5D2F2E026754A901C0FF90C404896D02LLV07extImplC0yyF
9898
private func extImplPrivate() {}
9999
}

test/Sema/accessibility.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,17 @@ public extension PublicStruct {
7979
private func extImplPublic() {}
8080
}
8181
internal extension PublicStruct {
82-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
82+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
8383
fileprivate func extFuncInternal() {}
8484
private func extImplInternal() {}
8585
}
8686
fileprivate extension PublicStruct {
87-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
87+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
8888
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
8989
private func extImplFilePrivate() {}
9090
}
9191
private extension PublicStruct {
92-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
92+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
9393
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
9494
private func extImplPrivate() {}
9595
}
@@ -99,17 +99,17 @@ public extension InternalStruct { // expected-error {{extension of internal stru
9999
private func extImplPublic() {}
100100
}
101101
internal extension InternalStruct {
102-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
102+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
103103
fileprivate func extFuncInternal() {}
104104
private func extImplInternal() {}
105105
}
106106
fileprivate extension InternalStruct {
107-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
107+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
108108
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
109109
private func extImplFilePrivate() {}
110110
}
111111
private extension InternalStruct {
112-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
112+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
113113
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
114114
private func extImplPrivate() {}
115115
}
@@ -119,17 +119,17 @@ public extension FilePrivateStruct { // expected-error {{extension of fileprivat
119119
private func extImplPublic() {}
120120
}
121121
internal extension FilePrivateStruct { // expected-error {{extension of fileprivate struct cannot be declared internal}} {{1-10=}}
122-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
122+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
123123
fileprivate func extFuncInternal() {}
124124
private func extImplInternal() {}
125125
}
126126
fileprivate extension FilePrivateStruct {
127-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
127+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
128128
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
129129
private func extImplFilePrivate() {}
130130
}
131131
private extension FilePrivateStruct {
132-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
132+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
133133
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
134134
private func extImplPrivate() {}
135135
}
@@ -139,17 +139,17 @@ public extension PrivateStruct { // expected-error {{extension of private struct
139139
private func extImplPublic() {}
140140
}
141141
internal extension PrivateStruct { // expected-error {{extension of private struct cannot be declared internal}} {{1-10=}}
142-
public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-10=}}
142+
public func extMemberInternal() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'internal'}} {{3-10=}}
143143
fileprivate func extFuncInternal() {}
144144
private func extImplInternal() {}
145145
}
146146
fileprivate extension PrivateStruct { // expected-error {{extension of private struct cannot be declared fileprivate}} {{1-13=}}
147-
public func extMemberFilePrivate() {} // expected-warning {{declaring a public instance method in a fileprivate extension}} {{3-10=}}
147+
public func extMemberFilePrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'fileprivate'}} {{3-10=}}
148148
fileprivate func extFuncFilePrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a fileprivate extension}} {{3-15=}}
149149
private func extImplFilePrivate() {}
150150
}
151151
private extension PrivateStruct {
152-
public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-10=}}
152+
public func extMemberPrivate() {} // expected-warning {{'public' modifier conflicts with extension's default access of 'private'}} {{3-10=}}
153153
fileprivate func extFuncPrivate() {} // expected-warning {{'fileprivate' modifier is redundant for instance method declared in a private (equivalent to fileprivate) extension}} {{3-15=}}
154154
private func extImplPrivate() {}
155155
}
@@ -174,10 +174,10 @@ public class Base {
174174

175175

176176
public extension Base {
177-
open func extMemberPublic() {} // expected-warning {{declaring open instance method in a public extension}}
177+
open func extMemberPublic() {} // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
178178
}
179179
internal extension Base {
180-
open func extMemberInternal() {} // expected-warning {{declaring open instance method in an internal extension}}
180+
open func extMemberInternal() {} // expected-warning {{'open' modifier conflicts with extension's default access of 'internal'}}
181181
}
182182

183183
public class PublicSub: Base {

0 commit comments

Comments
 (0)