---input---
// Most examples from https://github.com/rse/es6-features under MIT license
const PI = 3.141593;

let callbacks = [];

odds  = evens.map(v => v + 1);

nums.forEach(v => {
   if (v % 5 === 0)
       fives.push(v);
})

function f (x, y, ...a) {
    return (x + y) * a.length;
}

var params = [ "hello", true, 7 ];
var other = [ 1, 2, ...params ]; // [ 1, 2, "hello", true, 7 ]
f(1, 2, ...params) === 9;

var str = "foo";
var chars = [ ...str ]; // [ "f", "o", "o" ]

var customer = { name: "Foo" };
var card = { amount: 7, product: "Bar", unitprice: 42 };
message = `Hello ${customer.name},
want to buy ${card.amount} ${card.product} for
a total of ${card.amount * card.unitprice} bucks?`;

0b111110111 === 503;
0o767 === 503;

for (let codepoint of "𠮷") console.log(codepoint);

function* ();
*function();
yield;

export class Node {
}

isFinite();
isNaN();
isSafeInteger();
x = new Promise(...a);
x = new Proxy(...a);

---tokens---
''            Text
'// Most examples from https://github.com/rse/es6-features under MIT license\n' Comment.Single

'const'       Keyword.Declaration
' '           Text
'PI'          Name.Other
' '           Text
'='           Operator
' '           Text
'3.141593'    Literal.Number.Float
';'           Punctuation
'\n\n'        Text

'let'         Keyword.Declaration
' '           Text
'callbacks'   Name.Other
' '           Text
'='           Operator
' '           Text
'['           Punctuation
']'           Punctuation
';'           Punctuation
'\n\n'        Text

'odds'        Name.Other
'  '          Text
'='           Operator
' '           Text
'evens'       Name.Other
'.'           Punctuation
'map'         Name.Other
'('           Punctuation
'v'           Name.Other
' '           Text
'=>'          Punctuation
' '           Text
'v'           Name.Other
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Float
')'           Punctuation
';'           Punctuation
'\n\n'        Text

'nums'        Name.Other
'.'           Punctuation
'forEach'     Name.Other
'('           Punctuation
'v'           Name.Other
' '           Text
'=>'          Punctuation
' '           Text
'{'           Punctuation
'\n   '       Text
'if'          Keyword
' '           Text
'('           Punctuation
'v'           Name.Other
' '           Text
'%'           Operator
' '           Text
'5'           Literal.Number.Float
' '           Text
'==='         Operator
' '           Text
'0'           Literal.Number.Float
')'           Punctuation
'\n       '   Text
'fives'       Name.Other
'.'           Punctuation
'push'        Name.Other
'('           Punctuation
'v'           Name.Other
')'           Punctuation
';'           Punctuation
'\n'          Text

'}'           Punctuation
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'f'           Name.Other
' '           Text
'('           Punctuation
'x'           Name.Other
','           Punctuation
' '           Text
'y'           Name.Other
','           Punctuation
' '           Text
'...'         Punctuation
'a'           Name.Other
')'           Punctuation
' '           Text
'{'           Punctuation
'\n    '      Text
'return'      Keyword
' '           Text
'('           Punctuation
'x'           Name.Other
' '           Text
'+'           Operator
' '           Text
'y'           Name.Other
')'           Punctuation
' '           Text
'*'           Operator
' '           Text
'a'           Name.Other
'.'           Punctuation
'length'      Name.Other
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'var'         Keyword.Declaration
' '           Text
'params'      Name.Other
' '           Text
'='           Operator
' '           Text
'['           Punctuation
' '           Text
'"hello"'     Literal.String.Double
','           Punctuation
' '           Text
'true'        Keyword.Constant
','           Punctuation
' '           Text
'7'           Literal.Number.Float
' '           Text
']'           Punctuation
';'           Punctuation
'\n'          Text

'var'         Keyword.Declaration
' '           Text
'other'       Name.Other
' '           Text
'='           Operator
' '           Text
'['           Punctuation
' '           Text
'1'           Literal.Number.Float
','           Punctuation
' '           Text
'2'           Literal.Number.Float
','           Punctuation
' '           Text
'...'         Punctuation
'params'      Name.Other
' '           Text
']'           Punctuation
';'           Punctuation
' '           Text
'// [ 1, 2, "hello", true, 7 ]\n' Comment.Single

'f'           Name.Other
'('           Punctuation
'1'           Literal.Number.Float
','           Punctuation
' '           Text
'2'           Literal.Number.Float
','           Punctuation
' '           Text
'...'         Punctuation
'params'      Name.Other
')'           Punctuation
' '           Text
'==='         Operator
' '           Text
'9'           Literal.Number.Float
';'           Punctuation
'\n\n'        Text

'var'         Keyword.Declaration
' '           Text
'str'         Name.Other
' '           Text
'='           Operator
' '           Text
'"foo"'       Literal.String.Double
';'           Punctuation
'\n'          Text

'var'         Keyword.Declaration
' '           Text
'chars'       Name.Other
' '           Text
'='           Operator
' '           Text
'['           Punctuation
' '           Text
'...'         Punctuation
'str'         Name.Other
' '           Text
']'           Punctuation
';'           Punctuation
' '           Text
'// [ "f", "o", "o" ]\n' Comment.Single

'\n'          Text

'var'         Keyword.Declaration
' '           Text
'customer'    Name.Other
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
' '           Text
'name'        Name.Other
':'           Operator
' '           Text
'"Foo"'       Literal.String.Double
' '           Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'var'         Keyword.Declaration
' '           Text
'card'        Name.Other
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
' '           Text
'amount'      Name.Other
':'           Operator
' '           Text
'7'           Literal.Number.Float
','           Punctuation
' '           Text
'product'     Name.Other
':'           Operator
' '           Text
'"Bar"'       Literal.String.Double
','           Punctuation
' '           Text
'unitprice'   Name.Other
':'           Operator
' '           Text
'42'          Literal.Number.Float
' '           Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'message'     Name.Other
' '           Text
'='           Operator
' '           Text
'`'           Literal.String.Backtick
'Hello '      Literal.String.Backtick
'${'          Literal.String.Interpol
'customer'    Name.Other
'.'           Punctuation
'name'        Name.Other
'}'           Literal.String.Interpol
',\nwant to buy ' Literal.String.Backtick
'${'          Literal.String.Interpol
'card'        Name.Other
'.'           Punctuation
'amount'      Name.Other
'}'           Literal.String.Interpol
' '           Literal.String.Backtick
'${'          Literal.String.Interpol
'card'        Name.Other
'.'           Punctuation
'product'     Name.Other
'}'           Literal.String.Interpol
' for\na total of ' Literal.String.Backtick
'${'          Literal.String.Interpol
'card'        Name.Other
'.'           Punctuation
'amount'      Name.Other
' '           Text
'*'           Operator
' '           Text
'card'        Name.Other
'.'           Punctuation
'unitprice'   Name.Other
'}'           Literal.String.Interpol
' bucks?'     Literal.String.Backtick
'`'           Literal.String.Backtick
';'           Punctuation
'\n\n'        Text

'0b111110111' Literal.Number.Bin
' '           Text
'==='         Operator
' '           Text
'503'         Literal.Number.Float
';'           Punctuation
'\n'          Text

'0o767'       Literal.Number.Oct
' '           Text
'==='         Operator
' '           Text
'503'         Literal.Number.Float
';'           Punctuation
'\n\n'        Text

'for'         Keyword
' '           Text
'('           Punctuation
'let'         Keyword.Declaration
' '           Text
'codepoint'   Name.Other
' '           Text
'of'          Keyword
' '           Text
'"𠮷"'         Literal.String.Double
')'           Punctuation
' '           Text
'console'     Name.Other
'.'           Punctuation
'log'         Name.Other
'('           Punctuation
'codepoint'   Name.Other
')'           Punctuation
';'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
'*'           Operator
' '           Text
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'*'           Operator
'function'    Keyword.Declaration
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'yield'       Keyword
';'           Punctuation
'\n\n'        Text

'export'      Keyword
' '           Text
'class'       Keyword.Declaration
' '           Text
'Node'        Name.Other
' '           Text
'{'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'isFinite'    Name.Builtin
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'isNaN'       Name.Builtin
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'isSafeInteger' Name.Builtin
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'x'           Name.Other
' '           Text
'='           Operator
' '           Text
'new'         Keyword
' '           Text
'Promise'     Name.Builtin
'('           Punctuation
'...'         Punctuation
'a'           Name.Other
')'           Punctuation
';'           Punctuation
'\n'          Text

'x'           Name.Other
' '           Text
'='           Operator
' '           Text
'new'         Keyword
' '           Text
'Proxy'       Name.Builtin
'('           Punctuation
'...'         Punctuation
'a'           Name.Other
')'           Punctuation
';'           Punctuation
'\n'          Text
