Skip to content

Commit

Permalink
fix: inline config if entry parse. (#509)
Browse files Browse the repository at this point in the history
  • Loading branch information
Peefy committed Apr 12, 2023
1 parent a18f99f commit cd7778f
Show file tree
Hide file tree
Showing 11 changed files with 316 additions and 167 deletions.
17 changes: 9 additions & 8 deletions kclvm/parser/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1757,17 +1757,18 @@ impl<'a> Parser<'a> {
true
}

while parse_body_item(self, &mut body, need_skip_newlines) {
if let TokenKind::Comma = self.token.kind {
self.bump();
}
if need_skip_newlines {
if !need_skip_newlines {
// Only parse one inline key-value pair.
parse_body_item(self, &mut body, need_skip_newlines);
} else {
while parse_body_item(self, &mut body, need_skip_newlines) {
// bump optional comma at the endline.
if let TokenKind::Comma = self.token.kind {
self.bump();
}
self.skip_newlines();
}
}
if let TokenKind::Newline = self.token.kind {
self.bump();
}

if need_skip_newlines {
self.skip_newlines();
Expand Down
2 changes: 1 addition & 1 deletion kclvm/parser/src/parser/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1179,7 +1179,7 @@ data2 = {
}
"####,
expect![[r#"
{"filename":"hello.k","pkg":"__main__","doc":"","name":"__main__","body":[{"node":{"Assign":{"targets":[{"node":{"names":["data2"],"pkgpath":"","ctx":"Store"},"filename":"hello.k","line":2,"column":0,"end_line":2,"end_column":5}],"value":{"node":{"Config":{"items":[{"node":{"key":null,"value":{"node":{"Config":{"items":[{"node":{"key":{"node":{"Identifier":{"names":["key"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":3,"column":7,"end_line":3,"end_column":10},"value":{"node":{"StringLit":{"is_long_string":false,"raw_value":"\"value1\"","value":"value1"}},"filename":"hello.k","line":3,"column":13,"end_line":3,"end_column":21},"operation":"Override","insert_index":-1},"filename":"hello.k","line":3,"column":7,"end_line":3,"end_column":21}]}},"filename":"hello.k","line":3,"column":6,"end_line":3,"end_column":22},"operation":"Union","insert_index":-1},"filename":"hello.k","line":3,"column":4,"end_line":3,"end_column":22},{"node":{"key":null,"value":{"node":{"ConfigIfEntry":{"if_cond":{"node":{"Compare":{"left":{"node":{"Identifier":{"names":["a"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":7,"end_line":4,"end_column":8},"ops":["Eq"],"comparators":[{"node":{"NumberLit":{"binary_suffix":null,"value":{"Int":123}}},"filename":"hello.k","line":4,"column":12,"end_line":4,"end_column":15}]}},"filename":"hello.k","line":4,"column":7,"end_line":4,"end_column":15},"items":[{"node":{"key":null,"value":{"node":{"ConfigIfEntry":{"if_cond":{"node":{"Compare":{"left":{"node":{"Identifier":{"names":["b"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":20,"end_line":4,"end_column":21},"ops":["Eq"],"comparators":[{"node":{"NumberLit":{"binary_suffix":null,"value":{"Int":456}}},"filename":"hello.k","line":4,"column":25,"end_line":4,"end_column":28}]}},"filename":"hello.k","line":4,"column":20,"end_line":4,"end_column":28},"items":[{"node":{"key":{"node":{"Identifier":{"names":["key"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":30,"end_line":4,"end_column":33},"value":{"node":{"StringLit":{"is_long_string":false,"raw_value":"\"value2\"","value":"value2"}},"filename":"hello.k","line":4,"column":36,"end_line":4,"end_column":44},"operation":"Override","insert_index":-1},"filename":"hello.k","line":4,"column":36,"end_line":4,"end_column":44}],"orelse":null}},"filename":"hello.k","line":4,"column":30,"end_line":5,"end_column":0},"operation":"Override","insert_index":-1},"filename":"hello.k","line":4,"column":30,"end_line":5,"end_column":0}],"orelse":null}},"filename":"hello.k","line":4,"column":17,"end_line":5,"end_column":0},"operation":"Union","insert_index":-1},"filename":"hello.k","line":4,"column":4,"end_line":5,"end_column":0}]}},"filename":"hello.k","line":2,"column":8,"end_line":5,"end_column":1},"type_annotation":null,"ty":null}},"filename":"hello.k","line":2,"column":0,"end_line":5,"end_column":1}],"comments":[]}
{"filename":"hello.k","pkg":"__main__","doc":"","name":"__main__","body":[{"node":{"Assign":{"targets":[{"node":{"names":["data2"],"pkgpath":"","ctx":"Store"},"filename":"hello.k","line":2,"column":0,"end_line":2,"end_column":5}],"value":{"node":{"Config":{"items":[{"node":{"key":null,"value":{"node":{"Config":{"items":[{"node":{"key":{"node":{"Identifier":{"names":["key"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":3,"column":7,"end_line":3,"end_column":10},"value":{"node":{"StringLit":{"is_long_string":false,"raw_value":"\"value1\"","value":"value1"}},"filename":"hello.k","line":3,"column":13,"end_line":3,"end_column":21},"operation":"Override","insert_index":-1},"filename":"hello.k","line":3,"column":7,"end_line":3,"end_column":21}]}},"filename":"hello.k","line":3,"column":6,"end_line":3,"end_column":22},"operation":"Union","insert_index":-1},"filename":"hello.k","line":3,"column":4,"end_line":3,"end_column":22},{"node":{"key":null,"value":{"node":{"ConfigIfEntry":{"if_cond":{"node":{"Compare":{"left":{"node":{"Identifier":{"names":["a"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":7,"end_line":4,"end_column":8},"ops":["Eq"],"comparators":[{"node":{"NumberLit":{"binary_suffix":null,"value":{"Int":123}}},"filename":"hello.k","line":4,"column":12,"end_line":4,"end_column":15}]}},"filename":"hello.k","line":4,"column":7,"end_line":4,"end_column":15},"items":[{"node":{"key":null,"value":{"node":{"ConfigIfEntry":{"if_cond":{"node":{"Compare":{"left":{"node":{"Identifier":{"names":["b"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":20,"end_line":4,"end_column":21},"ops":["Eq"],"comparators":[{"node":{"NumberLit":{"binary_suffix":null,"value":{"Int":456}}},"filename":"hello.k","line":4,"column":25,"end_line":4,"end_column":28}]}},"filename":"hello.k","line":4,"column":20,"end_line":4,"end_column":28},"items":[{"node":{"key":{"node":{"Identifier":{"names":["key"],"pkgpath":"","ctx":"Load"}},"filename":"hello.k","line":4,"column":30,"end_line":4,"end_column":33},"value":{"node":{"StringLit":{"is_long_string":false,"raw_value":"\"value2\"","value":"value2"}},"filename":"hello.k","line":4,"column":36,"end_line":4,"end_column":44},"operation":"Override","insert_index":-1},"filename":"hello.k","line":4,"column":36,"end_line":4,"end_column":44}],"orelse":null}},"filename":"hello.k","line":4,"column":30,"end_line":4,"end_column":44},"operation":"Override","insert_index":-1},"filename":"hello.k","line":4,"column":30,"end_line":4,"end_column":44}],"orelse":null}},"filename":"hello.k","line":4,"column":17,"end_line":5,"end_column":0},"operation":"Union","insert_index":-1},"filename":"hello.k","line":4,"column":4,"end_line":5,"end_column":0}]}},"filename":"hello.k","line":2,"column":8,"end_line":5,"end_column":1},"type_annotation":null,"ty":null}},"filename":"hello.k","line":2,"column":0,"end_line":5,"end_column":1}],"comments":[]}
"#]],
);

Expand Down
2 changes: 2 additions & 0 deletions kclvm/parser/src/tests/error_recovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ parse_expr_snapshot! { config_recovery_9, "{*a, **b}" }
parse_expr_snapshot! { config_recovery_10, "{**a, *b}" }
parse_expr_snapshot! { config_recovery_11, "{if True: a = , b = 2}" }
parse_expr_snapshot! { config_recovery_12, "{if True: *a, b = 2}" }
parse_expr_snapshot! { config_recovery_13, "{if True: key: {}}" }
parse_expr_snapshot! { config_recovery_14, "{if True: key: []}" }
parse_expr_snapshot! { comp_clause_recovery_0, "[i for i in [1,2,3]]" }
parse_expr_snapshot! { comp_clause_recovery_1, "[i, j for i in [1,2,3]]" }
parse_expr_snapshot! { comp_clause_recovery_2, "[for i in [1,2,3]]" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
source: parser/src/tests/error_recovery.rs
assertion_line: 69
expression: "crate::tests::parsing_expr_string(\"{if True: a = , b = 2}\")"
---
Node {
Expand Down Expand Up @@ -64,83 +65,6 @@ Node {
end_line: 1,
end_column: 15,
},
Node {
node: ConfigEntry {
key: Some(
Node {
node: Identifier(
Identifier {
names: [
"b",
],
pkgpath: "",
ctx: Load,
},
),
filename: "",
line: 1,
column: 16,
end_line: 1,
end_column: 17,
},
),
value: Node {
node: NumberLit(
NumberLit {
binary_suffix: None,
value: Int(
2,
),
},
),
filename: "",
line: 1,
column: 20,
end_line: 1,
end_column: 21,
},
operation: Override,
insert_index: -1,
},
filename: "",
line: 1,
column: 20,
end_line: 1,
end_column: 21,
},
Node {
node: ConfigEntry {
key: Some(
Node {
node: Missing(
MissingExpr,
),
filename: "",
line: 1,
column: 21,
end_line: 1,
end_column: 22,
},
),
value: Node {
node: Missing(
MissingExpr,
),
filename: "",
line: 1,
column: 21,
end_line: 1,
end_column: 22,
},
operation: Override,
insert_index: -1,
},
filename: "",
line: 1,
column: 21,
end_line: 1,
end_column: 22,
},
],
orelse: None,
},
Expand All @@ -149,7 +73,7 @@ Node {
line: 1,
column: 10,
end_line: 1,
end_column: 22,
end_column: 13,
},
operation: Union,
insert_index: -1,
Expand All @@ -158,7 +82,51 @@ Node {
line: 1,
column: 1,
end_line: 1,
end_column: 22,
end_column: 15,
},
Node {
node: ConfigEntry {
key: Some(
Node {
node: Identifier(
Identifier {
names: [
"b",
],
pkgpath: "",
ctx: Load,
},
),
filename: "",
line: 1,
column: 16,
end_line: 1,
end_column: 17,
},
),
value: Node {
node: NumberLit(
NumberLit {
binary_suffix: None,
value: Int(
2,
),
},
),
filename: "",
line: 1,
column: 20,
end_line: 1,
end_column: 21,
},
operation: Override,
insert_index: -1,
},
filename: "",
line: 1,
column: 16,
end_line: 1,
end_column: 21,
},
],
},
Expand Down
Loading

0 comments on commit cd7778f

Please sign in to comment.