JavaScript Highlighter: Throttle rehighlighting to improve performance
while typing
This commit is contained in:
parent
6b39e90ea4
commit
4c65ff612d
|
@ -7,6 +7,7 @@
|
|||
//
|
||||
|
||||
import AppKit
|
||||
import Combine
|
||||
|
||||
class JavaScriptEditorView: NSTextView {
|
||||
|
||||
|
@ -24,6 +25,9 @@ class JavaScriptEditorView: NSTextView {
|
|||
}
|
||||
}
|
||||
|
||||
private let rehighlightSubject = PassthroughSubject<Void, Never>()
|
||||
private var debouncedRehighlightCancellable: AnyCancellable!
|
||||
|
||||
func rehighlight() {
|
||||
isRehighlighting = true
|
||||
highlighter.highlight(attributed: self.textStorage!)
|
||||
|
@ -34,6 +38,13 @@ class JavaScriptEditorView: NSTextView {
|
|||
super.awakeFromNib()
|
||||
|
||||
textStorage!.delegate = self
|
||||
|
||||
typingAttributes = [
|
||||
.font: NSFont.monospacedSystemFont(ofSize: 13, weight: .regular),
|
||||
.foregroundColor: NSColor.textColor
|
||||
]
|
||||
|
||||
debouncedRehighlightCancellable = rehighlightSubject.throttle(for: .milliseconds(40), scheduler: RunLoop.main, latest: false).sink(receiveValue: rehighlight)
|
||||
}
|
||||
|
||||
override func shouldChangeText(in affectedCharRange: NSRange, replacementString: String?) -> Bool {
|
||||
|
@ -117,6 +128,6 @@ extension JavaScriptEditorView: NSTextStorageDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
rehighlight()
|
||||
rehighlightSubject.send()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue