// Calls

foo();
foo(1);
foo(1,2);
foo(1,2,);
foo(1,2,3);
foo(foo(1));
foo(foo(1),foo(2,3));
foo(...spread);
foo(x,...spread);
foo(x,...foo());

foo({a:1,b:2,c:3});

foo(1, 2, 3, function(e){e.foo()});

foo(function(e){e.foo()},function(e){e.bar()});

// Basic Functions

function f(){}
(function(){});
(function(){})();
(function f(){});
(function f(){})();

function f(){1}
(function(){1});
(function(){1})();
(function f(){1});
(function f(){1})();

// Parameters

function foo(a,b,c){1}

function foo(a=1,b,c){1}

function foo(a=1,b=2,c=3){1}

function foo(a,...rest){1}

function foo(a=1,...rest){1}

function foo({a,b}){1}

function foo([a,b]){1}

function foo([a,b,]){1}

// Methods

o={prop:function(){},method(){},get getter(){},set setter(x){},*gen1(){},* gen2(){}, async a(){}}

o={prop:function(){1},method(){1},get getter(){1},set setter(x){1},*gen1(){1},* gen2(){1}, async a(){1}}

// Multiple / Nested

function f(){}function f(){}

function outer(){1;function inner(){2}3}

// Async / Await

async function foo(){}
async function foo(){1}
async function foo(){await foo()}
o={async async(){},async(){},async:1}
o={async 1(){}}
o={async"foo"(){}}
o={async["foo"](){}}
o={foo:async function(){}}
