tree-sitter/spec/fixtures/corpus/javascript/control_flow.txt
Max Brunsfeld 9bff4d0b06 Add concise method syntax to javascript fixture grammar
This exposes an ambiguity handling bug that I discovered while adding ES6 support to
tree-sitter-javascript
2015-12-15 22:25:48 -08:00

260 lines
6.1 KiB
Text

==========================================
multiple statements
==========================================
var x = {}, z, i = 0;
firstFunction(x)
secondFunction(x);
---
(program
(var_declaration
(var_assignment (identifier) (object))
(identifier)
(var_assignment (identifier) (number)))
(expression_statement (function_call (identifier) (arguments (identifier))))
(expression_statement (function_call (identifier) (arguments (identifier)))))
==========================================
if statements
==========================================
if (isReady()) {
console.log(theData)
}
---
(program (if_statement (function_call (identifier) (arguments))
(statement_block (expression_statement
(function_call (member_access (identifier) (identifier)) (arguments (identifier)))))))
==========================================
if statements whose bodies are objects
==========================================
if (a) {
b()
{
c();
},
d: 'e'
}
---
(program (if_statement (identifier)
(expression_statement (object
(method_definition (identifier) (statement_block (expression_statement (function_call (identifier) (arguments)))))
(pair (identifier) (string))))))
============================================
if statements whose bodies look like objects
============================================
if (f) {
g()
{
h();
i();
}
j()
}
---
(program (if_statement (identifier)
(statement_block
(expression_statement (function_call (identifier) (arguments)))
(statement_block
(expression_statement (function_call (identifier) (arguments)))
(expression_statement (function_call (identifier) (arguments))))
(expression_statement (function_call (identifier) (arguments))))))
==========================================
if-else statements
==========================================
if (theCondition) {
firstFunction();
} else {
secondFunction();
}
---
(program (if_statement
(identifier)
(statement_block (expression_statement (function_call (identifier) (arguments))))
(statement_block (expression_statement (function_call (identifier) (arguments))))))
==================================================
if-else statements with multiple conditions
==================================================
if (firstValue) {
firstFunction();
} else if (secondValue)
secondFunction();
else {
thirdFunction();
}
---
(program (if_statement (identifier)
(statement_block (expression_statement (function_call (identifier) (arguments))))
(if_statement (identifier)
(expression_statement (function_call (identifier) (arguments)))
(statement_block (expression_statement (function_call (identifier) (arguments)))))))
==========================================
for loops
==========================================
for (var i = 1; someCondition(i); i = next()) {
doSomething();
}
---
(program (for_statement
(var_declaration (var_assignment (identifier) (number)))
(function_call (identifier) (arguments (identifier)))
(assignment (identifier) (function_call (identifier) (arguments)))
(statement_block (expression_statement (function_call (identifier) (arguments))))))
==========================================
for-in loops
==========================================
for (var key in someObject)
doSomething();
for (key in someObject)
doSomethingElse();
---
(program
(for_in_statement
(identifier) (identifier)
(expression_statement (function_call (identifier) (arguments))))
(for_in_statement
(identifier) (identifier)
(expression_statement (function_call (identifier) (arguments)))))
==========================================
regular for loops beginning with an in-expression
==========================================
for (key in something && i = 0; i < n; i++) {
doSomething();
}
---
(program (for_statement
(bool_op
(type_op (identifier) (identifier))
(assignment (identifier) (number)))
(rel_op (identifier) (identifier))
(math_op (identifier))
(statement_block (expression_statement (function_call (identifier) (arguments))))))
==========================================
while loops
==========================================
while (someCondition(i)) {
doSomething();
}
---
(program (while_statement
(function_call (identifier) (arguments (identifier)))
(statement_block (expression_statement (function_call (identifier) (arguments))))))
==========================================
try/catch statements
==========================================
try {
doSomething();
} catch (e) {
logError(e);
}
try {
doSomething();
} finally {
logError();
}
---
(program
(try_statement
(statement_block (expression_statement (function_call (identifier) (arguments))))
(catch (identifier)
(statement_block (expression_statement (function_call (identifier) (arguments (identifier)))))))
(try_statement
(statement_block (expression_statement (function_call (identifier) (arguments))))
(finally
(statement_block (expression_statement (function_call (identifier) (arguments)))))))
===========================================
throw statements
===========================================
throw new Error("wtf");
---
(program
(throw_statement (constructor_call (identifier) (arguments (string)))))
===========================================
indented code after blocks
===========================================
function x() {}
return z;
---
(program
(expression_statement
(function_expression (identifier) (statement_block)))
(return_statement (identifier)))
===========================================
switch statements
===========================================
switch(x) {
case "hello":
print("one");
break;
case z():
print("two");
break;
default:
print("three");
}
---
(program (switch_statement (identifier)
(case
(string)
(expression_statement (function_call (identifier) (arguments (string))))
(break_statement))
(case
(function_call (identifier) (arguments))
(expression_statement (function_call (identifier) (arguments (string))))
(break_statement))
(default
(expression_statement (function_call (identifier) (arguments (string)))))))