yeast: Order AST dump fields by schema-declared order

The AST dump previously emitted named fields in field-id order, which
made it dependant on registration order and so it could differ between
front-ends. We now emit them in the order declared in the node-types
YAML instead, so that the order is kept stable.
This commit is contained in:
Taus
2026-07-16 15:57:35 +00:00
parent d1fed84daf
commit 7a573c4619
73 changed files with 570 additions and 484 deletions

View File

@@ -252,6 +252,41 @@ pub fn extend_schema_from_yaml(
let yaml: YamlNodeTypes =
serde_yaml::from_str(yaml_input).map_err(|e| format!("Failed to parse YAML: {e}"))?;
apply_yaml_to_schema(&yaml, schema);
// The typed `YamlNodeTypes` stores each node's fields in a `BTreeMap`
// (alphabetical), losing the authored order. Re-parse as an ordered value to
// record the declared field order for presentation (see the AST dump).
record_field_order(schema, yaml_input)?;
Ok(())
}
/// Record each node kind's declared (named) field order from the source YAML,
/// which `serde`'s `BTreeMap`-based deserialization does not preserve.
/// `serde_yaml::Value` mappings keep insertion (source) order.
fn record_field_order(schema: &mut crate::schema::Schema, yaml_input: &str) -> Result<(), String> {
let value: serde_yaml::Value = serde_yaml::from_str(yaml_input)
.map_err(|e| format!("Failed to parse YAML for field order: {e}"))?;
let Some(named) = value.get("named").and_then(|v| v.as_mapping()) else {
return Ok(());
};
for (node_name, fields) in named {
let Some(node_name) = node_name.as_str() else {
continue;
};
let Some(fields) = fields.as_mapping() else {
continue; // node with no fields (null)
};
let mut order = Vec::new();
for (raw_field_name, _) in fields {
let Some(raw) = raw_field_name.as_str() else {
continue;
};
// Skip the unnamed/`child` slot; the dump handles it separately.
if let Some(name) = parse_field_name(raw).name {
order.push(schema.register_field(&name));
}
}
schema.set_field_order(node_name, order);
}
Ok(())
}

View File

@@ -44,6 +44,11 @@ pub struct Schema {
field_types: BTreeMap<(String, FieldId), Vec<NodeType>>,
field_cardinalities: BTreeMap<(String, FieldId), FieldCardinality>,
supertypes: BTreeMap<String, Vec<NodeType>>,
/// Per-node-kind declared field order (named fields only), as written in
/// the source node-types YAML. Field ids are not a stable ordering key
/// across front-ends, so this preserves the authored order for
/// presentation (see the AST dump).
field_order: BTreeMap<String, Vec<FieldId>>,
}
impl Default for Schema {
@@ -65,6 +70,7 @@ impl Schema {
field_types: BTreeMap::new(),
field_cardinalities: BTreeMap::new(),
supertypes: BTreeMap::new(),
field_order: BTreeMap::new(),
}
}
@@ -269,6 +275,17 @@ impl Schema {
.get(&(parent_kind.to_string(), field_id))
}
/// Record the declared (named) field order for a node kind, as authored in
/// the source node-types YAML.
pub fn set_field_order(&mut self, kind: &str, field_ids: Vec<FieldId>) {
self.field_order.insert(kind.to_string(), field_ids);
}
/// The declared (named) field order for a node kind, if known.
pub fn field_order(&self, kind: &str) -> Option<&Vec<FieldId>> {
self.field_order.get(kind)
}
pub fn set_field_cardinality(
&mut self,
parent_kind: &str,

View File

@@ -223,11 +223,45 @@ fn dump_node(
writeln!(out).unwrap();
// Named fields first
for (&field_id, children) in &node.fields {
if field_id == CHILD_FIELD {
continue; // Handle unnamed children last
// Named fields first, in the schema's declared order when available
// (front-end-independent), else in field-id order. Any present fields not
// covered by the declared order are appended in field-id order.
//
// The declared order lives in the validation schema, keyed by *its* field
// ids; the AST being dumped may key the same field names under different
// ids. So map the declared order through field NAMES into this AST's own id
// space, keeping the two schemas independent (they share names, not ids).
let named_field_ids: Vec<u16> = {
let present: Vec<u16> = node
.fields
.keys()
.copied()
.filter(|&f| f != CHILD_FIELD)
.collect();
match type_check.and_then(|(schema, _, _)| {
schema
.field_order(node.kind_name())
.map(|order| (schema, order))
}) {
Some((schema, order)) => {
let mut result: Vec<u16> = order
.iter()
.filter_map(|&f| schema.field_name_for_id(f))
.filter_map(|name| ast.field_id_for_name(name))
.filter(|&f| f != CHILD_FIELD && node.fields.contains_key(&f))
.collect();
for &f in &present {
if !result.contains(&f) {
result.push(f);
}
}
result
}
None => present,
}
};
for field_id in named_field_ids {
let children = &node.fields[&field_id];
let field_name = ast.field_name_for_id(field_id).unwrap_or("?");
let child_type_check = type_check.map(|(schema, _, _)| {
let expected =

View File

@@ -51,6 +51,12 @@ top_level
identifier: identifier "f"
value:
function_expr
capture_declaration:
variable_declaration
modifier: modifier "weak"
pattern:
name_pattern
identifier: identifier "self"
body:
block
stmt:
@@ -61,9 +67,3 @@ top_level
name_expr
identifier: identifier "self"
member: identifier "doThing"
capture_declaration:
variable_declaration
modifier: modifier "weak"
pattern:
name_pattern
identifier: identifier "self"

View File

@@ -55,23 +55,23 @@ top_level
identifier: identifier "f"
value:
function_expr
parameter:
parameter
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "x"
return_type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "x"
operator: infix_operator "*"
right: int_literal "2"
parameter:
parameter
pattern:
name_pattern
identifier: identifier "x"
type:
named_type_expr
name: identifier "Int"
return_type:
named_type_expr
name: identifier "Int"

View File

@@ -38,10 +38,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "$0"
operator: infix_operator "+"
right:
name_expr
identifier: identifier "$1"

View File

@@ -75,6 +75,17 @@ top_level
identifier: identifier "f"
value:
function_expr
parameter:
parameter
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "x"
return_type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
@@ -85,27 +96,16 @@ top_level
identifier: identifier "y"
value:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "x"
operator: infix_operator "+"
right: int_literal "1"
return_expr
value:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "y"
operator: infix_operator "*"
right: int_literal "2"
parameter:
parameter
pattern:
name_pattern
identifier: identifier "x"
type:
named_type_expr
name: identifier "Int"
return_type:
named_type_expr
name: identifier "Int"

View File

@@ -28,6 +28,12 @@ top_level
block
stmt:
call_expr
callee:
member_access_expr
base:
name_expr
identifier: identifier "xs"
member: identifier "map"
argument:
argument
value:
@@ -36,14 +42,8 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "$0"
operator: infix_operator "*"
right: int_literal "2"
callee:
member_access_expr
base:
name_expr
identifier: identifier "xs"
member: identifier "map"

View File

@@ -43,9 +43,9 @@ top_level
identifier: identifier "v"
value:
call_expr
argument:
argument
value: string_literal "\"key\""
callee:
name_expr
identifier: identifier "d"
argument:
argument
value: string_literal "\"key\""

View File

@@ -43,9 +43,9 @@ top_level
identifier: identifier "first"
value:
call_expr
argument:
argument
value: int_literal "0"
callee:
name_expr
identifier: identifier "xs"
argument:
argument
value: int_literal "0"

View File

@@ -60,27 +60,27 @@ top_level
identifier: identifier "x"
value: int_literal "1"
switch_expr
value:
name_expr
identifier: identifier "y"
case:
switch_case
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"matched\""
callee:
name_expr
identifier: identifier "print"
pattern:
expr_equality_pattern
expr:
name_expr
identifier: identifier "someConstant"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: string_literal "\"matched\""
switch_case
body:
block
stmt: break_expr "break"
value:
name_expr
identifier: identifier "y"

View File

@@ -33,17 +33,17 @@ top_level
pattern_guard_expr
pattern:
constructor_pattern
element:
pattern_element
pattern:
name_pattern
identifier: identifier "value"
constructor:
member_access_expr
base:
named_type_expr
name: identifier "Optional"
member: identifier "some"
element:
pattern_element
pattern:
name_pattern
identifier: identifier "value"
value:
name_expr
identifier: identifier "optional"

View File

@@ -53,20 +53,20 @@ top_level
identifier: identifier "x"
value:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "x"
operator: infix_operator "+"
right: int_literal "10"
then:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"

View File

@@ -73,47 +73,47 @@ top_level
if_expr
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
else:
if_expr
condition:
binary_expr
operator: infix_operator "<"
left:
name_expr
identifier: identifier "x"
right: int_literal "0"
else:
block
stmt:
call_expr
argument:
argument
value: int_literal "3"
callee:
name_expr
identifier: identifier "print"
then:
block
stmt:
call_expr
argument:
argument
value: int_literal "2"
callee:
name_expr
identifier: identifier "print"
then:
block
stmt:
call_expr
argument:
argument
value: int_literal "1"
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: int_literal "1"
else:
if_expr
condition:
binary_expr
left:
name_expr
identifier: identifier "x"
operator: infix_operator "<"
right: int_literal "0"
then:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: int_literal "2"
else:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: int_literal "3"

View File

@@ -53,15 +53,30 @@ top_level
if_expr
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
then:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"
else:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
@@ -70,18 +85,3 @@ top_level
name_expr
identifier: identifier "x"
operator: prefix_operator "-"
callee:
name_expr
identifier: identifier "print"
then:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"

View File

@@ -42,17 +42,17 @@ top_level
pattern_guard_expr
pattern:
constructor_pattern
element:
pattern_element
pattern:
name_pattern
identifier: identifier "value"
constructor:
member_access_expr
base:
named_type_expr
name: identifier "Optional"
member: identifier "some"
element:
pattern_element
pattern:
name_pattern
identifier: identifier "value"
value:
name_expr
identifier: identifier "optional"
@@ -60,11 +60,11 @@ top_level
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "value"
callee:
name_expr
identifier: identifier "print"

View File

@@ -36,20 +36,20 @@ top_level
if_expr
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
then:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"

View File

@@ -76,32 +76,25 @@ top_level
block
stmt:
switch_expr
value:
name_expr
identifier: identifier "x"
case:
switch_case
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"one\""
callee:
name_expr
identifier: identifier "print"
pattern:
expr_equality_pattern
expr: int_literal "1"
switch_case
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"two or three\""
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: string_literal "\"one\""
switch_case
pattern:
or_pattern
pattern:
@@ -109,17 +102,24 @@ top_level
expr: int_literal "2"
expr_equality_pattern
expr: int_literal "3"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: string_literal "\"two or three\""
switch_case
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"other\""
callee:
name_expr
identifier: identifier "print"
value:
name_expr
identifier: identifier "x"
argument:
argument
value: string_literal "\"other\""

View File

@@ -86,55 +86,55 @@ top_level
block
stmt:
switch_expr
value:
name_expr
identifier: identifier "shape"
case:
switch_case
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "r"
callee:
name_expr
identifier: identifier "print"
pattern:
constructor_pattern
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "circle"
element:
pattern_element
pattern:
name_pattern
identifier: identifier "r"
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "circle"
switch_case
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "s"
callee:
name_expr
identifier: identifier "print"
identifier: identifier "r"
switch_case
pattern:
constructor_pattern
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "square"
element:
pattern_element
pattern:
name_pattern
identifier: identifier "s"
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "square"
value:
name_expr
identifier: identifier "shape"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "s"

View File

@@ -88,45 +88,40 @@ top_level
block
stmt:
switch_expr
value:
name_expr
identifier: identifier "x"
case:
switch_case
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"yes\""
callee:
name_expr
identifier: identifier "print"
pattern:
constructor_pattern
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "implicit"
element:
pattern_element
key: identifier "isAcknowledged"
pattern:
expr_equality_pattern
expr: boolean_literal "false"
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "implicit"
switch_case
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "rowId"
callee:
name_expr
identifier: identifier "print"
argument:
argument
value: string_literal "\"yes\""
switch_case
pattern:
constructor_pattern
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "thread"
element:
pattern_element
key: identifier "threadRowId"
@@ -135,10 +130,15 @@ top_level
pattern:
name_pattern
identifier: identifier "rowId"
constructor:
member_access_expr
base: inferred_type_expr "."
member: identifier "thread"
value:
name_expr
identifier: identifier "x"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "rowId"

View File

@@ -41,13 +41,13 @@ top_level
if_expr
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
then: int_literal "1"
else:
unary_expr
operand: int_literal "1"
operator: prefix_operator "-"
then: int_literal "1"

View File

@@ -16,6 +16,6 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "+"
left: int_literal "1"
operator: infix_operator "+"
right: int_literal "2"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "foo"
operator: infix_operator "+"
right:
name_expr
identifier: identifier "bar"

View File

@@ -19,7 +19,6 @@ top_level
block
stmt:
import_declaration
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"
imported_expr:
member_access_expr
base:
@@ -29,3 +28,4 @@ top_level
identifier: identifier "Foundation"
member: identifier "Networking"
member: identifier "URLSession"
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"

View File

@@ -18,10 +18,10 @@ top_level
block
stmt:
import_declaration
pattern: bulk_importing_pattern "import Foundation.Networking"
imported_expr:
member_access_expr
base:
name_expr
identifier: identifier "Foundation"
member: identifier "Networking"
pattern: bulk_importing_pattern "import Foundation.Networking"

View File

@@ -20,12 +20,12 @@ top_level
stmt:
import_declaration
modifier: modifier "struct"
pattern:
name_pattern
identifier: identifier "Date"
imported_expr:
member_access_expr
base:
name_expr
identifier: identifier "Foundation"
member: identifier "Date"
pattern:
name_pattern
identifier: identifier "Date"

View File

@@ -16,7 +16,7 @@ top_level
block
stmt:
import_declaration
pattern: bulk_importing_pattern "import Foundation"
imported_expr:
name_expr
identifier: identifier "Foundation"
pattern: bulk_importing_pattern "import Foundation"

View File

@@ -26,10 +26,10 @@ top_level
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "greet"
argument:
argument
name: identifier "person"
value: string_literal "\"Bob\""
callee:
name_expr
identifier: identifier "greet"

View File

@@ -23,11 +23,11 @@ top_level
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "foo"
argument:
argument
value: int_literal "1"
argument
value: int_literal "2"
callee:
name_expr
identifier: identifier "foo"

View File

@@ -43,22 +43,22 @@ top_level
block
stmt:
function_declaration
name: identifier "greet"
parameter:
parameter
pattern:
name_pattern
identifier: identifier "name"
default: string_literal "\"world\""
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "name"
callee:
name_expr
identifier: identifier "print"
name: identifier "greet"
parameter:
parameter
default: string_literal "\"world\""
pattern:
name_pattern
identifier: identifier "name"

View File

@@ -41,18 +41,6 @@ top_level
block
stmt:
function_declaration
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "name"
callee:
name_expr
identifier: identifier "print"
name: identifier "greet"
parameter:
parameter
@@ -60,3 +48,15 @@ top_level
pattern:
name_pattern
identifier: identifier "name"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "name"

View File

@@ -30,14 +30,14 @@ top_level
block
stmt:
function_declaration
name: identifier "greet"
body:
block
stmt:
call_expr
argument:
argument
value: string_literal "\"hello\""
callee:
name_expr
identifier: identifier "print"
name: identifier "greet"
argument:
argument
value: string_literal "\"hello\""

View File

@@ -58,19 +58,6 @@ top_level
block
stmt:
function_declaration
body:
block
stmt:
return_expr
value:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "a"
right:
name_expr
identifier: identifier "b"
name: identifier "add"
parameter:
parameter
@@ -86,3 +73,16 @@ top_level
return_type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
return_expr
value:
binary_expr
left:
name_expr
identifier: identifier "a"
operator: infix_operator "+"
right:
name_expr
identifier: identifier "b"

View File

@@ -47,13 +47,6 @@ top_level
block
stmt:
function_declaration
body:
block
stmt:
return_expr
value:
name_expr
identifier: identifier "x"
name: identifier "identity"
parameter:
parameter
@@ -64,3 +57,10 @@ top_level
return_type:
named_type_expr
name: identifier "T"
body:
block
stmt:
return_expr
value:
name_expr
identifier: identifier "x"

View File

@@ -40,10 +40,10 @@ top_level
identifier: identifier "y"
value:
call_expr
argument:
argument
value: int_literal "1"
callee:
member_access_expr
base: inferred_type_expr ".some"
member: identifier "some"
argument:
argument
value: int_literal "1"

View File

@@ -26,12 +26,12 @@ top_level
block
stmt:
call_expr
argument:
argument
value: int_literal "1"
callee:
member_access_expr
base:
name_expr
identifier: identifier "list"
member: identifier "append"
argument:
argument
value: int_literal "1"

View File

@@ -60,25 +60,6 @@ top_level
block
stmt:
function_declaration
body:
block
stmt:
return_expr
value:
call_expr
argument:
argument
value: int_literal "0"
argument
value:
name_expr
identifier: identifier "+"
callee:
member_access_expr
base:
name_expr
identifier: identifier "values"
member: identifier "reduce"
name: identifier "sum"
parameter:
parameter
@@ -89,3 +70,22 @@ top_level
return_type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
return_expr
value:
call_expr
callee:
member_access_expr
base:
name_expr
identifier: identifier "values"
member: identifier "reduce"
argument:
argument
value: int_literal "0"
argument
value:
name_expr
identifier: identifier "+"

View File

@@ -59,16 +59,22 @@ top_level
block
stmt:
for_each_stmt
pattern:
name_pattern
identifier: identifier "x"
iterable:
name_expr
identifier: identifier "xs"
body:
block
stmt:
if_expr
condition:
binary_expr
operator: infix_operator "<"
left:
name_expr
identifier: identifier "x"
operator: infix_operator "<"
right: int_literal "0"
then:
block
@@ -76,26 +82,20 @@ top_level
if_expr
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "100"
then:
block
stmt: break_expr "break"
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"
pattern:
name_pattern
identifier: identifier "x"
iterable:
name_expr
identifier: identifier "xs"

View File

@@ -36,18 +36,6 @@ top_level
block
stmt:
for_each_stmt
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"
pattern:
name_pattern
identifier: identifier "x"
@@ -57,3 +45,15 @@ top_level
int_literal "1"
int_literal "2"
int_literal "3"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"

View File

@@ -35,23 +35,23 @@ top_level
block
stmt:
for_each_stmt
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "i"
callee:
name_expr
identifier: identifier "print"
pattern:
name_pattern
identifier: identifier "i"
iterable:
binary_expr
operator: infix_operator "..<"
left: int_literal "0"
operator: infix_operator "..<"
right: int_literal "10"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "i"

View File

@@ -39,28 +39,28 @@ top_level
block
stmt:
for_each_stmt
pattern:
name_pattern
identifier: identifier "x"
iterable:
name_expr
identifier: identifier "xs"
guard:
binary_expr
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"
pattern:
name_pattern
identifier: identifier "x"
guard:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
right: int_literal "0"
iterable:
name_expr
identifier: identifier "xs"

View File

@@ -35,15 +35,15 @@ top_level
block
stmt:
compound_assign_expr
operator: infix_operator "-="
target:
name_expr
identifier: identifier "x"
operator: infix_operator "-="
value: int_literal "1"
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"

View File

@@ -31,19 +31,19 @@ top_level
block
stmt:
while_stmt
condition:
binary_expr
left:
name_expr
identifier: identifier "x"
operator: infix_operator ">"
right: int_literal "0"
body:
block
stmt:
compound_assign_expr
operator: infix_operator "-="
target:
name_expr
identifier: identifier "x"
operator: infix_operator "-="
value: int_literal "1"
condition:
binary_expr
operator: infix_operator ">"
left:
name_expr
identifier: identifier "x"
right: int_literal "0"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "+"
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "<"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "<"
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "/"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "/"
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "=="
left:
name_expr
identifier: identifier "a"
operator: infix_operator "=="
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "&&"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "&&"
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "||"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "||"
right:
name_expr
identifier: identifier "b"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "*"
right:
name_expr
identifier: identifier "b"

View File

@@ -20,16 +20,16 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "+"
right:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "b"
operator: infix_operator "*"
right:
name_expr
identifier: identifier "c"

View File

@@ -24,8 +24,8 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "*"
left: tuple_expr "(a + b)"
operator: infix_operator "*"
right:
name_expr
identifier: identifier "c"

View File

@@ -16,6 +16,6 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "..."
left: int_literal "1"
operator: infix_operator "..."
right: int_literal "10"

View File

@@ -16,10 +16,10 @@ top_level
block
stmt:
binary_expr
operator: infix_operator "-"
left:
name_expr
identifier: identifier "a"
operator: infix_operator "-"
right:
name_expr
identifier: identifier "b"

View File

@@ -61,11 +61,11 @@ top_level
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "error"
callee:
name_expr
identifier: identifier "print"

View File

@@ -31,8 +31,8 @@ top_level
identifier: identifier "n"
value:
binary_expr
operator: infix_operator "??"
left:
name_expr
identifier: identifier "opt"
operator: infix_operator "??"
right: int_literal "0"

View File

@@ -31,12 +31,12 @@ top_level
block
stmt:
function_declaration
name: identifier "read"
return_type:
named_type_expr
name: identifier "String"
body:
block
stmt:
return_expr
value: string_literal "\"\""
name: identifier "read"
return_type:
named_type_expr
name: identifier "String"

View File

@@ -67,34 +67,34 @@ top_level
block
stmt:
accessor_declaration
modifier: modifier "var"
name: identifier "p"
accessor_kind: accessor_kind "get"
type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
switch_expr
value:
name_expr
identifier: identifier "y"
case:
switch_case
body:
block
stmt:
return_expr
value: int_literal "1"
pattern:
expr_equality_pattern
expr:
name_expr
identifier: identifier "someConstant"
body:
block
stmt:
return_expr
value: int_literal "1"
switch_case
body:
block
stmt:
return_expr
value: int_literal "2"
value:
name_expr
identifier: identifier "y"
modifier: modifier "var"
name: identifier "p"
type:
named_type_expr
name: identifier "Int"
accessor_kind: accessor_kind "get"

View File

@@ -69,6 +69,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "Point"
member:
variable_declaration
modifier: modifier "var"
@@ -92,5 +94,3 @@ top_level
value:
name_expr
identifier: identifier "x"
modifier: modifier "class"
name: identifier "Point"

View File

@@ -44,6 +44,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "Counter"
member:
variable_declaration
modifier: modifier "var"
@@ -52,15 +54,13 @@ top_level
identifier: identifier "n"
value: int_literal "0"
function_declaration
name: identifier "bump"
body:
block
stmt:
compound_assign_expr
operator: infix_operator "+="
target:
name_expr
identifier: identifier "n"
operator: infix_operator "+="
value: int_literal "1"
name: identifier "bump"
modifier: modifier "class"
name: identifier "Counter"

View File

@@ -57,6 +57,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "Point"
member:
variable_declaration
modifier: modifier "var"
@@ -74,5 +76,3 @@ top_level
type:
named_type_expr
name: identifier "Int"
modifier: modifier "class"
name: identifier "Point"

View File

@@ -88,6 +88,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "Rect"
member:
variable_declaration
modifier: modifier "var"
@@ -106,24 +108,22 @@ top_level
named_type_expr
name: identifier "Double"
accessor_declaration
modifier: modifier "var"
name: identifier "area"
accessor_kind: accessor_kind "get"
type:
named_type_expr
name: identifier "Double"
body:
block
stmt:
return_expr
value:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "w"
operator: infix_operator "*"
right:
name_expr
identifier: identifier "h"
modifier: modifier "var"
name: identifier "area"
type:
named_type_expr
name: identifier "Double"
accessor_kind: accessor_kind "get"
modifier: modifier "class"
name: identifier "Rect"

View File

@@ -53,34 +53,34 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "enum"
name: identifier "Shape"
member:
class_like_declaration
modifier: modifier "enum_case"
name: identifier "circle"
member:
constructor_declaration
body: block "circle(radius: Double)"
parameter:
parameter
type:
named_type_expr
name: identifier "Double"
pattern:
name_pattern
identifier: identifier "radius"
body: block "circle(radius: Double)"
class_like_declaration
modifier: modifier "enum_case"
name: identifier "square"
member:
constructor_declaration
parameter:
parameter
type:
named_type_expr
name: identifier "Double"
modifier: modifier "enum_case"
name: identifier "circle"
class_like_declaration
member:
constructor_declaration
body: block "square(side: Double)"
parameter:
parameter
pattern:
name_pattern
identifier: identifier "side"
type:
named_type_expr
name: identifier "Double"
modifier: modifier "enum_case"
name: identifier "square"
modifier: modifier "enum"
name: identifier "Shape"
body: block "square(side: Double)"

View File

@@ -39,6 +39,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "enum"
name: identifier "Direction"
member:
variable_declaration
modifier: modifier "enum_case"
@@ -60,5 +62,3 @@ top_level
pattern:
name_pattern
identifier: identifier "west"
modifier: modifier "enum"
name: identifier "Direction"

View File

@@ -30,6 +30,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "enum"
name: identifier "Suit"
member:
variable_declaration
modifier: modifier "enum_case"
@@ -57,5 +59,3 @@ top_level
pattern:
name_pattern
identifier: identifier "spades"
modifier: modifier "enum"
name: identifier "Suit"

View File

@@ -45,24 +45,24 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "extension"
name: identifier "Int"
member:
function_declaration
name: identifier "squared"
return_type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
return_expr
value:
binary_expr
operator: infix_operator "*"
left:
name_expr
identifier: identifier "self"
operator: infix_operator "*"
right:
name_expr
identifier: identifier "self"
name: identifier "squared"
return_type:
named_type_expr
name: identifier "Int"
modifier: modifier "extension"
name: identifier "Int"

View File

@@ -80,6 +80,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "Box"
member:
variable_declaration
modifier: modifier "var"
@@ -88,6 +90,12 @@ top_level
identifier: identifier "_v"
value: int_literal "0"
accessor_declaration
modifier: modifier "var"
name: identifier "v"
accessor_kind: accessor_kind "get"
type:
named_type_expr
name: identifier "Int"
body:
block
stmt:
@@ -95,13 +103,15 @@ top_level
value:
name_expr
identifier: identifier "_v"
modifier: modifier "var"
accessor_declaration
modifier:
modifier "var"
modifier "chained_declaration"
name: identifier "v"
accessor_kind: accessor_kind "set"
type:
named_type_expr
name: identifier "Int"
accessor_kind: accessor_kind "get"
accessor_declaration
body:
block
stmt:
@@ -112,13 +122,3 @@ top_level
value:
name_expr
identifier: identifier "newValue"
modifier:
modifier "var"
modifier "chained_declaration"
name: identifier "v"
type:
named_type_expr
name: identifier "Int"
accessor_kind: accessor_kind "set"
modifier: modifier "class"
name: identifier "Box"

View File

@@ -21,9 +21,9 @@ top_level
block
stmt:
class_like_declaration
member:
function_declaration
body: block "func draw()"
name: identifier "draw"
modifier: modifier "protocol"
name: identifier "Drawable"
member:
function_declaration
name: identifier "draw"
body: block "func draw()"

View File

@@ -61,25 +61,25 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "protocol"
name: identifier "P"
member:
accessor_declaration
name: identifier "foo"
accessor_kind: accessor_kind "get"
type:
named_type_expr
name: identifier "Int"
accessor_kind: accessor_kind "get"
accessor_declaration
name: identifier "bar"
accessor_kind: accessor_kind "get"
type:
named_type_expr
name: identifier "String"
accessor_kind: accessor_kind "get"
accessor_declaration
modifier: modifier "chained_declaration"
name: identifier "bar"
accessor_kind: accessor_kind "set"
type:
named_type_expr
name: identifier "String"
accessor_kind: accessor_kind "set"
modifier: modifier "protocol"
name: identifier "P"

View File

@@ -57,6 +57,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "struct"
name: identifier "Point"
member:
variable_declaration
modifier: modifier "let"
@@ -74,5 +76,3 @@ top_level
type:
named_type_expr
name: identifier "Int"
modifier: modifier "struct"
name: identifier "Point"

View File

@@ -44,20 +44,20 @@ top_level
identifier: identifier "x"
value:
switch_expr
value:
name_expr
identifier: identifier "y"
case:
switch_case
body:
block
stmt: int_literal "1"
pattern:
expr_equality_pattern
expr:
name_expr
identifier: identifier "someConstant"
body:
block
stmt: int_literal "1"
switch_case
body:
block
stmt: int_literal "2"
value:
name_expr
identifier: identifier "y"

View File

@@ -18,8 +18,8 @@ top_level
block
stmt:
compound_assign_expr
operator: infix_operator "+="
target:
name_expr
identifier: identifier "x"
operator: infix_operator "+="
value: int_literal "1"

View File

@@ -72,6 +72,8 @@ top_level
block
stmt:
class_like_declaration
modifier: modifier "class"
name: identifier "C"
member:
variable_declaration
modifier: modifier "var"
@@ -83,40 +85,38 @@ top_level
name: identifier "Int"
value: int_literal "0"
accessor_declaration
body:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "newValue"
callee:
name_expr
identifier: identifier "print"
modifier:
modifier "var"
modifier "chained_declaration"
name: identifier "x"
accessor_kind: accessor_kind "willSet"
accessor_declaration
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "oldValue"
callee:
name_expr
identifier: identifier "print"
identifier: identifier "newValue"
accessor_declaration
modifier:
modifier "var"
modifier "chained_declaration"
name: identifier "x"
accessor_kind: accessor_kind "didSet"
modifier: modifier "class"
name: identifier "C"
body:
block
stmt:
call_expr
callee:
name_expr
identifier: identifier "print"
argument:
argument
value:
name_expr
identifier: identifier "oldValue"