summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-16 20:09:00 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-16 20:09:00 +0000
commitc45367eb373bf52fd370f1a685f68aa05f189265 (patch)
tree336d681d7acebd0cb56dbd6178edb15ee447fdd6
parent0cf45c8c91d7779e5718cc23844c6937ae875d11 (diff)
Add rule for unterminated strings
-rw-r--r--lib/styles/parser/tokeniser.js5
-rw-r--r--test/styles/parser/tokeniser.tests.js4
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/styles/parser/tokeniser.js b/lib/styles/parser/tokeniser.js
index 2ada818..b97facd 100644
--- a/lib/styles/parser/tokeniser.js
+++ b/lib/styles/parser/tokeniser.js
@@ -3,6 +3,8 @@ var RegexTokeniser = lop.RegexTokeniser;
exports.tokenise = tokenise;
+var stringPrefix = "'((?:\\\\.|[^'])*)";
+
function tokenise(string) {
var tokeniser = new RegexTokeniser([
{name: "identifier", regex: /([a-zA-Z][a-zA-Z0-9\-]*)/},
@@ -16,7 +18,8 @@ function tokenise(string) {
{name: "close-paren", regex: /\)/},
{name: "open-square-bracket", regex: /\[/},
{name: "close-square-bracket", regex: /\]/},
- {name: "string", regex: /'((?:\\.|[^'])*)'/},
+ {name: "string", regex: new RegExp(stringPrefix + "'")},
+ {name: "unterminated-string", regex: new RegExp(stringPrefix)},
{name: "integer", regex: /([0-9]+)/},
{name: "choice", regex: /\|/},
{name: "bang", regex: /(!)/}
diff --git a/test/styles/parser/tokeniser.tests.js b/test/styles/parser/tokeniser.tests.js
index e8b9d00..a7db79d 100644
--- a/test/styles/parser/tokeniser.tests.js
+++ b/test/styles/parser/tokeniser.tests.js
@@ -31,6 +31,10 @@ test("strings are tokenised", function() {
assertTokens("'Tristan'", [isToken("string", "Tristan")]);
});
+test("unterminated strings are tokenised", function() {
+ assertTokens("'Tristan", [isToken("unterminated-string", "Tristan")]);
+});
+
test("arrows are tokenised", function() {
assertTokens("=>", [isToken("arrow")]);
});