Skip to content

Commit

Permalink
fix: schema mixin parse (#1682)
Browse files Browse the repository at this point in the history
Signed-off-by: peefy <[email protected]>
  • Loading branch information
Peefy authored Oct 11, 2024
1 parent 25cb7ad commit 3799237
Show file tree
Hide file tree
Showing 7 changed files with 297 additions and 0 deletions.
2 changes: 2 additions & 0 deletions kclvm/parser/src/parser/stmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1176,6 +1176,7 @@ impl<'a> Parser<'a> {
};

loop {
let marker = self.mark();
self.validate_dedent();
if matches!(
self.token.kind,
Expand All @@ -1193,6 +1194,7 @@ impl<'a> Parser<'a> {
if let TokenKind::Newline = self.token.kind {
self.skip_newlines()
}
self.drop(marker);
}

// _DEDENT
Expand Down
15 changes: 15 additions & 0 deletions kclvm/parser/src/tests/error_recovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,21 @@ schema A:
parse_module_snapshot! { schema_stmt_recovery_35, r#"
schema A:
"attr":"#}
parse_module_snapshot! { schema_stmt_recovery_36, r#"
schema A:
mixin: "#}
parse_module_snapshot! { schema_stmt_recovery_37, r#"
schema A:
mixin: ["#}
parse_module_snapshot! { schema_stmt_recovery_38, r#"
schema A:
mixin: []"#}
parse_module_snapshot! { schema_stmt_recovery_39, r#"
schema A:
mixin []"#}
parse_module_snapshot! { schema_stmt_recovery_40, r#"
schema A:
mixin ["#}
parse_module_snapshot! { rule_stmt_recovery_0, r#"rule"#}
parse_module_snapshot! { rule_stmt_recovery_1, r#"rule A"#}
parse_module_snapshot! { rule_stmt_recovery_2, r#"rule A["#}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
source: parser/src/tests/error_recovery.rs
expression: "crate::tests::parsing_module_string(r#\"\nschema A:\n mixin: \"#)"
---
Module {
filename: "",
pkg: "",
doc: None,
name: "",
body: [
Node {
node: Schema(
SchemaStmt {
doc: None,
name: Node {
node: "A",
filename: "",
line: 2,
column: 7,
end_line: 2,
end_column: 8,
},
parent_name: None,
for_host_name: None,
is_mixin: false,
is_protocol: false,
args: None,
mixins: [],
body: [],
decorators: [],
checks: [],
index_signature: None,
},
),
filename: "",
line: 2,
column: 0,
end_line: 4,
end_column: 0,
},
],
comments: [],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
source: parser/src/tests/error_recovery.rs
expression: "crate::tests::parsing_module_string(r#\"\nschema A:\n mixin: [\"#)"
---
Module {
filename: "",
pkg: "",
doc: None,
name: "",
body: [
Node {
node: Schema(
SchemaStmt {
doc: None,
name: Node {
node: "A",
filename: "",
line: 2,
column: 7,
end_line: 2,
end_column: 8,
},
parent_name: None,
for_host_name: None,
is_mixin: false,
is_protocol: false,
args: None,
mixins: [
Node {
node: Identifier {
names: [
Node {
node: "",
filename: "",
line: 3,
column: 11,
end_line: 3,
end_column: 11,
},
],
pkgpath: "",
ctx: Load,
},
filename: "",
line: 3,
column: 11,
end_line: 3,
end_column: 11,
},
Node {
node: Identifier {
names: [
Node {
node: "",
filename: "",
line: 3,
column: 12,
end_line: 3,
end_column: 12,
},
],
pkgpath: "",
ctx: Load,
},
filename: "",
line: 3,
column: 12,
end_line: 3,
end_column: 12,
},
],
body: [],
decorators: [],
checks: [],
index_signature: None,
},
),
filename: "",
line: 2,
column: 0,
end_line: 4,
end_column: 0,
},
],
comments: [],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
source: parser/src/tests/error_recovery.rs
expression: "crate::tests::parsing_module_string(r#\"\nschema A:\n mixin: []\"#)"
---
Module {
filename: "",
pkg: "",
doc: None,
name: "",
body: [
Node {
node: Schema(
SchemaStmt {
doc: None,
name: Node {
node: "A",
filename: "",
line: 2,
column: 7,
end_line: 2,
end_column: 8,
},
parent_name: None,
for_host_name: None,
is_mixin: false,
is_protocol: false,
args: None,
mixins: [
Node {
node: Identifier {
names: [
Node {
node: "",
filename: "",
line: 3,
column: 11,
end_line: 3,
end_column: 11,
},
],
pkgpath: "",
ctx: Load,
},
filename: "",
line: 3,
column: 11,
end_line: 3,
end_column: 11,
},
],
body: [],
decorators: [],
checks: [],
index_signature: None,
},
),
filename: "",
line: 2,
column: 0,
end_line: 3,
end_column: 13,
},
],
comments: [],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
source: parser/src/tests/error_recovery.rs
expression: "crate::tests::parsing_module_string(r#\"\nschema A:\n mixin []\"#)"
---
Module {
filename: "",
pkg: "",
doc: None,
name: "",
body: [
Node {
node: Schema(
SchemaStmt {
doc: None,
name: Node {
node: "A",
filename: "",
line: 2,
column: 7,
end_line: 2,
end_column: 8,
},
parent_name: None,
for_host_name: None,
is_mixin: false,
is_protocol: false,
args: None,
mixins: [],
body: [],
decorators: [],
checks: [],
index_signature: None,
},
),
filename: "",
line: 2,
column: 0,
end_line: 3,
end_column: 12,
},
],
comments: [],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
source: parser/src/tests/error_recovery.rs
expression: "crate::tests::parsing_module_string(r#\"\nschema A:\n mixin [\"#)"
---
Module {
filename: "",
pkg: "",
doc: None,
name: "",
body: [
Node {
node: Schema(
SchemaStmt {
doc: None,
name: Node {
node: "A",
filename: "",
line: 2,
column: 7,
end_line: 2,
end_column: 8,
},
parent_name: None,
for_host_name: None,
is_mixin: false,
is_protocol: false,
args: None,
mixins: [],
body: [],
decorators: [],
checks: [],
index_signature: None,
},
),
filename: "",
line: 2,
column: 0,
end_line: 4,
end_column: 0,
},
],
comments: [],
}

0 comments on commit 3799237

Please sign in to comment.