Skip to content

Commit 5da96c9

Browse files
committed
Fix Style Store Crash
1 parent 8a47aa4 commit 5da96c9

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,31 @@ class StyledRangeContainer {
4545
}
4646
}
4747

48+
enum RunState {
49+
case empty
50+
case value(RangeStoreRun<StyleElement>)
51+
case exhausted
52+
53+
var isExhausted: Bool {
54+
if case .exhausted = self { return true }
55+
return false
56+
}
57+
58+
var hasValue: Bool {
59+
if case .value = self { return true }
60+
return false
61+
}
62+
63+
var length: Int {
64+
switch self {
65+
case .empty, .exhausted:
66+
return 0
67+
case .value(let run):
68+
return run.length
69+
}
70+
}
71+
}
72+
4873
var _storage: [ProviderID: RangeStore<StyleElement>] = [:]
4974
weak var delegate: StyledRangeContainerDelegate?
5075

@@ -98,6 +123,11 @@ class StyledRangeContainer {
98123
var minValue = allRuns.compactMap { $0.last }.enumerated().min(by: { $0.1.length < $1.1.length })
99124

100125
while let value = minValue {
126+
// Early return if all arrays are empty
127+
guard allRuns.contains(where: { !$0.isEmpty }) else {
128+
return runs.reversed()
129+
}
130+
101131
// Get minimum length off the end of each array
102132
let minRunIdx = value.offset
103133
var minRun = value.element

Sources/CodeEditSourceEditor/SourceEditor/SourceEditor.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ public struct SourceEditor: NSViewControllerRepresentable {
149149
controller.setCursorPositions(cursorPositions)
150150
}
151151

152-
if let scrollPosition = state.scrollPosition, scrollPosition != state.scrollPosition {
152+
let scrollView = controller.scrollView
153+
if let scrollPosition = state.scrollPosition, scrollPosition != scrollView?.contentView.bounds.origin {
153154
controller.scrollView.scroll(controller.scrollView.contentView, to: scrollPosition)
154155
controller.scrollView.reflectScrolledClipView(controller.scrollView.contentView)
155156
controller.gutterView.needsDisplay = true

0 commit comments

Comments
 (0)