From cc9e21be16c98cca7922f075b69383691d665e28 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 5 Apr 2020 13:50:00 -0400 Subject: [PATCH] JavaScript Highlighter: fix parsing multiple subexpressions in the same array element --- .../JavaScriptHighlighter.swift | 23 ++++++++----------- jstest/main.swift | 2 +- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/MongoView/Synax Highlighting/JavaScriptHighlighter.swift b/MongoView/Synax Highlighting/JavaScriptHighlighter.swift index 05fc8c9..5a7ff60 100644 --- a/MongoView/Synax Highlighting/JavaScriptHighlighter.swift +++ b/MongoView/Synax Highlighting/JavaScriptHighlighter.swift @@ -316,21 +316,18 @@ class JavaScriptHighlighter { emit(token: .punctuation, range: prevCharRange()) indent += " " array: - while currentIndex < text.endIndex && peek() != "]" { + while currentIndex < text.endIndex { consumeWhitespace() - while currentIndex < text.endIndex { - if peek() == "," { - consume() // , - print("Array separator") - emit(token: .punctuation, range: prevCharRange()) - break - } else if peek() == "]" { - break array - } else { - indent += " " - print("Array element") + if peek() == "," { + consume() // , + print("Array separator") + emit(token: .punctuation, range: prevCharRange()) + } else if peek() == "]" { + break array + } else { + print("Array element") + while let char = peek(), char != ",", char != "]" { consumeExpression() - indent = String(indent.dropLast(2)) } } } diff --git a/jstest/main.swift b/jstest/main.swift index 8b0dba3..5321312 100644 --- a/jstest/main.swift +++ b/jstest/main.swift @@ -8,7 +8,7 @@ import Foundation -let source = ".1 + .2" +let source = "[1 + 2, 3,]" let highlighter = JavaScriptHighlighter(text: source) highlighter.debug = true highlighter.highlight()