Skip to content

Commit b46348a

Browse files
authored
Merge pull request #1906 from StevenWong12/port_incremental_parsing_to_memberdecllistitem
2 parents d21d996 + a1c3376 commit b46348a

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

Sources/SwiftParser/Declarations.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,11 @@ extension Parser {
733733

734734
extension Parser {
735735
mutating func parseMemberDeclListItem() -> RawMemberDeclListItemSyntax? {
736+
let startToken = self.currentToken
737+
if let syntax = self.loadCurrentSyntaxNodeFromCache(for: .memberDeclListItem) {
738+
self.registerNodeForIncrementalParse(node: syntax.raw, startToken: startToken)
739+
return RawMemberDeclListItemSyntax(syntax.raw)
740+
}
736741
if let remainingTokens = remainingTokensIfMaximumNestingLevelReached() {
737742
let item = RawMemberDeclListItemSyntax(
738743
remainingTokens,
@@ -760,12 +765,16 @@ extension Parser {
760765
return nil
761766
}
762767

763-
return RawMemberDeclListItemSyntax(
768+
let result = RawMemberDeclListItemSyntax(
764769
decl: decl,
765770
semicolon: semi,
766771
RawUnexpectedNodesSyntax(trailingSemis, arena: self.arena),
767772
arena: self.arena
768773
)
774+
775+
self.registerNodeForIncrementalParse(node: result.raw, startToken: startToken)
776+
777+
return result
769778
}
770779

771780
/// `introducer` is the `struct`, `class`, ... keyword that is the cause that the member decl block is being parsed.

Tests/SwiftParserTest/IncrementalParsingTests.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ import _SwiftSyntaxTestSupport
1717

1818
public class IncrementalParsingTests: XCTestCase {
1919

20-
public func testIncrementalInvalid() {
20+
public func testBrokenMemberFunction() {
2121
assertIncrementalParse(
2222
"""
2323
struct A⏩️⏸️A⏪️ { func f() {
24-
"""
24+
""",
25+
reusedNodes: [
26+
ReusedNodeSpec("func f() {", kind: .memberDeclListItem)
27+
]
2528
)
2629
}
2730

@@ -174,8 +177,7 @@ public class IncrementalParsingTests: XCTestCase {
174177
)
175178
}
176179

177-
public func testAddProperty() throws {
178-
try XCTSkipIf(true, "Swift parser does not handle node reuse yet")
180+
public func testAddProperty() {
179181
assertIncrementalParse(
180182
"""
181183
struct Foo {

0 commit comments

Comments
 (0)