JavaScript Highligher: object literal parsing fixes

This commit is contained in:
Shadowfacts 2020-04-03 10:04:52 -04:00
parent f27fc8eb9e
commit 5b9f59ec09
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
2 changed files with 14 additions and 6 deletions

View File

@ -119,9 +119,11 @@ class JavaScriptHighlighter {
} else {
consume()
}
consumeWhitespace()
}
private func consumeWhitespace(newlines: Bool = false) {
private func consumeWhitespace(newlines: Bool = true) {
let charSet = newlines ? CharacterSet.whitespacesAndNewlines : .whitespaces
while let char = peek(), charSet.contains(char) {
consume()
@ -234,13 +236,17 @@ class JavaScriptHighlighter {
consumeObjectKey()
if peek() == ":" {
consume() // :
emit(token: .punctuation, range: prevCharRange())
consumeWhitespace()
while currentIndex < text.endIndex && peek() != "," && peek() != "}" {
consumeExpression()
}
if currentIndex < text.endIndex {
break object
}
} else if peek() == "," {
consumeWhitespace()
if peek() == "," {
consume() // ,
emit(token: .punctuation, range: prevCharRange())
continue
} else {
break
@ -255,6 +261,7 @@ class JavaScriptHighlighter {
}
private func consumeObjectKey() {
consumeWhitespace()
guard let char = peek() else { return }
let keyStart = currentIndex!
if identifierStarts.contains(char) {
@ -263,6 +270,7 @@ class JavaScriptHighlighter {
consumeString()
}
print("Object key: '\(text[keyStart..<currentIndex])'")
consumeWhitespace()
}
private func consumeDotLookup() {

View File

@ -8,6 +8,6 @@
import Foundation
let source = "`+`${{a:3}}`"
let source = "{a: 1234 , 'b': 'blah', foo}"
_ = JavaScriptHighlighter(text: source).highlight()