diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-11-16 20:09:00 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-11-16 20:09:00 +0000 |
| commit | c45367eb373bf52fd370f1a685f68aa05f189265 (patch) | |
| tree | 336d681d7acebd0cb56dbd6178edb15ee447fdd6 | |
| parent | 0cf45c8c91d7779e5718cc23844c6937ae875d11 (diff) | |
Add rule for unterminated strings
| -rw-r--r-- | lib/styles/parser/tokeniser.js | 5 | ||||
| -rw-r--r-- | test/styles/parser/tokeniser.tests.js | 4 |
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")]); }); |
