File tree Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -27,6 +27,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
27
27
#127 by @mattpolzin , @kareman , and @mattt .
28
28
- Fixed display of sidebar icons.
29
29
#145 by @mattt .
30
+ - Fixed inclusion of non-public subclasses of public superclasses.
31
+ #131 by @MattKiazyk .
30
32
31
33
## [ 1.0.0-beta.3] - 2020-05-19
32
34
Original file line number Diff line number Diff line change @@ -15,10 +15,12 @@ public final class Interface {
15
15
self . topLevelSymbols = symbols. filter { $0. api is Type || $0. id. pathComponents. isEmpty }
16
16
17
17
self . relationships = {
18
+ let symbols = symbols. filter { $0. isPublic }
18
19
let extensionsByExtendedType : [ String : [ Extension ] ] = Dictionary ( grouping: symbols. flatMap { $0. context. compactMap { $0 as? Extension } } , by: { $0. extendedType } )
19
20
20
21
var relationships : Set < Relationship > = [ ]
21
22
for symbol in symbols {
23
+
22
24
let lastDeclarationScope = symbol. context. last ( where: { $0 is Extension || $0 is Symbol } )
23
25
24
26
if let container = lastDeclarationScope as? Symbol {
Original file line number Diff line number Diff line change
1
+ import XCTest
2
+
3
+ import SwiftDoc
4
+ import SwiftSemantics
5
+ import struct SwiftSemantics. Protocol
6
+ import SwiftSyntax
7
+
8
+ final class InterfaceTypeTests : XCTestCase {
9
+
10
+ func testPrivateInheritance( ) throws {
11
+ let source = #"""
12
+ public class A { }
13
+
14
+ class B : A { }
15
+
16
+ public class C : A { }
17
+ """#
18
+
19
+ let url = try temporaryFile ( contents: source)
20
+ let sourceFile = try SourceFile ( file: url, relativeTo: url. deletingLastPathComponent ( ) )
21
+ let module = Module ( name: " Module " , sourceFiles: [ sourceFile] )
22
+
23
+ // `class A`
24
+ let classA = sourceFile. symbols [ 0 ]
25
+ XCTAssert ( classA. api is Class )
26
+
27
+ // `class B`
28
+ let classB = sourceFile. symbols [ 1 ]
29
+ XCTAssert ( classB. api is Class )
30
+
31
+ // `class C`
32
+ let classC = sourceFile. symbols [ 2 ]
33
+ XCTAssert ( classC. api is Class )
34
+
35
+ // Class B does not exist in subclasses because it's not public
36
+ // Class C exists in subclasses because it's public
37
+ let subclasses = module. interface. typesInheriting ( from: classA)
38
+ XCTAssertEqual ( subclasses. count, 1 )
39
+ XCTAssertEqual ( subclasses [ 0 ] . id, classC. id)
40
+ }
41
+ }
You can’t perform that action at this time.
0 commit comments