1530 lines
39 KiB
Plaintext
1530 lines
39 KiB
Plaintext
============================================
|
||
Strings
|
||
============================================
|
||
|
||
"A string with \"double\" and 'single' quotes";
|
||
'A string with "double" and \'single\' quotes';
|
||
'\\'
|
||
"\\"
|
||
|
||
'A string with new \
|
||
line';
|
||
|
||
----
|
||
|
||
(program
|
||
(expression_statement
|
||
(string
|
||
(string_fragment) (escape_sequence) (string_fragment)
|
||
(escape_sequence) (string_fragment)))
|
||
(expression_statement
|
||
(string
|
||
(string_fragment) (escape_sequence) (string_fragment)
|
||
(escape_sequence) (string_fragment)))
|
||
(expression_statement (string (escape_sequence)))
|
||
(expression_statement (string (escape_sequence)))
|
||
(expression_statement
|
||
(string (string_fragment) (escape_sequence) (string_fragment))))
|
||
|
||
============================================
|
||
Template strings
|
||
============================================
|
||
|
||
`one line`;
|
||
`multi
|
||
line`;
|
||
|
||
`multi
|
||
${2 + 2}
|
||
hello
|
||
${1 + 1, 2 + 2}
|
||
line`;
|
||
|
||
`$$$$`;
|
||
`$$$$${ 1 }`;
|
||
|
||
`(a|b)$`;
|
||
|
||
`$`;
|
||
|
||
`$${'$'}$$${'$'}$$$$`;
|
||
|
||
`\ `;
|
||
|
||
`The command \`git ${args.join(' ')}\` exited with an unexpected code: ${exitCode}. The caller should either handle this error, or expect that exit code.`
|
||
|
||
`\\`;
|
||
|
||
`//`;
|
||
|
||
----
|
||
|
||
(program
|
||
(expression_statement (template_string))
|
||
(expression_statement (template_string))
|
||
(expression_statement (template_string
|
||
(template_substitution
|
||
(binary_expression (number) (number)))
|
||
(template_substitution (sequence_expression
|
||
(binary_expression (number) (number))
|
||
(binary_expression (number) (number))))))
|
||
(expression_statement (template_string))
|
||
(expression_statement (template_string
|
||
(template_substitution (number))))
|
||
(expression_statement (template_string))
|
||
(expression_statement (template_string))
|
||
(expression_statement (template_string
|
||
(template_substitution (string (string_fragment)))
|
||
(template_substitution (string (string_fragment)))))
|
||
(expression_statement (template_string (escape_sequence)))
|
||
(expression_statement (template_string
|
||
(escape_sequence)
|
||
(template_substitution (call_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments (string (string_fragment)))))
|
||
(escape_sequence)
|
||
(template_substitution (identifier))))
|
||
(expression_statement (template_string (escape_sequence)))
|
||
(expression_statement (template_string)))
|
||
|
||
============================================
|
||
Function calls with template strings
|
||
============================================
|
||
|
||
f `hello`;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (call_expression (identifier) (template_string))))
|
||
|
||
============================================
|
||
Numbers
|
||
============================================
|
||
|
||
101;
|
||
3.14;
|
||
3.14e+1;
|
||
0x1ABCDEFabcdef;
|
||
0o7632157312;
|
||
0b1010101001;
|
||
1e+3;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (number))
|
||
(expression_statement (number))
|
||
(expression_statement (number))
|
||
(expression_statement (number))
|
||
(expression_statement (number))
|
||
(expression_statement (number))
|
||
(expression_statement (number)))
|
||
|
||
============================================
|
||
Variables
|
||
============================================
|
||
|
||
theVar;
|
||
theVar2;
|
||
$_;
|
||
\u0061\u{62}cd;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (identifier))
|
||
(expression_statement (identifier))
|
||
(expression_statement (identifier))
|
||
(expression_statement (identifier)))
|
||
|
||
============================================
|
||
Multi-line variable declarations
|
||
============================================
|
||
|
||
var a = b
|
||
, c = d
|
||
, e = f;
|
||
|
||
---
|
||
|
||
(program
|
||
(variable_declaration
|
||
(variable_declarator (identifier) (identifier))
|
||
(variable_declarator (identifier) (identifier))
|
||
(variable_declarator (identifier) (identifier))))
|
||
|
||
============================================
|
||
Booleans
|
||
============================================
|
||
|
||
this;
|
||
null;
|
||
undefined;
|
||
true;
|
||
false;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (this))
|
||
(expression_statement (null))
|
||
(expression_statement (undefined))
|
||
(expression_statement (true))
|
||
(expression_statement (false)))
|
||
|
||
============================================
|
||
Regexps
|
||
============================================
|
||
|
||
/one\\/;
|
||
/one/g;
|
||
/one/i;
|
||
/one/gim;
|
||
/on\/e/gim;
|
||
/on[^/]afe/gim;
|
||
/[\]/]/;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (regex (regex_pattern)))
|
||
(expression_statement (regex (regex_pattern) (regex_flags)))
|
||
(expression_statement (regex (regex_pattern) (regex_flags)))
|
||
(expression_statement (regex (regex_pattern) (regex_flags)))
|
||
(expression_statement (regex (regex_pattern) (regex_flags)))
|
||
(expression_statement (regex (regex_pattern) (regex_flags)))
|
||
(expression_statement (regex (regex_pattern))))
|
||
|
||
============================================
|
||
Comments take precedence over regexes
|
||
============================================
|
||
|
||
foo
|
||
? /* comment */bar
|
||
: baz
|
||
|
||
---
|
||
|
||
(program (expression_statement (ternary_expression (identifier) (comment) (identifier) (identifier))))
|
||
|
||
============================================
|
||
Objects
|
||
============================================
|
||
|
||
{};
|
||
{ a: "b" };
|
||
{ c: "d", "e": f, 1: 2 };
|
||
{
|
||
g: h
|
||
}
|
||
|
||
{
|
||
[methodName]() {
|
||
}
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(statement_block)
|
||
(empty_statement)
|
||
(expression_statement (object
|
||
(pair (property_identifier) (string (string_fragment)))))
|
||
(expression_statement (object
|
||
(pair (property_identifier) (string (string_fragment)))
|
||
(pair (string (string_fragment)) (identifier))
|
||
(pair (number) (number))))
|
||
(expression_statement (object
|
||
(pair (property_identifier) (identifier))))
|
||
(expression_statement (object
|
||
(method_definition (computed_property_name (identifier)) (formal_parameters) (statement_block)))))
|
||
|
||
============================================
|
||
Objects with shorthand properties
|
||
============================================
|
||
|
||
x = {a, b, get};
|
||
y = {a,};
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(object (shorthand_property_identifier) (shorthand_property_identifier) (shorthand_property_identifier))))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(object (shorthand_property_identifier)))))
|
||
|
||
============================================
|
||
Objects with method definitions
|
||
============================================
|
||
|
||
{
|
||
foo: true,
|
||
|
||
add(a, b) {
|
||
return a + b;
|
||
},
|
||
|
||
get bar() { return c; },
|
||
|
||
set bar(a) { c = a; },
|
||
|
||
*barGenerator() { yield c; },
|
||
|
||
get() { return 1; }
|
||
};
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (object
|
||
(pair (property_identifier) (true))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier) (identifier))
|
||
(statement_block
|
||
(return_statement (binary_expression (identifier) (identifier)))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(return_statement (identifier))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block
|
||
(expression_statement (assignment_expression (identifier) (identifier)))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(expression_statement (yield_expression (identifier)))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(return_statement (number)))))))
|
||
|
||
============================================
|
||
Objects with reserved words for keys
|
||
============================================
|
||
|
||
{
|
||
finally() {},
|
||
catch() {},
|
||
get: function () {},
|
||
set: function () {},
|
||
static: true,
|
||
async: true,
|
||
};
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (object
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(pair
|
||
(property_identifier)
|
||
(function (formal_parameters) (statement_block)))
|
||
(pair
|
||
(property_identifier)
|
||
(function (formal_parameters) (statement_block)))
|
||
(pair (property_identifier) (true))
|
||
(pair (property_identifier) (true)))))
|
||
|
||
============================================
|
||
Classes
|
||
============================================
|
||
|
||
class Foo {
|
||
#e
|
||
|
||
static one(a) { return a; };
|
||
two(b) { return b; }
|
||
three(c) { return c; }
|
||
#four(d) { return this.#e; }
|
||
}
|
||
|
||
class Foo extends require('another-class') {
|
||
constructor() {
|
||
super()
|
||
}
|
||
|
||
static {
|
||
this.#foo = 'bar';
|
||
}
|
||
|
||
bar() {
|
||
super.a()
|
||
this.#baz()
|
||
}
|
||
|
||
#baz() {
|
||
super.a()
|
||
}
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(field_definition (private_property_identifier))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block (return_statement (identifier))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block (return_statement (identifier))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block (return_statement (identifier))))
|
||
(method_definition
|
||
(private_property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block (return_statement (member_expression (this) (private_property_identifier)))))))
|
||
|
||
(class_declaration
|
||
(identifier)
|
||
(class_heritage (call_expression (identifier) (arguments (string (string_fragment)))))
|
||
(class_body
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(expression_statement (call_expression (super) (arguments)))))
|
||
(class_static_block
|
||
(statement_block
|
||
(expression_statement
|
||
(assignment_expression
|
||
(member_expression
|
||
(this)
|
||
(private_property_identifier))
|
||
(string
|
||
(string_fragment))))))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(expression_statement (call_expression (member_expression (super) (property_identifier)) (arguments)))
|
||
(expression_statement (call_expression (member_expression (this) (private_property_identifier)) (arguments)))))
|
||
(method_definition
|
||
(private_property_identifier)
|
||
(formal_parameters)
|
||
(statement_block
|
||
(expression_statement (call_expression (member_expression (super) (property_identifier)) (arguments))))))))
|
||
|
||
============================================
|
||
Classes with reserved words as methods
|
||
============================================
|
||
|
||
class Foo {
|
||
catch() {}
|
||
finally() {}
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block)))))
|
||
|
||
============================================
|
||
Class Property Fields
|
||
============================================
|
||
|
||
class Foo {
|
||
static foo = 2
|
||
}
|
||
|
||
class Bar {
|
||
static get
|
||
baz() { return 1; }
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(field_definition (property_identifier) (number))))
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block (return_statement (number)))))))
|
||
|
||
============================================
|
||
Private Class Property Fields
|
||
============================================
|
||
|
||
class Foo {
|
||
static #FOO = 2
|
||
}
|
||
|
||
class Bar {
|
||
#BAZ; static foo(quux) { return #BAZ in quux; }
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(field_definition (private_property_identifier) (number))))
|
||
(class_declaration
|
||
(identifier)
|
||
(class_body
|
||
(field_definition (private_property_identifier))
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block
|
||
(return_statement
|
||
(binary_expression (private_property_identifier) (identifier))))))))
|
||
|
||
============================================
|
||
Class Decorators
|
||
============================================
|
||
|
||
@reload
|
||
@eval
|
||
class Foo {
|
||
@foo.bar(baz) static foo() {
|
||
|
||
}
|
||
|
||
@foo bar = 'baz';
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(class_declaration
|
||
(decorator (identifier))
|
||
(decorator (identifier))
|
||
(identifier)
|
||
(class_body
|
||
(method_definition
|
||
(decorator (call_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments (identifier))))
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(field_definition
|
||
(decorator
|
||
(identifier))
|
||
(property_identifier)
|
||
(string (string_fragment))))))
|
||
|
||
============================================
|
||
Arrays
|
||
============================================
|
||
|
||
[];
|
||
[ "item1" ];
|
||
[ "item1", ];
|
||
[ "item1", item2 ];
|
||
[ , item2 ];
|
||
[ item2 = 5 ];
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (array))
|
||
(expression_statement (array (string (string_fragment))))
|
||
(expression_statement (array (string (string_fragment))))
|
||
(expression_statement (array (string (string_fragment)) (identifier)))
|
||
(expression_statement (array (identifier)))
|
||
(expression_statement (array (assignment_expression (identifier) (number)))))
|
||
|
||
============================================
|
||
Functions
|
||
============================================
|
||
|
||
[
|
||
function() {},
|
||
function(arg1, ...arg2) {
|
||
arg2;
|
||
},
|
||
function stuff() {},
|
||
function trailing(a,) {},
|
||
function trailing(a,b,) {},
|
||
function reserved(async) {},
|
||
function rest(...[_ = x]) {}
|
||
]
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (array
|
||
(function
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(function
|
||
(formal_parameters (identifier) (rest_pattern (identifier)))
|
||
(statement_block
|
||
(expression_statement (identifier))))
|
||
(function
|
||
(identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(function
|
||
(identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block))
|
||
(function
|
||
(identifier)
|
||
(formal_parameters (identifier) (identifier))
|
||
(statement_block))
|
||
(function
|
||
(identifier)
|
||
(formal_parameters (identifier))
|
||
(statement_block))
|
||
(function
|
||
(identifier)
|
||
(formal_parameters (rest_pattern (array_pattern (assignment_pattern (identifier) (identifier)))))
|
||
(statement_block)))))
|
||
|
||
===================================================
|
||
Arrow functions
|
||
===================================================
|
||
|
||
a => 1;
|
||
() => 2;
|
||
(d, e) => 3;
|
||
(f, g) => {
|
||
return h;
|
||
};
|
||
(trailing,) => 4;
|
||
(h, trailing,) => 5;
|
||
(set, kv) => 2;
|
||
async => async + 1;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (arrow_function
|
||
(identifier)
|
||
(number)))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters)
|
||
(number)))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters (identifier) (identifier))
|
||
(number)))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters (identifier) (identifier))
|
||
(statement_block
|
||
(return_statement (identifier)))))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters (identifier))
|
||
(number)))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters (identifier) (identifier))
|
||
(number)))
|
||
(expression_statement (arrow_function
|
||
(formal_parameters (identifier) (identifier)) (number)))
|
||
(expression_statement (arrow_function
|
||
(identifier)
|
||
(binary_expression (identifier) (number)))))
|
||
|
||
============================================
|
||
Generator Functions
|
||
============================================
|
||
|
||
[
|
||
function *() {},
|
||
function *generateStuff(arg1, arg2) {
|
||
yield;
|
||
yield arg2;
|
||
yield * foo();
|
||
}
|
||
]
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (array
|
||
(generator_function
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(generator_function
|
||
(identifier)
|
||
(formal_parameters (identifier) (identifier))
|
||
(statement_block
|
||
(expression_statement (yield_expression))
|
||
(expression_statement (yield_expression (identifier)))
|
||
(expression_statement (yield_expression (call_expression (identifier) (arguments)))))))))
|
||
|
||
============================================
|
||
Function parameters with default values
|
||
============================================
|
||
|
||
function a({b}, c = d, e = f, async = true) {
|
||
}
|
||
|
||
---
|
||
|
||
(program
|
||
(function_declaration
|
||
(identifier)
|
||
(formal_parameters
|
||
(object_pattern (shorthand_property_identifier_pattern))
|
||
(assignment_pattern (identifier) (identifier))
|
||
(assignment_pattern (identifier) (identifier))
|
||
(assignment_pattern (identifier) (true)))
|
||
(statement_block)))
|
||
|
||
============================================
|
||
Property access
|
||
============================================
|
||
|
||
x.someProperty;
|
||
x[someVariable];
|
||
x["some-string"];
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (member_expression (identifier) (property_identifier)))
|
||
(expression_statement (subscript_expression (identifier) (identifier)))
|
||
(expression_statement (subscript_expression (identifier) (string (string_fragment)))))
|
||
|
||
============================================
|
||
Chained Property access
|
||
============================================
|
||
|
||
return returned.promise()
|
||
.done( newDefer.resolve )
|
||
.fail( newDefer.reject )
|
||
|
||
---
|
||
|
||
(program (return_statement
|
||
(call_expression
|
||
(member_expression
|
||
(call_expression
|
||
(member_expression
|
||
(call_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments))
|
||
(property_identifier))
|
||
(arguments (member_expression (identifier) (property_identifier))))
|
||
(property_identifier))
|
||
(arguments (member_expression (identifier) (property_identifier))))))
|
||
|
||
============================================
|
||
Chained callbacks
|
||
============================================
|
||
|
||
return this.map(function (a) {
|
||
return a.b;
|
||
})
|
||
|
||
// a comment
|
||
|
||
.filter(function (c) {
|
||
return c.d;
|
||
})
|
||
|
||
---
|
||
|
||
|
||
(program (return_statement
|
||
(call_expression
|
||
(member_expression
|
||
(call_expression
|
||
(member_expression (this) (property_identifier))
|
||
(arguments
|
||
(function (formal_parameters (identifier)) (statement_block
|
||
(return_statement (member_expression (identifier) (property_identifier)))))))
|
||
(comment)
|
||
(property_identifier))
|
||
(arguments (function (formal_parameters (identifier)) (statement_block
|
||
(return_statement (member_expression (identifier) (property_identifier)))))))))
|
||
|
||
============================================
|
||
Function calls
|
||
============================================
|
||
|
||
x.someMethod(arg1, "arg2");
|
||
function(x, y) {
|
||
|
||
}(a, b);
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (call_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments (identifier) (string (string_fragment)))))
|
||
(expression_statement (call_expression
|
||
(function
|
||
(formal_parameters (identifier) (identifier))
|
||
(statement_block))
|
||
(arguments (identifier) (identifier)))))
|
||
|
||
============================================
|
||
Optional chaining property access
|
||
============================================
|
||
|
||
a . b;
|
||
a ?. b;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(member_expression (identifier) (property_identifier)))
|
||
(expression_statement
|
||
(member_expression (identifier) (optional_chain) (property_identifier))))
|
||
|
||
============================================
|
||
Optional chaining array access
|
||
============================================
|
||
|
||
a [b];
|
||
a ?. [b];
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(subscript_expression (identifier) (identifier)))
|
||
(expression_statement
|
||
(subscript_expression (identifier) (optional_chain) (identifier))))
|
||
|
||
============================================
|
||
Optional function calls
|
||
============================================
|
||
|
||
a?.(b);
|
||
a[b]?.(c);
|
||
d.e?.(f);
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(call_expression (identifier) (optional_chain) (arguments (identifier))))
|
||
(expression_statement
|
||
(call_expression
|
||
(subscript_expression (identifier) (identifier))
|
||
(optional_chain)
|
||
(arguments (identifier))))
|
||
(expression_statement
|
||
(call_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(optional_chain)
|
||
(arguments (identifier)))))
|
||
|
||
============================================
|
||
Constructor calls
|
||
============================================
|
||
|
||
new module.Klass(1, "two");
|
||
new Thing;
|
||
new new module.Klass(1)("two");
|
||
new new Thing;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (new_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments (number) (string (string_fragment)))))
|
||
(expression_statement (new_expression
|
||
(identifier)))
|
||
(expression_statement (new_expression
|
||
(new_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(arguments (number)))
|
||
(arguments (string (string_fragment)))))
|
||
(expression_statement (new_expression
|
||
(new_expression (identifier)))))
|
||
|
||
============================================
|
||
Await Expressions
|
||
============================================
|
||
|
||
await asyncFunction();
|
||
await asyncPromise;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(await_expression
|
||
(call_expression (identifier) (arguments))))
|
||
(expression_statement (await_expression (identifier))))
|
||
|
||
============================================
|
||
Async Functions and Methods
|
||
============================================
|
||
|
||
async function foo() {}
|
||
|
||
{
|
||
async bar() {
|
||
}
|
||
}
|
||
|
||
class Foo {
|
||
async bar() {}
|
||
}
|
||
|
||
async (a) => { return foo; };
|
||
|
||
async function* foo() { yield 1; }
|
||
|
||
---
|
||
|
||
(program
|
||
(function_declaration
|
||
(identifier)
|
||
(formal_parameters)
|
||
(statement_block))
|
||
(expression_statement
|
||
(object
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))))
|
||
(class_declaration (identifier) (class_body
|
||
(method_definition
|
||
(property_identifier)
|
||
(formal_parameters)
|
||
(statement_block))))
|
||
(expression_statement
|
||
(arrow_function
|
||
(formal_parameters (identifier))
|
||
(statement_block
|
||
(return_statement (identifier)))))
|
||
(generator_function_declaration
|
||
(identifier)
|
||
(formal_parameters)
|
||
(statement_block (expression_statement (yield_expression (number))))))
|
||
|
||
============================================
|
||
Math operators
|
||
============================================
|
||
|
||
i++;
|
||
i--;
|
||
i + j * 3 - j % 5;
|
||
2 ** i * 3;
|
||
2 * i ** 3;
|
||
2 ** i ** 3;
|
||
+x;
|
||
-x;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (update_expression (identifier)))
|
||
(expression_statement (update_expression (identifier)))
|
||
(expression_statement (binary_expression
|
||
(binary_expression
|
||
(identifier)
|
||
(binary_expression (identifier) (number)))
|
||
(binary_expression (identifier) (number))))
|
||
(expression_statement (binary_expression
|
||
(binary_expression (number) (identifier))
|
||
(number)))
|
||
(expression_statement (binary_expression
|
||
(number)
|
||
(binary_expression (identifier) (number))))
|
||
(expression_statement (binary_expression
|
||
(number)
|
||
(binary_expression (identifier) (number))))
|
||
(expression_statement (unary_expression (identifier)))
|
||
(expression_statement (unary_expression (identifier))))
|
||
|
||
============================================
|
||
Boolean operators
|
||
============================================
|
||
|
||
i || j;
|
||
i && j;
|
||
!a && !b || !c && !d;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression
|
||
(binary_expression
|
||
(unary_expression (identifier))
|
||
(unary_expression (identifier)))
|
||
(binary_expression
|
||
(unary_expression (identifier))
|
||
(unary_expression (identifier))))))
|
||
|
||
============================================
|
||
The null-coalescing operator
|
||
============================================
|
||
|
||
x = b ?? c();
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(assignment_expression
|
||
(identifier)
|
||
(binary_expression
|
||
(identifier)
|
||
(call_expression (identifier) (arguments))))))
|
||
|
||
============================================
|
||
Bitwise operators
|
||
============================================
|
||
|
||
i >> j;
|
||
i >>> j;
|
||
i << j;
|
||
i & j;
|
||
i | j;
|
||
~i ^ ~j
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression
|
||
(unary_expression (identifier))
|
||
(unary_expression (identifier)))))
|
||
|
||
============================================
|
||
Relational operators
|
||
============================================
|
||
|
||
x < y;
|
||
x <= y;
|
||
x == y;
|
||
x === y;
|
||
x != y;
|
||
x !== y;
|
||
x >= y;
|
||
x > y;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier))))
|
||
|
||
==============================================
|
||
Assignments
|
||
==============================================
|
||
|
||
x = 0;
|
||
x.y = 0;
|
||
x["y"] = 0;
|
||
async = 0;
|
||
(x) = 1;
|
||
(x) += 1;
|
||
x &&= 0;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(number)))
|
||
(expression_statement (assignment_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(number)))
|
||
(expression_statement (assignment_expression
|
||
(subscript_expression (identifier) (string (string_fragment)))
|
||
(number)))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(number)))
|
||
(expression_statement (assignment_expression
|
||
(parenthesized_expression (identifier))
|
||
(number)))
|
||
(expression_statement (augmented_assignment_expression
|
||
(parenthesized_expression (identifier))
|
||
(number)))
|
||
(expression_statement (augmented_assignment_expression
|
||
(identifier)
|
||
(number))))
|
||
|
||
==============================================
|
||
The comma operator
|
||
==============================================
|
||
|
||
a = 1, b = 2;
|
||
c = {d: (3, 4 + 5, 6)};
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (sequence_expression
|
||
(assignment_expression (identifier) (number))
|
||
(assignment_expression (identifier) (number))))
|
||
(expression_statement
|
||
(assignment_expression (identifier) (object
|
||
(pair
|
||
(property_identifier)
|
||
(parenthesized_expression (sequence_expression
|
||
(number)
|
||
(sequence_expression
|
||
(binary_expression (number) (number))
|
||
(number)))))))))
|
||
|
||
==============================================
|
||
Ternaries
|
||
==============================================
|
||
|
||
condition ? case1 : case2;
|
||
|
||
x.y = some.condition ?
|
||
some.case :
|
||
some.other.case;
|
||
|
||
a?.1:.2
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(ternary_expression
|
||
(identifier)
|
||
(identifier)
|
||
(identifier)))
|
||
(expression_statement
|
||
(assignment_expression
|
||
(member_expression
|
||
(identifier)
|
||
(property_identifier))
|
||
(ternary_expression
|
||
(member_expression
|
||
(identifier)
|
||
(property_identifier))
|
||
(member_expression
|
||
(identifier)
|
||
(property_identifier))
|
||
(member_expression
|
||
(member_expression
|
||
(identifier)
|
||
(property_identifier))
|
||
(property_identifier)))))
|
||
(expression_statement
|
||
(ternary_expression
|
||
(identifier)
|
||
(number)
|
||
(number))))
|
||
|
||
==============================================
|
||
Type operators
|
||
==============================================
|
||
|
||
typeof x;
|
||
x instanceof String;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (unary_expression (identifier)))
|
||
(expression_statement (binary_expression (identifier) (identifier))))
|
||
|
||
============================================
|
||
The delete operator
|
||
============================================
|
||
|
||
delete thing['prop'];
|
||
true ? delete thing.prop : null;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(unary_expression (subscript_expression (identifier) (string (string_fragment)))))
|
||
(expression_statement
|
||
(ternary_expression (true)
|
||
(unary_expression (member_expression (identifier) (property_identifier)))
|
||
(null))))
|
||
|
||
============================================
|
||
The void operator
|
||
============================================
|
||
|
||
a = void b()
|
||
|
||
---
|
||
|
||
(program (expression_statement (assignment_expression
|
||
(identifier)
|
||
(unary_expression (call_expression (identifier) (arguments))))))
|
||
|
||
==============================================
|
||
Augmented assignments
|
||
==============================================
|
||
|
||
s |= 1;
|
||
t %= 2;
|
||
w ^= 3;
|
||
x += 4;
|
||
y.z *= 5;
|
||
async += 1;
|
||
a >>= 1;
|
||
b >>>= 1;
|
||
c <<= 1;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (member_expression (identifier) (property_identifier)) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number)))
|
||
(expression_statement
|
||
(augmented_assignment_expression (identifier) (number))))
|
||
|
||
==============================================
|
||
Operator precedence
|
||
==============================================
|
||
|
||
a <= b && c >= d;
|
||
a.b = c ? d : e;
|
||
a && b(c) && d;
|
||
a && new b(c) && d;
|
||
typeof a == b && c instanceof d
|
||
a && b | c;
|
||
a - b << c;
|
||
a in b != c in d;
|
||
await a || b;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (binary_expression
|
||
(binary_expression (identifier) (identifier))
|
||
(binary_expression (identifier) (identifier))))
|
||
(expression_statement (assignment_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(ternary_expression (identifier) (identifier) (identifier))))
|
||
(expression_statement (binary_expression
|
||
(binary_expression
|
||
(identifier)
|
||
(call_expression (identifier) (arguments (identifier))))
|
||
(identifier)))
|
||
(expression_statement (binary_expression
|
||
(binary_expression
|
||
(identifier)
|
||
(new_expression (identifier) (arguments (identifier))))
|
||
(identifier)))
|
||
(expression_statement (binary_expression
|
||
(binary_expression
|
||
(unary_expression (identifier))
|
||
(identifier))
|
||
(binary_expression (identifier) (identifier))))
|
||
(expression_statement (binary_expression
|
||
(identifier)
|
||
(binary_expression (identifier) (identifier))))
|
||
(expression_statement (binary_expression
|
||
(binary_expression (identifier) (identifier))
|
||
(identifier)))
|
||
(expression_statement (binary_expression
|
||
(binary_expression (identifier) (identifier))
|
||
(binary_expression (identifier) (identifier))))
|
||
(expression_statement (binary_expression
|
||
(await_expression (identifier))
|
||
(identifier))))
|
||
|
||
==============================================
|
||
Simple JSX elements
|
||
==============================================
|
||
|
||
a = <div className='b' tabIndex={1} />;
|
||
b = <Foo.Bar>a <span>b</span> c</Foo.Bar>;
|
||
b = <Foo.Bar.Baz.Baz></Foo.Bar.Baz.Baz>;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_self_closing_element
|
||
(identifier)
|
||
(jsx_attribute (property_identifier) (string (string_fragment)))
|
||
(jsx_attribute (property_identifier) (jsx_expression (number))))))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (member_expression (identifier) (property_identifier)))
|
||
(jsx_text)
|
||
(jsx_element
|
||
(jsx_opening_element (identifier))
|
||
(jsx_text)
|
||
(jsx_closing_element (identifier)))
|
||
(jsx_text)
|
||
(jsx_closing_element (member_expression (identifier) (property_identifier))))))
|
||
(expression_statement (assignment_expression (identifier) (jsx_element (jsx_opening_element (member_expression (member_expression (member_expression (identifier) (property_identifier)) (property_identifier)) (property_identifier))) (jsx_closing_element (member_expression (member_expression (member_expression (identifier) (property_identifier)) (property_identifier)) (property_identifier)))))))
|
||
|
||
==============================================
|
||
Anonymous JSX element
|
||
==============================================
|
||
|
||
a = <></>;
|
||
a = <E><></></E>;
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element)
|
||
(jsx_closing_element))))
|
||
(expression_statement
|
||
(assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (identifier))
|
||
(jsx_element
|
||
(jsx_opening_element)
|
||
(jsx_closing_element))
|
||
(jsx_closing_element (identifier))))))
|
||
|
||
==============================================
|
||
Expressions within JSX elements
|
||
==============================================
|
||
|
||
a = <a b c={d}> e {f} g </a>
|
||
h = <i>{...j}</i>
|
||
b = <Text {...j} />
|
||
b = <Text {...j}></Text>
|
||
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (identifier)
|
||
(jsx_attribute (property_identifier))
|
||
(jsx_attribute (property_identifier) (jsx_expression (identifier))))
|
||
(jsx_text)
|
||
(jsx_expression (identifier))
|
||
(jsx_text)
|
||
(jsx_closing_element (identifier)))))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (identifier))
|
||
(jsx_expression (spread_element (identifier)))
|
||
(jsx_closing_element (identifier)))))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_self_closing_element
|
||
(identifier)
|
||
(jsx_expression (spread_element (identifier))))))
|
||
(expression_statement (assignment_expression
|
||
(identifier)
|
||
(jsx_element
|
||
(jsx_opening_element
|
||
(identifier)
|
||
(jsx_expression (spread_element (identifier))))
|
||
(jsx_closing_element (identifier))))))
|
||
|
||
|
||
==============================================
|
||
Expressions with rest elements
|
||
==============================================
|
||
|
||
foo(...rest)
|
||
foo = [...[bar] = [baz]]
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(call_expression (identifier) (arguments (spread_element (identifier)))))
|
||
(expression_statement
|
||
(assignment_expression (identifier) (array (spread_element (assignment_expression (array_pattern (identifier)) (array (identifier))))))))
|
||
|
||
==============================================
|
||
Forward slashes after parenthesized expressions
|
||
==============================================
|
||
|
||
(foo - bar) / baz
|
||
if (foo - bar) /baz/;
|
||
(this.a() / this.b() - 1) / 2
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(binary_expression
|
||
(parenthesized_expression (binary_expression (identifier) (identifier)))
|
||
(identifier)))
|
||
(if_statement
|
||
(parenthesized_expression (binary_expression (identifier) (identifier)))
|
||
(expression_statement (regex (regex_pattern))))
|
||
(expression_statement
|
||
(binary_expression
|
||
(parenthesized_expression (binary_expression
|
||
(binary_expression
|
||
(call_expression (member_expression (this) (property_identifier)) (arguments))
|
||
(call_expression (member_expression (this) (property_identifier)) (arguments)))
|
||
(number)))
|
||
(number))))
|
||
|
||
==============================================
|
||
Non-breaking spaces as whitespace
|
||
==============================================
|
||
|
||
// Type definitions for Dexie v1.4.1
|
||
// Project: https://github.com/dfahlander/Dexie.js
|
||
// Definitions by: David Fahlander <http://github.com/dfahlander>
|
||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||
|
||
---
|
||
|
||
(program (comment) (comment) (comment) (comment))
|
||
|
||
==============================================
|
||
Yield expressions
|
||
==============================================
|
||
|
||
yield db.users.where('[endpoint+email]')
|
||
|
||
---
|
||
|
||
(program
|
||
(expression_statement
|
||
(yield_expression
|
||
(call_expression
|
||
(member_expression
|
||
(member_expression (identifier) (property_identifier))
|
||
(property_identifier))
|
||
(arguments (string (string_fragment)))))))
|
||
|
||
============================================
|
||
JSX
|
||
============================================
|
||
|
||
var a = <Foo></Foo>
|
||
b = <Foo.Bar></Foo.Bar>
|
||
c = <> <Foo /> </>
|
||
d = <Bar> <Foo /> </Bar>
|
||
e = <Foo bar/>
|
||
f = <Foo bar="string" baz={2} data-i8n="dialogs.welcome.heading" bam />
|
||
g = <Avatar userId={foo.creatorId} />
|
||
h = <input checked={this.state.selectedNewStreetType === 'new-street-default' || !this.state.selectedNewStreetType}> </input>
|
||
i = <Foo:Bar bar={}>{...children}</Foo:Bar>
|
||
|
||
---
|
||
|
||
(program
|
||
(variable_declaration (variable_declarator (identifier)
|
||
(jsx_element (jsx_opening_element (identifier)) (jsx_closing_element (identifier)))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (member_expression (identifier) (property_identifier)))
|
||
(jsx_closing_element (member_expression (identifier) (property_identifier))))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_element (jsx_opening_element) (jsx_self_closing_element (identifier)) (jsx_closing_element))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_element
|
||
(jsx_opening_element (identifier))
|
||
(jsx_self_closing_element (identifier))
|
||
(jsx_closing_element (identifier)))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_self_closing_element (identifier) (jsx_attribute (property_identifier)))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_self_closing_element
|
||
(identifier)
|
||
(jsx_attribute (property_identifier) (string (string_fragment)))
|
||
(jsx_attribute (property_identifier) (jsx_expression (number)))
|
||
(jsx_attribute (property_identifier) (string (string_fragment)))
|
||
(jsx_attribute (property_identifier)))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_self_closing_element
|
||
(identifier)
|
||
(jsx_attribute
|
||
(property_identifier)
|
||
(jsx_expression (member_expression (identifier) (property_identifier)))))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_element
|
||
(jsx_opening_element
|
||
(identifier)
|
||
(jsx_attribute
|
||
(property_identifier)
|
||
(jsx_expression
|
||
(binary_expression
|
||
(binary_expression
|
||
(member_expression
|
||
(member_expression (this) (property_identifier))
|
||
(property_identifier))
|
||
(string (string_fragment)))
|
||
(unary_expression
|
||
(member_expression
|
||
(member_expression (this) (property_identifier))
|
||
(property_identifier)))))))
|
||
(jsx_closing_element (identifier)))))
|
||
(expression_statement (assignment_expression (identifier)
|
||
(jsx_element
|
||
(jsx_opening_element
|
||
(jsx_namespace_name (identifier) (identifier))
|
||
(jsx_attribute (property_identifier) (jsx_expression)))
|
||
(jsx_expression (spread_element (identifier)))
|
||
(jsx_closing_element (jsx_namespace_name (identifier) (identifier)))))))
|