summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPureFox48 <64583745+PureFox48@users.noreply.github.com>2022-11-29 01:13:37 +0000
committerGitHub <noreply@github.com>2022-11-29 02:13:37 +0100
commita47833dc7b3ee2f531ac17371f354798e43b9f88 (patch)
tree16214011257991350c526d711d142d938b174f7c /tests
parent880a2177ddcbaf02beb1d986b9fb15ab4a7a95a8 (diff)
downloadpygments-git-a47833dc7b3ee2f531ac17371f354798e43b9f88.tar.gz
Add support for Wren language (#2271)
Co-authored-by: Jean Abou Samra <jean@abou-samra.fr>
Diffstat (limited to 'tests')
-rw-r--r--tests/examplefiles/wren/example.wren122
-rw-r--r--tests/examplefiles/wren/example.wren.output925
-rw-r--r--tests/snippets/wren/lonely-paren.txt10
3 files changed, 1057 insertions, 0 deletions
diff --git a/tests/examplefiles/wren/example.wren b/tests/examplefiles/wren/example.wren
new file mode 100644
index 00000000..272d3cb9
--- /dev/null
+++ b/tests/examplefiles/wren/example.wren
@@ -0,0 +1,122 @@
+#!/bin/wren
+
+/* IMPORTS */
+import "random" for Random as Rand
+
+/* COMMENTS */
+
+// single line comment
+
+/*
+ multiline comment
+ /*
+ nested multiline comment
+ */
+*/
+
+/* CLASSES & ATTRIBUTES */
+
+#!type = "parent"
+class Parent {
+ #method
+ static setField (field) {
+ __field = field
+ }
+
+ construct new(parent) {
+ _parent = parent
+ return
+ }
+
+ parent { _parent }
+
+ foreign method()
+}
+
+#!type = "child"
+#group(
+ multiple,
+ lines = true
+)
+class Child is Parent {
+ construct new(parent, child) {
+ super(parent)
+ _child = child
+ }
+
+ child { _child }
+
+ toString { this.parent }
+}
+
+/* VARIABLES & STRINGS */
+
+var rand = Rand.new()
+var name = """David"""
+var fullName = "%(name) Smith"
+var firstChild = Child.new("Philip Smith", fullName)
+var age = 21
+var weight = 70.25
+var male = true
+var sex = male ? "M" : "F"
+var address = """
+ "House name" 12 Any Street
+ Some Town
+ \t %("Some Country") "
+"""
+
+/* LOOPS & CONDITIONALS */
+for (i in 1..5) {
+ if (i == 2) {
+ continue
+ } else if (i == 4) {
+ break
+ }
+ System.print(i)
+}
+var j = 6
+while (j <= 1e+1) {
+ if (j == 8) break
+ System.print(j)
+ j = j + 1
+}
+
+/* ARITHMETIC OPERATORS */
+var a = 1
+var b = 2
+var c = [-a, a + b, a - b, a * b, a / b, a % b]
+var add = c[1]
+
+/* BITWISE OPERATORS */
+var d = 3
+var e = 4
+var f = [~d, d & e, d | e, d ^ e, d << 2, e >> 1]
+
+/* COMPARISON OPERATORS */
+var g = 5
+var h = 6
+var i = [a == b, a != b, a < b, a <= b, a > b, a >= b]
+var k = firstChild is Parent
+
+/* FUNCTIONS */
+var func = Fn.new { |param|
+ var z = "this"
+ System.print(z + " " + param)
+}
+func.call("function")
+
+/* MISCELLANEOUS */
+
+var hex = 0x12ac
+var nul = null
+var l = false
+var m = true
+var n = l && m
+var o = l || m
+var esc = "\\ \% \" \0 \a \b \t \f \n \r \v \e \x01 \uabcd \Uabcdef01"
+var uni = "£ é 😀 ‎🎷"
+var map = {"a": 1, "b": 2}
+var iex = "%(map["a"] + map[("b")])"
+var odd = (1...h).where { |i| i % 2 == 1 }
+ .toList
+var emp = ""
diff --git a/tests/examplefiles/wren/example.wren.output b/tests/examplefiles/wren/example.wren.output
new file mode 100644
index 00000000..2b76dd63
--- /dev/null
+++ b/tests/examplefiles/wren/example.wren.output
@@ -0,0 +1,925 @@
+'#!/bin/wren' Comment.Special
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' IMPORTS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'import' Keyword
+' ' Text.Whitespace
+'"' Literal.String
+'random' Literal.String
+'"' Literal.String
+' ' Text.Whitespace
+'for' Keyword
+' ' Text.Whitespace
+'Random' Name.Class
+' ' Text.Whitespace
+'as' Keyword
+' ' Text.Whitespace
+'Rand' Name.Class
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' COMMENTS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n\n' Text.Whitespace
+
+'// single line comment' Comment.Single
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+'\n multiline comment\n ' Comment.Multiline
+'/*' Comment.Multiline
+'\n nested multiline comment\n ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Comment.Multiline
+
+'*/' Comment.Multiline
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' CLASSES & ATTRIBUTES ' Comment.Multiline
+'*/' Comment.Multiline
+'\n\n' Text.Whitespace
+
+'#!type = "parent"' Comment.Special
+'\n' Text.Whitespace
+
+'class' Keyword
+' ' Text.Whitespace
+'Parent' Name.Class
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'#method' Comment.Special
+'\n ' Text.Whitespace
+'static' Keyword
+' ' Text.Whitespace
+'setField' Name
+' ' Text.Whitespace
+'(' Punctuation
+'field' Name
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'__field' Name.Variable.Class
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'field' Name
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n\n ' Text.Whitespace
+'construct' Keyword
+' ' Text.Whitespace
+'new' Name
+'(' Punctuation
+'parent' Name
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'_parent' Name.Variable.Instance
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'parent' Name
+'\n ' Text.Whitespace
+'return' Keyword
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n\n ' Text.Whitespace
+'parent' Name
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'_parent' Name.Variable.Instance
+' ' Text.Whitespace
+'}' Punctuation
+'\n\n ' Text.Whitespace
+'foreign' Keyword
+' ' Text.Whitespace
+'method' Name
+'(' Punctuation
+')' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n\n' Text.Whitespace
+
+'#!type = "child"' Comment.Special
+'\n' Text.Whitespace
+
+'#group(\n multiple,\n lines = true\n)' Comment.Special
+'\n' Text.Whitespace
+
+'class' Keyword
+' ' Text.Whitespace
+'Child' Name.Class
+' ' Text.Whitespace
+'is' Operator.Word
+' ' Text.Whitespace
+'Parent' Name.Class
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'construct' Keyword
+' ' Text.Whitespace
+'new' Name
+'(' Punctuation
+'parent' Name
+',' Punctuation
+' ' Text.Whitespace
+'child' Name
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'super' Keyword
+'(' Punctuation
+'parent' Name
+')' Punctuation
+'\n ' Text.Whitespace
+'_child' Name.Variable.Instance
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'child' Name
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n\n ' Text.Whitespace
+'child' Name
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'_child' Name.Variable.Instance
+' ' Text.Whitespace
+'}' Punctuation
+'\n\n ' Text.Whitespace
+'toString' Name
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'this' Keyword
+'.' Operator
+'parent' Name
+' ' Text.Whitespace
+'}' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' VARIABLES & STRINGS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'rand' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'Rand' Name.Class
+'.' Operator
+'new' Name
+'(' Punctuation
+')' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'name' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"""David"""' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'fullName' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'%(' Literal.String.Interpol
+'name' Name
+')' Literal.String.Interpol
+' Smith' Literal.String
+'"' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'firstChild' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'Child' Name.Class
+'.' Operator
+'new' Name
+'(' Punctuation
+'"' Literal.String
+'Philip Smith' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text.Whitespace
+'fullName' Name
+')' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'age' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'21' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'weight' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'70.25' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'male' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'true' Keyword.Constant
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'sex' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'male' Name
+' ' Text.Whitespace
+'?' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'M' Literal.String
+'"' Literal.String
+' ' Text.Whitespace
+':' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'F' Literal.String
+'"' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'address' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"""\n "House name" 12 Any Street\n Some Town\n \\t %("Some Country") "\n"""' Literal.String
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' LOOPS & CONDITIONALS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'for' Keyword
+' ' Text.Whitespace
+'(' Punctuation
+'i' Name
+' ' Text.Whitespace
+'in' Operator.Word
+' ' Text.Whitespace
+'1' Literal.Number.Float
+'..' Operator
+'5' Literal.Number.Float
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'if' Keyword
+' ' Text.Whitespace
+'(' Punctuation
+'i' Name
+' ' Text.Whitespace
+'==' Operator
+' ' Text.Whitespace
+'2' Literal.Number.Float
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'continue' Keyword
+'\n ' Text.Whitespace
+'}' Punctuation
+' ' Text.Whitespace
+'else' Keyword
+' ' Text.Whitespace
+'if' Keyword
+' ' Text.Whitespace
+'(' Punctuation
+'i' Name
+' ' Text.Whitespace
+'==' Operator
+' ' Text.Whitespace
+'4' Literal.Number.Float
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'break' Keyword
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n ' Text.Whitespace
+'System' Name.Class
+'.' Operator
+'print' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'j' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'6' Literal.Number.Float
+'\n' Text.Whitespace
+
+'while' Keyword
+' ' Text.Whitespace
+'(' Punctuation
+'j' Name
+' ' Text.Whitespace
+'<=' Operator
+' ' Text.Whitespace
+'1e+1' Literal.Number.Float
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'if' Keyword
+' ' Text.Whitespace
+'(' Punctuation
+'j' Name
+' ' Text.Whitespace
+'==' Operator
+' ' Text.Whitespace
+'8' Literal.Number.Float
+')' Punctuation
+' ' Text.Whitespace
+'break' Keyword
+'\n ' Text.Whitespace
+'System' Name.Class
+'.' Operator
+'print' Name
+'(' Punctuation
+'j' Name
+')' Punctuation
+'\n ' Text.Whitespace
+'j' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'j' Name
+' ' Text.Whitespace
+'+' Operator
+' ' Text.Whitespace
+'1' Literal.Number.Float
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' ARITHMETIC OPERATORS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'b' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'2' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'c' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'[' Punctuation
+'-' Operator
+'a' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'+' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'*' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'/' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'%' Operator
+' ' Text.Whitespace
+'b' Name
+']' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'add' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'c' Name
+'[' Punctuation
+'1' Literal.Number.Float
+']' Punctuation
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' BITWISE OPERATORS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'d' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'3' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'e' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'4' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'f' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'[' Punctuation
+'~' Operator
+'d' Name
+',' Punctuation
+' ' Text.Whitespace
+'d' Name
+' ' Text.Whitespace
+'&' Operator
+' ' Text.Whitespace
+'e' Name
+',' Punctuation
+' ' Text.Whitespace
+'d' Name
+' ' Text.Whitespace
+'|' Operator
+' ' Text.Whitespace
+'e' Name
+',' Punctuation
+' ' Text.Whitespace
+'d' Name
+' ' Text.Whitespace
+'^' Operator
+' ' Text.Whitespace
+'e' Name
+',' Punctuation
+' ' Text.Whitespace
+'d' Name
+' ' Text.Whitespace
+'<<' Operator
+' ' Text.Whitespace
+'2' Literal.Number.Float
+',' Punctuation
+' ' Text.Whitespace
+'e' Name
+' ' Text.Whitespace
+'>>' Operator
+' ' Text.Whitespace
+'1' Literal.Number.Float
+']' Punctuation
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' COMPARISON OPERATORS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'g' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'5' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'h' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'6' Literal.Number.Float
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'i' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'[' Punctuation
+'a' Name
+' ' Text.Whitespace
+'==' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'!=' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'<=' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'b' Name
+',' Punctuation
+' ' Text.Whitespace
+'a' Name
+' ' Text.Whitespace
+'>=' Operator
+' ' Text.Whitespace
+'b' Name
+']' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'k' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'firstChild' Name
+' ' Text.Whitespace
+'is' Operator.Word
+' ' Text.Whitespace
+'Parent' Name.Class
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' FUNCTIONS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'func' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'Fn' Name.Class
+'.' Operator
+'new' Name
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'|' Operator
+'param' Name
+'|' Operator
+'\n ' Text.Whitespace
+'var' Keyword
+' ' Text.Whitespace
+'z' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'this' Literal.String
+'"' Literal.String
+'\n ' Text.Whitespace
+'System' Name.Class
+'.' Operator
+'print' Name
+'(' Punctuation
+'z' Name
+' ' Text.Whitespace
+'+' Operator
+' ' Text.Whitespace
+'"' Literal.String
+' ' Literal.String
+'"' Literal.String
+' ' Text.Whitespace
+'+' Operator
+' ' Text.Whitespace
+'param' Name
+')' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n' Text.Whitespace
+
+'func' Name
+'.' Operator
+'call' Name
+'(' Punctuation
+'"' Literal.String
+'function' Literal.String
+'"' Literal.String
+')' Punctuation
+'\n\n' Text.Whitespace
+
+'/*' Comment.Multiline
+' MISCELLANEOUS ' Comment.Multiline
+'*/' Comment.Multiline
+'\n\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'hex' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0x12ac' Literal.Number.Hex
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'nul' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'null' Keyword.Constant
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'l' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'false' Keyword.Constant
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'m' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'true' Keyword.Constant
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'n' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'l' Name
+' ' Text.Whitespace
+'&&' Operator
+' ' Text.Whitespace
+'m' Name
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'o' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'l' Name
+' ' Text.Whitespace
+'||' Operator
+' ' Text.Whitespace
+'m' Name
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'esc' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'\\\\' Literal.String.Escape
+' ' Literal.String
+'\\%' Literal.String.Escape
+' ' Literal.String
+'\\"' Literal.String.Escape
+' ' Literal.String
+'\\0' Literal.String.Escape
+' ' Literal.String
+'\\a' Literal.String.Escape
+' ' Literal.String
+'\\b' Literal.String.Escape
+' ' Literal.String
+'\\t' Literal.String.Escape
+' ' Literal.String
+'\\f' Literal.String.Escape
+' ' Literal.String
+'\\n' Literal.String.Escape
+' ' Literal.String
+'\\r' Literal.String.Escape
+' ' Literal.String
+'\\v' Literal.String.Escape
+' ' Literal.String
+'\\e' Literal.String.Escape
+' ' Literal.String
+'\\x01' Literal.String.Escape
+' ' Literal.String
+'\\uabcd' Literal.String.Escape
+' ' Literal.String
+'\\Uabcdef01' Literal.String.Escape
+'"' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'uni' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'£ é 😀 \u200e🎷' Literal.String
+'"' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'map' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'{' Punctuation
+'"' Literal.String
+'a' Literal.String
+'"' Literal.String
+':' Operator
+' ' Text.Whitespace
+'1' Literal.Number.Float
+',' Punctuation
+' ' Text.Whitespace
+'"' Literal.String
+'b' Literal.String
+'"' Literal.String
+':' Operator
+' ' Text.Whitespace
+'2' Literal.Number.Float
+'}' Punctuation
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'iex' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'%(' Literal.String.Interpol
+'map' Name
+'[' Punctuation
+'"' Literal.String
+'a' Literal.String
+'"' Literal.String
+']' Punctuation
+' ' Text.Whitespace
+'+' Operator
+' ' Text.Whitespace
+'map' Name
+'[' Punctuation
+'(' Punctuation
+'"' Literal.String
+'b' Literal.String
+'"' Literal.String
+')' Punctuation
+']' Punctuation
+')' Literal.String.Interpol
+'"' Literal.String
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'odd' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'(' Punctuation
+'1' Literal.Number.Float
+'...' Operator
+'h' Name
+')' Punctuation
+'.' Operator
+'where' Name
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'|' Operator
+'i' Name
+'|' Operator
+' ' Text.Whitespace
+'i' Name
+' ' Text.Whitespace
+'%' Operator
+' ' Text.Whitespace
+'2' Literal.Number.Float
+' ' Text.Whitespace
+'==' Operator
+' ' Text.Whitespace
+'1' Literal.Number.Float
+' ' Text.Whitespace
+'}' Punctuation
+'\n ' Text.Whitespace
+'.' Operator
+'toList' Name
+'\n' Text.Whitespace
+
+'var' Keyword
+' ' Text.Whitespace
+'emp' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'"' Literal.String
+'"' Literal.String
+'\n' Text.Whitespace
diff --git a/tests/snippets/wren/lonely-paren.txt b/tests/snippets/wren/lonely-paren.txt
new file mode 100644
index 00000000..5236e601
--- /dev/null
+++ b/tests/snippets/wren/lonely-paren.txt
@@ -0,0 +1,10 @@
+---input---
+// This invalid input should terminate.
+)
+
+---tokens---
+'// This invalid input should terminate.' Comment.Single
+'\n' Text.Whitespace
+
+')' Punctuation
+'\n' Text.Whitespace