From 1e84266566767e368c783df3ba79f143271fa4e7 Mon Sep 17 00:00:00 2001 From: "xiarui.xr" Date: Wed, 18 Oct 2023 22:17:50 +0800 Subject: [PATCH 1/2] fix: format behavior on line break between import stmt and other stmts Signed-off-by: xiarui.xr --- kclvm/ast_pretty/src/node.rs | 10 ++++++++++ .../src/format/test_data/format_data/breakline.golden | 1 + .../src/format/test_data/format_data/codelayout.golden | 1 + .../format_data/different_stmts_line_breaks.golden | 1 - .../format_data/different_stmts_line_breaks.input | 1 - .../src/format/test_data/format_data/import.golden | 1 + .../format/test_data/format_data/import_only.golden | 2 ++ .../src/format/test_data/format_data/import_only.input | 2 ++ .../test_data/format_data/layout_import_stmt.golden | 6 ++++++ .../test_data/format_data/layout_import_stmt.input | 4 ++++ .../src/format/test_data/format_data/schema.golden | 1 + kclvm/tools/src/format/tests.rs | 6 ++++-- 12 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 kclvm/tools/src/format/test_data/format_data/import_only.golden create mode 100644 kclvm/tools/src/format/test_data/format_data/import_only.input create mode 100644 kclvm/tools/src/format/test_data/format_data/layout_import_stmt.golden create mode 100644 kclvm/tools/src/format/test_data/format_data/layout_import_stmt.input diff --git a/kclvm/ast_pretty/src/node.rs b/kclvm/ast_pretty/src/node.rs index 091ba7b92..2d929616d 100644 --- a/kclvm/ast_pretty/src/node.rs +++ b/kclvm/ast_pretty/src/node.rs @@ -904,8 +904,18 @@ impl<'p> Printer<'p> { } pub fn stmts(&mut self, stmts: &[ast::NodeRef]) { + let mut prev_stmt: Option = None; for stmt in stmts { + let import_stmt_alter = match (prev_stmt.as_ref(), stmt.as_ref().node.to_owned()) { + (Some(ast::Stmt::Import(_)), ast::Stmt::Import(_)) => false, + (Some(ast::Stmt::Import(_)), _) => true, + _ => false, + }; + if import_stmt_alter { + self.write_newline(); + } self.stmt(stmt); + prev_stmt = Some(stmt.node.to_owned()); } } } diff --git a/kclvm/tools/src/format/test_data/format_data/breakline.golden b/kclvm/tools/src/format/test_data/format_data/breakline.golden index eb95f0d96..6b23475a3 100644 --- a/kclvm/tools/src/format/test_data/format_data/breakline.golden +++ b/kclvm/tools/src/format/test_data/format_data/breakline.golden @@ -1,4 +1,5 @@ import math + schema Base: name: str diff --git a/kclvm/tools/src/format/test_data/format_data/codelayout.golden b/kclvm/tools/src/format/test_data/format_data/codelayout.golden index ca0a5210f..2e5db3977 100644 --- a/kclvm/tools/src/format/test_data/format_data/codelayout.golden +++ b/kclvm/tools/src/format/test_data/format_data/codelayout.golden @@ -1,4 +1,5 @@ import math as alias_math + schema Person(Base): # inline comment name: str diff --git a/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.golden b/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.golden index 1dc12573c..fea668c1a 100644 --- a/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.golden +++ b/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.golden @@ -4,5 +4,4 @@ schema A: name: str = a.name A {} - # Break one blank line between different statements e.g., import, schema and expression statements. diff --git a/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.input b/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.input index 92b107a1e..60d9818b9 100644 --- a/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.input +++ b/kclvm/tools/src/format/test_data/format_data/different_stmts_line_breaks.input @@ -2,5 +2,4 @@ import a schema A: name: str = a.name A{} - # Break one blank line between different statements e.g., import, schema and expression statements. diff --git a/kclvm/tools/src/format/test_data/format_data/import.golden b/kclvm/tools/src/format/test_data/format_data/import.golden index 3b4302338..5a9a8ae8d 100644 --- a/kclvm/tools/src/format/test_data/format_data/import.golden +++ b/kclvm/tools/src/format/test_data/format_data/import.golden @@ -3,4 +3,5 @@ import b import c import d import e as e + a = 1 diff --git a/kclvm/tools/src/format/test_data/format_data/import_only.golden b/kclvm/tools/src/format/test_data/format_data/import_only.golden new file mode 100644 index 000000000..c2d4d9515 --- /dev/null +++ b/kclvm/tools/src/format/test_data/format_data/import_only.golden @@ -0,0 +1,2 @@ +import math +import abc diff --git a/kclvm/tools/src/format/test_data/format_data/import_only.input b/kclvm/tools/src/format/test_data/format_data/import_only.input new file mode 100644 index 000000000..598699503 --- /dev/null +++ b/kclvm/tools/src/format/test_data/format_data/import_only.input @@ -0,0 +1,2 @@ +import math +import abc \ No newline at end of file diff --git a/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.golden b/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.golden new file mode 100644 index 000000000..792e3ac36 --- /dev/null +++ b/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.golden @@ -0,0 +1,6 @@ +import a.b.c +import d + +schema A: + name: str + diff --git a/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.input b/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.input new file mode 100644 index 000000000..7d3da4d41 --- /dev/null +++ b/kclvm/tools/src/format/test_data/format_data/layout_import_stmt.input @@ -0,0 +1,4 @@ +import a.b.c +import d +schema A: + name: str \ No newline at end of file diff --git a/kclvm/tools/src/format/test_data/format_data/schema.golden b/kclvm/tools/src/format/test_data/format_data/schema.golden index 901994fb1..b28d44bcd 100644 --- a/kclvm/tools/src/format/test_data/format_data/schema.golden +++ b/kclvm/tools/src/format/test_data/format_data/schema.golden @@ -1,4 +1,5 @@ import math + mixin XXMixin: nameVar: str diff --git a/kclvm/tools/src/format/tests.rs b/kclvm/tools/src/format/tests.rs index 1acdebfc6..9694b2d0e 100644 --- a/kclvm/tools/src/format/tests.rs +++ b/kclvm/tools/src/format/tests.rs @@ -5,7 +5,7 @@ use walkdir::WalkDir; const FILE_INPUT_SUFFIX: &str = ".input"; const FILE_OUTPUT_SUFFIX: &str = ".golden"; -const TEST_CASES: &[&str; 19] = &[ +const TEST_CASES: &[&str; 22] = &[ "assert", "check", "blankline", @@ -16,6 +16,7 @@ const TEST_CASES: &[&str; 19] = &[ "comp_for", "empty", "import", + "import_only", "indent", "inline_comment", "lambda", @@ -25,7 +26,8 @@ const TEST_CASES: &[&str; 19] = &[ "type_alias", "unary", "union_types", - // "different_stmts_line_breaks", + "layout_import_stmt", + "different_stmts_line_breaks", // "list_dict_schema_expr", ]; From f8e7903788e11c4591d818de37a6eecf987eac5c Mon Sep 17 00:00:00 2001 From: "xiarui.xr" Date: Thu, 19 Oct 2023 11:15:08 +0800 Subject: [PATCH 2/2] fix test cases Signed-off-by: xiarui.xr --- kclvm/ast_pretty/src/test_data/codelayout.output | 1 + 1 file changed, 1 insertion(+) diff --git a/kclvm/ast_pretty/src/test_data/codelayout.output b/kclvm/ast_pretty/src/test_data/codelayout.output index d8253bd56..b0b658248 100644 --- a/kclvm/ast_pretty/src/test_data/codelayout.output +++ b/kclvm/ast_pretty/src/test_data/codelayout.output @@ -2,6 +2,7 @@ Module documents """ import math as alias_math + schema Person(Base): name: str age: int