Skip to content

Commit caa988b

Browse files
committed
Support CaptureListRewriter Origin syntax location
1 parent 959babe commit caa988b

File tree

9 files changed

+360
-342
lines changed

9 files changed

+360
-342
lines changed

DesignDetail.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
```swift
1212
func xxx() {
1313
let xxx = XXX()
14-
// ^ <-------------¬
15-
// closure |
14+
// ^ <─────────────┐
15+
// closure
1616
{ [weak self, yyy = xxx] _ in
1717
// ^ ^
18-
// |---- yyy
19-
//---- self
18+
// ──── yyy
19+
//──── self
2020
}
2121
}
2222
```
@@ -27,20 +27,20 @@ func xxx() {
2727
class XXX {
2828
func xxx() {
2929
// ^
30-
//----¬
30+
//────┐
3131
print(self)
3232
}
3333

3434
lazy var yyy: Int = {
3535
// ^
36-
//¬
36+
//
3737
print(self)
3838
return 1
3939
}()
4040

4141
var zzz: XXX {
4242
// ^
43-
// ⌜--⌟
43+
// ┌──┘
4444
print(self)
4545
}
4646
}

Sources/LeakDetectKit/Capture/CaptureListRewriter.swift

+9-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,14 @@ import SwiftSyntax
1010

1111
final public class CaptureListRewriter: SyntaxRewriter {
1212
struct Info {
13-
let originSyntax: SyntaxProtocol
14-
let expresion: Int
13+
let originSyntax: TokenSyntax
14+
let expression: Int
15+
}
16+
17+
subscript(offset: Int) -> TokenSyntax? {
18+
infos.first { info in
19+
info.expression == offset
20+
}?.originSyntax
1521
}
1622

1723
private(set) var infos: [Info] = []
@@ -35,7 +41,7 @@ final public class CaptureListRewriter: SyntaxRewriter {
3541

3642
infos.append(.init(
3743
originSyntax: name,
38-
expresion: origin + offset + newOffset))
44+
expression: origin + offset + newOffset))
3945

4046
offset += newOffset
4147

Sources/LeakDetectKit/Capture/DeclsVisitor.swift

+8-8
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@ import SKClient
1515
/// Source Code use ``customWalk`` to walk `static func` and `sub DeclsVisitor`
1616
public final class DeclsVisitor: SyntaxVisitor {
1717
private lazy var _subVisitors: [DeclsVisitor] = []
18-
public let client: SKClient
1918
private let leak: LeakVisitor
20-
public init(client: SKClient) {
21-
self.client = client
19+
20+
21+
public init(client: SKClient, _ rewriter: CaptureListRewriter) {
2222
self.leak = LeakVisitor(
2323
context: .global(.file),
2424
client: client,
25-
parentVisitor: nil)
25+
rewriter: rewriter)
26+
2627
super.init(viewMode: .sourceAccurate)
2728
}
2829

29-
init(client: SKClient, _ global: LeakVisitor.Context.Global) {
30-
self.client = client
30+
init(client: SKClient, _ rewriter: CaptureListRewriter, _ global: LeakVisitor.Context.Global) {
3131
self.leak = LeakVisitor(
3232
context: .global(global),
3333
client: client,
34-
parentVisitor: nil)
34+
rewriter: rewriter)
3535
super.init(viewMode: .sourceAccurate)
3636
}
3737

@@ -81,7 +81,7 @@ extension DeclsVisitor {
8181
}
8282

8383
private final func append<Syntax: SyntaxProtocol>(_ syntax: Syntax, _ global: LeakVisitor.Context.Global) {
84-
let visitor = DeclsVisitor(client: client, global)
84+
let visitor = DeclsVisitor(client: leak.client, leak.rewriter, global)
8585
self._subVisitors.append(visitor)
8686
visitor.customWalk(syntax)
8787
}

0 commit comments

Comments
 (0)