Skip to content

Commit fa1ba18

Browse files
committed
[Index] Record the access level of declarations in the index
rdar://163256878
1 parent ca0491a commit fa1ba18

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1448
-1390
lines changed

lib/Index/IndexSymbol.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,32 @@ SymbolInfo index::getSymbolInfoForDecl(const Decl *D) {
261261
info.Properties |= SymbolProperty::SwiftAsync;
262262
}
263263

264+
if (auto *VD = dyn_cast<ValueDecl>(D)) {
265+
switch (VD->getEffectiveAccess()) {
266+
case AccessLevel::Private:
267+
info.Properties |= SymbolProperty::SwiftAccessControlPrivate;
268+
break;
269+
case AccessLevel::FilePrivate:
270+
info.Properties |= SymbolProperty::SwiftAccessControlFilePrivate;
271+
break;
272+
case AccessLevel::Internal:
273+
info.Properties |= SymbolProperty::SwiftAccessControlInternal;
274+
break;
275+
case AccessLevel::Package:
276+
info.Properties |= SymbolProperty::SwiftAccessControlPackage;
277+
break;
278+
case AccessLevel::Public:
279+
info.Properties |= SymbolProperty::SwiftAccessControlPublic;
280+
break;
281+
case AccessLevel::Open:
282+
info.Properties |= SymbolProperty::SwiftAccessControlOpen;
283+
break;
284+
}
285+
if (VD->isSPI()) {
286+
info.Properties |= SymbolProperty::SwiftSPI;
287+
}
288+
}
289+
264290
return info;
265291
}
266292

test/Index/access_level.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
2+
3+
private func myPrivateFunc() {}
4+
// CHECK: [[@LINE-1]]:14 | function(fileprivate)/Swift | myPrivateFunc() | {{.*}} | Def | rel: 0
5+
6+
fileprivate func myFileprivateFunc() {}
7+
// CHECK: [[@LINE-1]]:18 | function(fileprivate)/Swift | myFileprivateFunc() | {{.*}} | Def | rel: 0
8+
9+
func myInternalFunc() {}
10+
// CHECK: [[@LINE-1]]:6 | function(internal)/Swift | myInternalFunc() | {{.*}} | Def | rel: 0
11+
12+
package func myPackageFunc() {}
13+
// CHECK: [[@LINE-1]]:14 | function(package)/Swift | myPackageFunc() | {{.*}} | Def | rel: 0
14+
15+
public func myPublicFunc() {}
16+
// CHECK: [[@LINE-1]]:13 | function(public)/Swift | myPublicFunc() | {{.*}} | Def | rel: 0
17+
18+
open class MyOpenClass {}
19+
// CHECK: [[@LINE-1]]:12 | class(open)/Swift | MyOpenClass | {{.*}} | Def | rel: 0
20+
21+
@_spi(MySPI)
22+
public class MyPublicSPIClass {}
23+
// CHECK: [[@LINE-1]]:14 | class(SPI,public)/Swift | MyPublicSPIClass | {{.*}} | Def | rel: 0
24+
25+
@_spi(MySPI)
26+
open class MyOpenSPIClass {}
27+
// CHECK: [[@LINE-1]]:12 | class(SPI,open)/Swift | MyOpenSPIClass | {{.*}} | Def | rel: 0
28+
29+
private class Foo {
30+
public func publicInPrivate() {}
31+
// CHECK: [[@LINE-1]]:15 | instance-method(fileprivate)/Swift | publicInPrivate() | {{.*}} | Def,Dyn,RelChild | rel: 1
32+
}

test/Index/async.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
44

55
func globalAsyncFunc() async {}
6-
// CHECK: [[@LINE-1]]:6 | function(swift_async)/Swift | globalAsyncFunc() | {{.*}} | Def | rel: 0
6+
// CHECK: [[@LINE-1]]:6 | function(swift_async,internal)/Swift | globalAsyncFunc() | {{.*}} | Def | rel: 0
77

88
struct MyStruct {
99
func asyncMethod() async {}
10-
// CHECK: [[@LINE-1]]:8 | instance-method(swift_async)/Swift | asyncMethod() |
10+
// CHECK: [[@LINE-1]]:8 | instance-method(swift_async,internal)/Swift | asyncMethod() |
1111
}
1212

1313
class XCTestCase {}
1414
class MyTestCase : XCTestCase {
1515
func testSomeAsync() async {}
16-
// CHECK: [[@LINE-1]]:8 | instance-method(test,swift_async)/Swift | testSomeAsync() |
16+
// CHECK: [[@LINE-1]]:8 | instance-method(test,swift_async,internal)/Swift | testSomeAsync() |
1717
}

test/Index/circular.swift

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,66 @@
11
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
22

33
class SelfCycle : SelfCycle {}
4-
// CHECK: [[@LINE-1]]:7 | class/Swift | SelfCycle | {{[^ ]*}} | Def | rel: 0
5-
// CHECK: [[@LINE-2]]:19 | class/Swift | SelfCycle | {{[^ ]*}} | Ref,RelBase | rel: 1
6-
// CHECK: RelBase | class/Swift | SelfCycle | {{\W*}}
4+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | SelfCycle | {{[^ ]*}} | Def | rel: 0
5+
// CHECK: [[@LINE-2]]:19 | class(internal)/Swift | SelfCycle | {{[^ ]*}} | Ref,RelBase | rel: 1
6+
// CHECK: RelBase | class(internal)/Swift | SelfCycle | {{\W*}}
77

88
class Cycle1_A: Cycle1_B {}
9-
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_A | {{[^ ]*}} | Def | rel: 0
10-
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_B | {{[^ ]*}} | Ref,RelBase | rel: 1
11-
// CHECK: RelBase | class/Swift | Cycle1_A | {{[^ ]*}}
9+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | Cycle1_A | {{[^ ]*}} | Def | rel: 0
10+
// CHECK: [[@LINE-2]]:17 | class(internal)/Swift | Cycle1_B | {{[^ ]*}} | Ref,RelBase | rel: 1
11+
// CHECK: RelBase | class(internal)/Swift | Cycle1_A | {{[^ ]*}}
1212
class Cycle1_B: Cycle1_A {}
13-
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_B | {{[^ ]*}} | Def | rel: 0
14-
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_A | {{[^ ]*}} | Ref,RelBase | rel: 1
15-
// CHECK: RelBase | class/Swift | Cycle1_B | {{[^ ]*}}
13+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | Cycle1_B | {{[^ ]*}} | Def | rel: 0
14+
// CHECK: [[@LINE-2]]:17 | class(internal)/Swift | Cycle1_A | {{[^ ]*}} | Ref,RelBase | rel: 1
15+
// CHECK: RelBase | class(internal)/Swift | Cycle1_B | {{[^ ]*}}
1616

1717
class Cycle2_A: Cycle2_C {}
18-
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_A | {{[^ ]*}} | Def | rel: 0
19-
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_C | {{[^ ]*}} | Ref,RelBase | rel: 1
20-
// CHECK: RelBase | class/Swift | Cycle2_A | {{[^ ]*}}
18+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | Cycle2_A | {{[^ ]*}} | Def | rel: 0
19+
// CHECK: [[@LINE-2]]:17 | class(internal)/Swift | Cycle2_C | {{[^ ]*}} | Ref,RelBase | rel: 1
20+
// CHECK: RelBase | class(internal)/Swift | Cycle2_A | {{[^ ]*}}
2121
class Cycle2_B: Cycle2_A {}
22-
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_B | {{[^ ]*}} | Def | rel: 0
23-
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_A | {{[^ ]*}} | Ref,RelBase | rel: 1
24-
// CHECK: RelBase | class/Swift | Cycle2_B | {{[^ ]*}}
22+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | Cycle2_B | {{[^ ]*}} | Def | rel: 0
23+
// CHECK: [[@LINE-2]]:17 | class(internal)/Swift | Cycle2_A | {{[^ ]*}} | Ref,RelBase | rel: 1
24+
// CHECK: RelBase | class(internal)/Swift | Cycle2_B | {{[^ ]*}}
2525
class Cycle2_C: Cycle2_B {}
26-
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_C | {{[^ ]*}} | Def | rel: 0
27-
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_B | {{[^ ]*}} | Ref,RelBase | rel: 1
28-
// CHECK: RelBase | class/Swift | Cycle2_C | {{[^ ]*}}
26+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | Cycle2_C | {{[^ ]*}} | Def | rel: 0
27+
// CHECK: [[@LINE-2]]:17 | class(internal)/Swift | Cycle2_B | {{[^ ]*}} | Ref,RelBase | rel: 1
28+
// CHECK: RelBase | class(internal)/Swift | Cycle2_C | {{[^ ]*}}
2929

3030
class TestCase1: XCTestCase {}
31-
// CHECK: [[@LINE-1]]:7 | class/Swift | TestCase1 | {{[^ ]*}} | Def | rel: 0
32-
// CHECK: [[@LINE-2]]:18 | class/Swift | XCTestCase | {{[^ ]*}} | Ref,RelBase | rel: 1
33-
// CHECK: RelBase | class/Swift | TestCase1 | {{[^ ]*}}
31+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | TestCase1 | {{[^ ]*}} | Def | rel: 0
32+
// CHECK: [[@LINE-2]]:18 | class(internal)/Swift | XCTestCase | {{[^ ]*}} | Ref,RelBase | rel: 1
33+
// CHECK: RelBase | class(internal)/Swift | TestCase1 | {{[^ ]*}}
3434
class XCTestCase: TestCase1 {}
35-
// CHECK: [[@LINE-1]]:7 | class/Swift | XCTestCase | {{[^ ]*}} | Def | rel: 0
36-
// CHECK: [[@LINE-2]]:19 | class/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
37-
// CHECK: RelBase | class/Swift | XCTestCase | {{[^ ]*}}
35+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | XCTestCase | {{[^ ]*}} | Def | rel: 0
36+
// CHECK: [[@LINE-2]]:19 | class(internal)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
37+
// CHECK: RelBase | class(internal)/Swift | XCTestCase | {{[^ ]*}}
3838
class TestCase2: TestCase1 {}
39-
// CHECK: [[@LINE-1]]:7 | class/Swift | TestCase2 | {{[^ ]*}} | Def | rel: 0
40-
// CHECK: [[@LINE-2]]:18 | class/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
41-
// CHECK: RelBase | class/Swift | TestCase2 | {{[^ ]*}}
39+
// CHECK: [[@LINE-1]]:7 | class(internal)/Swift | TestCase2 | {{[^ ]*}} | Def | rel: 0
40+
// CHECK: [[@LINE-2]]:18 | class(internal)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
41+
// CHECK: RelBase | class(internal)/Swift | TestCase2 | {{[^ ]*}}
4242

4343
protocol SelfCycleP: SelfCycleP {}
44-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Def | rel: 0
45-
// CHECK: [[@LINE-2]]:22 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Ref,RelBase | rel: 1
46-
// CHECK: RelBase | protocol/Swift | SelfCycleP | {{[^ ]*}}
44+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | SelfCycleP | {{[^ ]*}} | Def | rel: 0
45+
// CHECK: [[@LINE-2]]:22 | protocol(internal)/Swift | SelfCycleP | {{[^ ]*}} | Ref,RelBase | rel: 1
46+
// CHECK: RelBase | protocol(internal)/Swift | SelfCycleP | {{[^ ]*}}
4747
protocol Cycle1P_A: Cycle1P_B {}
48-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Def | rel: 0
49-
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
50-
// CHECK: RelBase | protocol/Swift | Cycle1P_A | {{[^ ]*}}
48+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | Cycle1P_A | {{[^ ]*}} | Def | rel: 0
49+
// CHECK: [[@LINE-2]]:21 | protocol(internal)/Swift | Cycle1P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
50+
// CHECK: RelBase | protocol(internal)/Swift | Cycle1P_A | {{[^ ]*}}
5151
protocol Cycle1P_B: Cycle1P_A {}
52-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Def | rel: 0
53-
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
54-
// CHECK: RelBase | protocol/Swift | Cycle1P_B | {{[^ ]*}}
52+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | Cycle1P_B | {{[^ ]*}} | Def | rel: 0
53+
// CHECK: [[@LINE-2]]:21 | protocol(internal)/Swift | Cycle1P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
54+
// CHECK: RelBase | protocol(internal)/Swift | Cycle1P_B | {{[^ ]*}}
5555
protocol Cycle2P_A: Cycle2P_C {}
56-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Def | rel: 0
57-
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Ref,RelBase | rel: 1
58-
// CHECK: RelBase | protocol/Swift | Cycle2P_A | {{[^ ]*}}
56+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | Cycle2P_A | {{[^ ]*}} | Def | rel: 0
57+
// CHECK: [[@LINE-2]]:21 | protocol(internal)/Swift | Cycle2P_C | {{[^ ]*}} | Ref,RelBase | rel: 1
58+
// CHECK: RelBase | protocol(internal)/Swift | Cycle2P_A | {{[^ ]*}}
5959
protocol Cycle2P_B: Cycle2P_A {}
60-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Def | rel: 0
61-
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
62-
// CHECK: RelBase | protocol/Swift | Cycle2P_B | {{[^ ]*}}
60+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | Cycle2P_B | {{[^ ]*}} | Def | rel: 0
61+
// CHECK: [[@LINE-2]]:21 | protocol(internal)/Swift | Cycle2P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
62+
// CHECK: RelBase | protocol(internal)/Swift | Cycle2P_B | {{[^ ]*}}
6363
protocol Cycle2P_C: Cycle2P_B {}
64-
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Def | rel: 0
65-
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
66-
// CHECK: RelBase | protocol/Swift | Cycle2P_C | {{[^ ]*}}
64+
// CHECK: [[@LINE-1]]:10 | protocol(internal)/Swift | Cycle2P_C | {{[^ ]*}} | Def | rel: 0
65+
// CHECK: [[@LINE-2]]:21 | protocol(internal)/Swift | Cycle2P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
66+
// CHECK: RelBase | protocol(internal)/Swift | Cycle2P_C | {{[^ ]*}}

0 commit comments

Comments
 (0)