From c72caa39e61e3b2eacf49e9fec87b0128d748418 Mon Sep 17 00:00:00 2001 From: myfreess Date: Wed, 30 Sep 2026 17:24:14 +0800 Subject: [PATCH 1/2] refactor: move untyped CST node package --- untyped_cst/README.mbt.md | 21 ++++++++----------- untyped_cst/internal/construction/moon.pkg | 2 +- .../internal/construction/pkg.generated.mbti | 2 +- untyped_cst/internal/lower/moon.pkg | 2 +- untyped_cst/internal/lower/pkg.generated.mbti | 2 +- untyped_cst/internal/parser/moon.pkg | 2 +- .../internal/parser/parserstate/moon.pkg | 2 +- .../parser/parserstate/pkg.generated.mbti | 2 +- .../internal/parser/pkg.generated.mbti | 2 +- untyped_cst/moon.pkg | 2 +- untyped_cst/{internal => }/node/api_test.mbt | 0 .../{internal => }/node/coloncolon_test.mbt | 0 .../{internal => }/node/constructors.mbt | 0 .../node/constructors_expr_type.mbt | 0 .../node/constructors_fields_values.mbt | 0 .../node/constructors_metadata_lists.mbt | 0 .../node/constructors_root_impl.mbt | 0 .../{internal => }/node/constructors_test.mbt | 0 .../node/constructors_token.mbt | 0 .../{internal => }/node/cst_debug_wbtest.mbt | 0 untyped_cst/{internal => }/node/imports.mbt | 0 untyped_cst/{internal => }/node/kind.mbt | 0 .../{internal => }/node/kind_wbtest.mbt | 0 untyped_cst/{internal => }/node/moon.pkg | 0 untyped_cst/{internal => }/node/node.mbt | 0 .../{internal => }/node/node_wbtest.mbt | 0 .../node/ordered_children_test.mbt | 0 untyped_cst/{internal => }/node/payload.mbt | 0 .../{internal => }/node/pkg.generated.mbti | 2 +- .../{internal => }/node/text_wbtest.mbt | 0 .../{internal => }/node/token_test.mbt | 0 untyped_cst/{internal => }/node/traversal.mbt | 0 untyped_cst/pkg.generated.mbti | 2 +- 33 files changed, 20 insertions(+), 23 deletions(-) rename untyped_cst/{internal => }/node/api_test.mbt (100%) rename untyped_cst/{internal => }/node/coloncolon_test.mbt (100%) rename untyped_cst/{internal => }/node/constructors.mbt (100%) rename untyped_cst/{internal => }/node/constructors_expr_type.mbt (100%) rename untyped_cst/{internal => }/node/constructors_fields_values.mbt (100%) rename untyped_cst/{internal => }/node/constructors_metadata_lists.mbt (100%) rename untyped_cst/{internal => }/node/constructors_root_impl.mbt (100%) rename untyped_cst/{internal => }/node/constructors_test.mbt (100%) rename untyped_cst/{internal => }/node/constructors_token.mbt (100%) rename untyped_cst/{internal => }/node/cst_debug_wbtest.mbt (100%) rename untyped_cst/{internal => }/node/imports.mbt (100%) rename untyped_cst/{internal => }/node/kind.mbt (100%) rename untyped_cst/{internal => }/node/kind_wbtest.mbt (100%) rename untyped_cst/{internal => }/node/moon.pkg (100%) rename untyped_cst/{internal => }/node/node.mbt (100%) rename untyped_cst/{internal => }/node/node_wbtest.mbt (100%) rename untyped_cst/{internal => }/node/ordered_children_test.mbt (100%) rename untyped_cst/{internal => }/node/payload.mbt (100%) rename untyped_cst/{internal => }/node/pkg.generated.mbti (99%) rename untyped_cst/{internal => }/node/text_wbtest.mbt (100%) rename untyped_cst/{internal => }/node/token_test.mbt (100%) rename untyped_cst/{internal => }/node/traversal.mbt (100%) diff --git a/untyped_cst/README.mbt.md b/untyped_cst/README.mbt.md index 8b8b5d603..e81eb8198 100644 --- a/untyped_cst/README.mbt.md +++ b/untyped_cst/README.mbt.md @@ -20,10 +20,8 @@ root kind returns a diagnostic. ## Node Model The source-independent node model lives in -`moonbitlang/parser/untyped_cst/internal/node`. MoonBit restricts imports of -this package to `untyped_cst` and its subpackages. Code within that subtree can -use `CstNode`, `NodeKind`, `NodePayload`, and the node traversal, payload, and -classification helpers. +`moonbitlang/parser/untyped_cst/node`. Code can use `CstNode`, `NodeKind`, +`NodePayload`, and the node traversal, payload, and classification helpers. `NodeKind` is public but read-only outside the node package. Inspect it with pattern matching or its classification methods. Construct nodes with the @@ -64,19 +62,18 @@ Nodes retain `loc` and `source_span`; there are no additional location children. AST locations are computed during lowering from tokens and syntax boundaries, without reading source text or re-parsing it. -The `untyped_cst` package re-exports the three node types for in-subtree code. -MoonBit's internal visibility rules prevent outside packages from inspecting -or constructing these types through the re-exports. Outside callers can use -`ParseResult::diagnostics_view`, `ParseResult::to_impls`, and -`ParseResult::to_expr`. +The `untyped_cst` package re-exports the three node types. Callers that need +constructors or helpers can import `untyped_cst/node` directly; callers that +only parse and lower source can use `ParseResult::diagnostics_view`, +`ParseResult::to_impls`, and `ParseResult::to_expr` from `untyped_cst`. ## Package Organization `untyped_cst` owns the public parsing entry points and `ParseResult`, including -its AST conversion methods. Implementation details live in four internal -packages: +its AST conversion methods. The node model is a public subpackage, while the +remaining implementation details live in three internal packages: -- `internal/node` defines CST nodes and their constructors and helpers. +- `node` defines CST nodes and their constructors and helpers. - `internal/construction` builds CST nodes and their semantic children. - `internal/parser` handles token streams, parsing, and error recovery. - `internal/lower` converts CST nodes to the syntax AST and attaches docstrings. diff --git a/untyped_cst/internal/construction/moon.pkg b/untyped_cst/internal/construction/moon.pkg index 24a2cd08e..2507d18b6 100644 --- a/untyped_cst/internal/construction/moon.pkg +++ b/untyped_cst/internal/construction/moon.pkg @@ -1,7 +1,7 @@ import { "moonbitlang/lexer/tokens", "moonbitlang/lexer/basic", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", "moonbitlang/parser/syntax", } diff --git a/untyped_cst/internal/construction/pkg.generated.mbti b/untyped_cst/internal/construction/pkg.generated.mbti index f706c8713..e1849a638 100644 --- a/untyped_cst/internal/construction/pkg.generated.mbti +++ b/untyped_cst/internal/construction/pkg.generated.mbti @@ -4,7 +4,7 @@ package "moonbitlang/parser/untyped_cst/internal/construction" import { "moonbitlang/lexer/basic", "moonbitlang/lexer/tokens", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", } // Values diff --git a/untyped_cst/internal/lower/moon.pkg b/untyped_cst/internal/lower/moon.pkg index 98aa752ff..6fc25347f 100644 --- a/untyped_cst/internal/lower/moon.pkg +++ b/untyped_cst/internal/lower/moon.pkg @@ -1,7 +1,7 @@ import { "moonbitlang/lexer/tokens", "moonbitlang/lexer/basic", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", "moonbitlang/parser/syntax", "moonbitlang/parser/attribute", "moonbitlang/core/list", diff --git a/untyped_cst/internal/lower/pkg.generated.mbti b/untyped_cst/internal/lower/pkg.generated.mbti index 91c839d8c..4176251ac 100644 --- a/untyped_cst/internal/lower/pkg.generated.mbti +++ b/untyped_cst/internal/lower/pkg.generated.mbti @@ -6,7 +6,7 @@ import { "moonbitlang/lexer/basic", "moonbitlang/lexer/tokens", "moonbitlang/parser/syntax", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", } // Values diff --git a/untyped_cst/internal/parser/moon.pkg b/untyped_cst/internal/parser/moon.pkg index 6eacb5fcb..f3bde9488 100644 --- a/untyped_cst/internal/parser/moon.pkg +++ b/untyped_cst/internal/parser/moon.pkg @@ -2,7 +2,7 @@ import { "moonbitlang/lexer", "moonbitlang/lexer/tokens", "moonbitlang/lexer/basic", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", "moonbitlang/parser/untyped_cst/internal/construction", "moonbitlang/parser/untyped_cst/internal/parser/parserstate", "moonbitlang/core/list", diff --git a/untyped_cst/internal/parser/parserstate/moon.pkg b/untyped_cst/internal/parser/parserstate/moon.pkg index c21431ad8..a899bbead 100644 --- a/untyped_cst/internal/parser/parserstate/moon.pkg +++ b/untyped_cst/internal/parser/parserstate/moon.pkg @@ -1,7 +1,7 @@ import { "moonbitlang/lexer/tokens", "moonbitlang/lexer/basic", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", "moonbitlang/parser/untyped_cst/internal/construction", } diff --git a/untyped_cst/internal/parser/parserstate/pkg.generated.mbti b/untyped_cst/internal/parser/parserstate/pkg.generated.mbti index df4f47c45..a5b7a7356 100644 --- a/untyped_cst/internal/parser/parserstate/pkg.generated.mbti +++ b/untyped_cst/internal/parser/parserstate/pkg.generated.mbti @@ -4,7 +4,7 @@ package "moonbitlang/parser/untyped_cst/internal/parser/parserstate" import { "moonbitlang/lexer/basic", "moonbitlang/lexer/tokens", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", } // Values diff --git a/untyped_cst/internal/parser/pkg.generated.mbti b/untyped_cst/internal/parser/pkg.generated.mbti index 34f053d24..880f0fb83 100644 --- a/untyped_cst/internal/parser/pkg.generated.mbti +++ b/untyped_cst/internal/parser/pkg.generated.mbti @@ -5,7 +5,7 @@ import { "moonbitlang/core/list", "moonbitlang/lexer/basic", "moonbitlang/lexer/tokens", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", } // Values diff --git a/untyped_cst/moon.pkg b/untyped_cst/moon.pkg index a53beb029..423de6ccf 100644 --- a/untyped_cst/moon.pkg +++ b/untyped_cst/moon.pkg @@ -1,7 +1,7 @@ import { "moonbitlang/lexer/tokens", "moonbitlang/lexer/basic", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", "moonbitlang/parser/untyped_cst/internal/parser" @cst_parser, "moonbitlang/parser/untyped_cst/internal/lower", "moonbitlang/parser/syntax", diff --git a/untyped_cst/internal/node/api_test.mbt b/untyped_cst/node/api_test.mbt similarity index 100% rename from untyped_cst/internal/node/api_test.mbt rename to untyped_cst/node/api_test.mbt diff --git a/untyped_cst/internal/node/coloncolon_test.mbt b/untyped_cst/node/coloncolon_test.mbt similarity index 100% rename from untyped_cst/internal/node/coloncolon_test.mbt rename to untyped_cst/node/coloncolon_test.mbt diff --git a/untyped_cst/internal/node/constructors.mbt b/untyped_cst/node/constructors.mbt similarity index 100% rename from untyped_cst/internal/node/constructors.mbt rename to untyped_cst/node/constructors.mbt diff --git a/untyped_cst/internal/node/constructors_expr_type.mbt b/untyped_cst/node/constructors_expr_type.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_expr_type.mbt rename to untyped_cst/node/constructors_expr_type.mbt diff --git a/untyped_cst/internal/node/constructors_fields_values.mbt b/untyped_cst/node/constructors_fields_values.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_fields_values.mbt rename to untyped_cst/node/constructors_fields_values.mbt diff --git a/untyped_cst/internal/node/constructors_metadata_lists.mbt b/untyped_cst/node/constructors_metadata_lists.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_metadata_lists.mbt rename to untyped_cst/node/constructors_metadata_lists.mbt diff --git a/untyped_cst/internal/node/constructors_root_impl.mbt b/untyped_cst/node/constructors_root_impl.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_root_impl.mbt rename to untyped_cst/node/constructors_root_impl.mbt diff --git a/untyped_cst/internal/node/constructors_test.mbt b/untyped_cst/node/constructors_test.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_test.mbt rename to untyped_cst/node/constructors_test.mbt diff --git a/untyped_cst/internal/node/constructors_token.mbt b/untyped_cst/node/constructors_token.mbt similarity index 100% rename from untyped_cst/internal/node/constructors_token.mbt rename to untyped_cst/node/constructors_token.mbt diff --git a/untyped_cst/internal/node/cst_debug_wbtest.mbt b/untyped_cst/node/cst_debug_wbtest.mbt similarity index 100% rename from untyped_cst/internal/node/cst_debug_wbtest.mbt rename to untyped_cst/node/cst_debug_wbtest.mbt diff --git a/untyped_cst/internal/node/imports.mbt b/untyped_cst/node/imports.mbt similarity index 100% rename from untyped_cst/internal/node/imports.mbt rename to untyped_cst/node/imports.mbt diff --git a/untyped_cst/internal/node/kind.mbt b/untyped_cst/node/kind.mbt similarity index 100% rename from untyped_cst/internal/node/kind.mbt rename to untyped_cst/node/kind.mbt diff --git a/untyped_cst/internal/node/kind_wbtest.mbt b/untyped_cst/node/kind_wbtest.mbt similarity index 100% rename from untyped_cst/internal/node/kind_wbtest.mbt rename to untyped_cst/node/kind_wbtest.mbt diff --git a/untyped_cst/internal/node/moon.pkg b/untyped_cst/node/moon.pkg similarity index 100% rename from untyped_cst/internal/node/moon.pkg rename to untyped_cst/node/moon.pkg diff --git a/untyped_cst/internal/node/node.mbt b/untyped_cst/node/node.mbt similarity index 100% rename from untyped_cst/internal/node/node.mbt rename to untyped_cst/node/node.mbt diff --git a/untyped_cst/internal/node/node_wbtest.mbt b/untyped_cst/node/node_wbtest.mbt similarity index 100% rename from untyped_cst/internal/node/node_wbtest.mbt rename to untyped_cst/node/node_wbtest.mbt diff --git a/untyped_cst/internal/node/ordered_children_test.mbt b/untyped_cst/node/ordered_children_test.mbt similarity index 100% rename from untyped_cst/internal/node/ordered_children_test.mbt rename to untyped_cst/node/ordered_children_test.mbt diff --git a/untyped_cst/internal/node/payload.mbt b/untyped_cst/node/payload.mbt similarity index 100% rename from untyped_cst/internal/node/payload.mbt rename to untyped_cst/node/payload.mbt diff --git a/untyped_cst/internal/node/pkg.generated.mbti b/untyped_cst/node/pkg.generated.mbti similarity index 99% rename from untyped_cst/internal/node/pkg.generated.mbti rename to untyped_cst/node/pkg.generated.mbti index 50a55ea53..5916c0115 100644 --- a/untyped_cst/internal/node/pkg.generated.mbti +++ b/untyped_cst/node/pkg.generated.mbti @@ -1,5 +1,5 @@ // Generated using `moon info`, DON'T EDIT IT -package "moonbitlang/parser/untyped_cst/internal/node" +package "moonbitlang/parser/untyped_cst/node" import { "moonbitlang/core/debug", diff --git a/untyped_cst/internal/node/text_wbtest.mbt b/untyped_cst/node/text_wbtest.mbt similarity index 100% rename from untyped_cst/internal/node/text_wbtest.mbt rename to untyped_cst/node/text_wbtest.mbt diff --git a/untyped_cst/internal/node/token_test.mbt b/untyped_cst/node/token_test.mbt similarity index 100% rename from untyped_cst/internal/node/token_test.mbt rename to untyped_cst/node/token_test.mbt diff --git a/untyped_cst/internal/node/traversal.mbt b/untyped_cst/node/traversal.mbt similarity index 100% rename from untyped_cst/internal/node/traversal.mbt rename to untyped_cst/node/traversal.mbt diff --git a/untyped_cst/pkg.generated.mbti b/untyped_cst/pkg.generated.mbti index d40685fcd..51fda7972 100644 --- a/untyped_cst/pkg.generated.mbti +++ b/untyped_cst/pkg.generated.mbti @@ -7,7 +7,7 @@ import { "moonbitlang/lexer/basic", "moonbitlang/lexer/tokens", "moonbitlang/parser/syntax", - "moonbitlang/parser/untyped_cst/internal/node", + "moonbitlang/parser/untyped_cst/node", } // Values From 32cd232bae985dd06049ba947947da4b34e67772 Mon Sep 17 00:00:00 2001 From: myfreess Date: Wed, 30 Sep 2026 17:31:42 +0800 Subject: [PATCH 2/2] chore: bump module versions --- lexer/moon.mod | 2 +- moon.mod | 6 +++--- moon_config/moon.mod | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lexer/moon.mod b/lexer/moon.mod index b172f61f8..2a1d70d6d 100644 --- a/lexer/moon.mod +++ b/lexer/moon.mod @@ -1,6 +1,6 @@ name = "moonbitlang/lexer" -version = "0.4.1" +version = "0.4.2" repository = "https://github.com/moonbitlang/parser" diff --git a/moon.mod b/moon.mod index f89901e20..ff26dc25a 100644 --- a/moon.mod +++ b/moon.mod @@ -1,11 +1,11 @@ name = "moonbitlang/parser" -version = "0.4.2" +version = "0.4.3" import { "moonbitlang/x@0.5.1", - "moonbitlang/lexer@0.4.1", - "moonbitlang/moon_config@0.4.1", + "moonbitlang/lexer@0.4.2", + "moonbitlang/moon_config@0.4.2", "moonbitlang/async@0.22.4", "moonbit-community/prettyprinter@0.4.10", } diff --git a/moon_config/moon.mod b/moon_config/moon.mod index da9bae651..05003c5cc 100644 --- a/moon_config/moon.mod +++ b/moon_config/moon.mod @@ -1,9 +1,9 @@ name = "moonbitlang/moon_config" -version = "0.4.1" +version = "0.4.2" import { - "moonbitlang/lexer@0.4.1", + "moonbitlang/lexer@0.4.2", } repository = "https://github.com/moonbitlang/parser"