Skip to content

Commit e93c4a1

Browse files
author
Nathan Hawes
committed
[SourceKit][InterfaceGen] Don't print clang decls marked with the swift_private attribute.
This attribute is intended to mean there's a replacement declaration that should be used instead in Swift code. We already filter out decls with this attribute in code completion, but were still exposing them in generated interfaces. Resolves rdar://problem/62464954
1 parent b981b7e commit e93c4a1

File tree

5 files changed

+34
-21
lines changed

5 files changed

+34
-21
lines changed

include/swift/AST/PrintOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ struct PrintOptions {
232232
/// Whether to print unavailable parts of the AST.
233233
bool SkipUnavailable = false;
234234

235+
bool SkipSwiftPrivateClangDecls = false;
236+
235237
/// Whether to skip internal stdlib declarations.
236238
bool SkipPrivateStdlibDecls = false;
237239

@@ -515,6 +517,7 @@ struct PrintOptions {
515517
PrintOptions result = printForDiagnostics();
516518
result.SkipUnavailable = true;
517519
result.SkipImplicit = true;
520+
result.SkipSwiftPrivateClangDecls = true;
518521
result.SkipPrivateStdlibDecls = true;
519522
result.SkipUnderscoredStdlibProtocols = true;
520523
result.SkipDeinit = true;

lib/AST/ASTPrinter.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "swift/Parse/Lexer.h"
4444
#include "swift/Strings.h"
4545
#include "clang/AST/ASTContext.h"
46+
#include "clang/AST/Attr.h"
4647
#include "clang/AST/Decl.h"
4748
#include "clang/AST/DeclObjC.h"
4849
#include "clang/Basic/Module.h"
@@ -1670,6 +1671,14 @@ bool ShouldPrintChecker::shouldPrint(const Decl *D,
16701671
return false;
16711672
}
16721673

1674+
// Skip clang decls marked with the swift_private attribute.
1675+
if (Options.SkipSwiftPrivateClangDecls) {
1676+
if (auto ClangD = D->getClangDecl()) {
1677+
if (ClangD->hasAttr<clang::SwiftPrivateAttr>())
1678+
return false;
1679+
}
1680+
}
1681+
16731682
if (Options.SkipPrivateStdlibDecls &&
16741683
D->isPrivateStdlibDecl(!Options.SkipUnderscoredStdlibProtocols))
16751684
return false;

test/SourceKit/DocSupport/doc_clang_module.swift.response

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6525,135 +6525,135 @@ var FooSubUnnamedEnumeratorA1: Int { get }
65256525
{
65266526
key.kind: source.lang.swift.decl.var.global,
65276527
key.name: "FOO_MACRO_1",
6528-
key.usr: "c:Foo.h@3720@macro@FOO_MACRO_1",
6528+
key.usr: "c:Foo.h@3836@macro@FOO_MACRO_1",
65296529
key.offset: 5394,
65306530
key.length: 30,
65316531
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65326532
},
65336533
{
65346534
key.kind: source.lang.swift.decl.var.global,
65356535
key.name: "FOO_MACRO_2",
6536-
key.usr: "c:Foo.h@3742@macro@FOO_MACRO_2",
6536+
key.usr: "c:Foo.h@3858@macro@FOO_MACRO_2",
65376537
key.offset: 5425,
65386538
key.length: 30,
65396539
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65406540
},
65416541
{
65426542
key.kind: source.lang.swift.decl.var.global,
65436543
key.name: "FOO_MACRO_3",
6544-
key.usr: "c:Foo.h@3764@macro@FOO_MACRO_3",
6544+
key.usr: "c:Foo.h@3880@macro@FOO_MACRO_3",
65456545
key.offset: 5456,
65466546
key.length: 30,
65476547
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_3</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65486548
},
65496549
{
65506550
key.kind: source.lang.swift.decl.var.global,
65516551
key.name: "FOO_MACRO_4",
6552-
key.usr: "c:Foo.h@3828@macro@FOO_MACRO_4",
6552+
key.usr: "c:Foo.h@3944@macro@FOO_MACRO_4",
65536553
key.offset: 5487,
65546554
key.length: 31,
65556555
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_4</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65566556
},
65576557
{
65586558
key.kind: source.lang.swift.decl.var.global,
65596559
key.name: "FOO_MACRO_5",
6560-
key.usr: "c:Foo.h@3860@macro@FOO_MACRO_5",
6560+
key.usr: "c:Foo.h@3976@macro@FOO_MACRO_5",
65616561
key.offset: 5519,
65626562
key.length: 31,
65636563
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_5</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt64V\">UInt64</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65646564
},
65656565
{
65666566
key.kind: source.lang.swift.decl.var.global,
65676567
key.name: "FOO_MACRO_6",
6568-
key.usr: "c:Foo.h@3902@macro@FOO_MACRO_6",
6568+
key.usr: "c:Foo.h@4018@macro@FOO_MACRO_6",
65696569
key.offset: 5551,
65706570
key.length: 38,
65716571
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_6</decl.name>: <decl.var.type><ref.typealias usr=\"c:Foo.h@T@typedef_int_t\">typedef_int_t</ref.typealias></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65726572
},
65736573
{
65746574
key.kind: source.lang.swift.decl.var.global,
65756575
key.name: "FOO_MACRO_7",
6576-
key.usr: "c:Foo.h@3943@macro@FOO_MACRO_7",
6576+
key.usr: "c:Foo.h@4059@macro@FOO_MACRO_7",
65776577
key.offset: 5590,
65786578
key.length: 38,
65796579
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_7</decl.name>: <decl.var.type><ref.typealias usr=\"c:Foo.h@T@typedef_int_t\">typedef_int_t</ref.typealias></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65806580
},
65816581
{
65826582
key.kind: source.lang.swift.decl.var.global,
65836583
key.name: "FOO_MACRO_8",
6584-
key.usr: "c:Foo.h@3984@macro@FOO_MACRO_8",
6584+
key.usr: "c:Foo.h@4100@macro@FOO_MACRO_8",
65856585
key.offset: 5629,
65866586
key.length: 29,
65876587
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_8</decl.name>: <decl.var.type><ref.struct usr=\"s:s4Int8V\">Int8</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65886588
},
65896589
{
65906590
key.kind: source.lang.swift.decl.var.global,
65916591
key.name: "FOO_MACRO_9",
6592-
key.usr: "c:Foo.h@4015@macro@FOO_MACRO_9",
6592+
key.usr: "c:Foo.h@4131@macro@FOO_MACRO_9",
65936593
key.offset: 5659,
65946594
key.length: 30,
65956595
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_9</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
65966596
},
65976597
{
65986598
key.kind: source.lang.swift.decl.var.global,
65996599
key.name: "FOO_MACRO_10",
6600-
key.usr: "c:Foo.h@4045@macro@FOO_MACRO_10",
6600+
key.usr: "c:Foo.h@4161@macro@FOO_MACRO_10",
66016601
key.offset: 5690,
66026602
key.length: 31,
66036603
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_10</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int16V\">Int16</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66046604
},
66056605
{
66066606
key.kind: source.lang.swift.decl.var.global,
66076607
key.name: "FOO_MACRO_11",
6608-
key.usr: "c:Foo.h@4079@macro@FOO_MACRO_11",
6608+
key.usr: "c:Foo.h@4195@macro@FOO_MACRO_11",
66096609
key.offset: 5722,
66106610
key.length: 29,
66116611
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_11</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66126612
},
66136613
{
66146614
key.kind: source.lang.swift.decl.var.global,
66156615
key.name: "FOO_MACRO_OR",
6616-
key.usr: "c:Foo.h@4112@macro@FOO_MACRO_OR",
6616+
key.usr: "c:Foo.h@4228@macro@FOO_MACRO_OR",
66176617
key.offset: 5752,
66186618
key.length: 31,
66196619
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_OR</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66206620
},
66216621
{
66226622
key.kind: source.lang.swift.decl.var.global,
66236623
key.name: "FOO_MACRO_AND",
6624-
key.usr: "c:Foo.h@4161@macro@FOO_MACRO_AND",
6624+
key.usr: "c:Foo.h@4277@macro@FOO_MACRO_AND",
66256625
key.offset: 5784,
66266626
key.length: 32,
66276627
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_AND</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66286628
},
66296629
{
66306630
key.kind: source.lang.swift.decl.var.global,
66316631
key.name: "FOO_MACRO_BITWIDTH",
6632-
key.usr: "c:Foo.h@4211@macro@FOO_MACRO_BITWIDTH",
6632+
key.usr: "c:Foo.h@4327@macro@FOO_MACRO_BITWIDTH",
66336633
key.offset: 5817,
66346634
key.length: 38,
66356635
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_BITWIDTH</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt64V\">UInt64</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66366636
},
66376637
{
66386638
key.kind: source.lang.swift.decl.var.global,
66396639
key.name: "FOO_MACRO_SIGNED",
6640-
key.usr: "c:Foo.h@4266@macro@FOO_MACRO_SIGNED",
6640+
key.usr: "c:Foo.h@4382@macro@FOO_MACRO_SIGNED",
66416641
key.offset: 5856,
66426642
key.length: 36,
66436643
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_SIGNED</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66446644
},
66456645
{
66466646
key.kind: source.lang.swift.decl.var.global,
66476647
key.name: "FOO_MACRO_REDEF_1",
6648-
key.usr: "c:Foo.h@4477@macro@FOO_MACRO_REDEF_1",
6648+
key.usr: "c:Foo.h@4593@macro@FOO_MACRO_REDEF_1",
66496649
key.offset: 5893,
66506650
key.length: 36,
66516651
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_REDEF_1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
66526652
},
66536653
{
66546654
key.kind: source.lang.swift.decl.var.global,
66556655
key.name: "FOO_MACRO_REDEF_2",
6656-
key.usr: "c:Foo.h@4534@macro@FOO_MACRO_REDEF_2",
6656+
key.usr: "c:Foo.h@4650@macro@FOO_MACRO_REDEF_2",
66576657
key.offset: 5930,
66586658
key.length: 36,
66596659
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_REDEF_2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
@@ -6920,7 +6920,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
69206920
{
69216921
key.kind: source.lang.swift.decl.var.global,
69226922
key.name: "FOO_NIL",
6923-
key.usr: "c:Foo.h@5323@macro@FOO_NIL",
6923+
key.usr: "c:Foo.h@5439@macro@FOO_NIL",
69246924
key.offset: 6822,
69256925
key.length: 15,
69266926
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_NIL</decl.name>: <decl.var.type><tuple>()</tuple></decl.var.type></decl.var.global>",

test/SourceKit/Inputs/libIDE-mock-sdk/Foo.framework/Headers/Foo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,14 @@ int redeclaredInMultipleModulesFunc1(int a);
143143

144144
@protocol FooProtocolDerived<FooProtocolBase>
145145
@end
146-
146+
#define NS_REFINED_FOR_SWIFT __attribute__((swift_private))
147147
@interface FooClassBase
148148
- (void) fooBaseInstanceFunc0;
149149
- (FooClassBase *) fooBaseInstanceFunc1:(id)anObject;
150150
- (instancetype) init __attribute__((objc_designated_initializer));
151151
- (instancetype) initWithFloat:(float)f;
152152
- (void) fooBaseInstanceFuncOverridden;
153-
153+
@property (readonly) int hiddenProp NS_REFINED_FOR_SWIFT;
154154
+ (void) fooBaseClassFunc0;
155155
@end
156156

test/SourceKit/InterfaceGen/Inputs/header.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
void doSomethingInHead(int arg);
2-
2+
#define NS_REFINED_FOR_SWIFT __attribute__((swift_private))
33
@interface BaseInHead
44
- (void)doIt:(int)arg;
5+
- (void)otherThing:(int)arg NS_REFINED_FOR_SWIFT;
56
@end
67

78
/// Awesome name.

0 commit comments

Comments
 (0)