Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Consolidate the parsetree printers

Đang mở
#8,798 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
ocaml
Lĩnh vực
compilers

Hướng nghiên cứu

Start with compiler/ml/printast.ml, compiler/syntax/src/res_ast_debugger.ml, compiler/ml/pprintast.ml, and the roundtrip test in scripts/test_syntax.sh. Trace the printer call sites and parser fixture snapshots named in the issue, then check how bsc -dsource handles PPX and builtin rewrites. Done means removing the redundant printers and comparisons while keeping the listed print modes, fixtures, and tests working.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

The compiler has three printers for the parsetree, and each one matches over every node. Every new node (recently Pexp_dict, Ppat_dict, Pexp_ternary, Pmod_await, Ppat_variant_spread) has to be added to all three, on top of the parsetree, the v0 mappers and the formatter.

Printer Size Output Used by
compiler/ml/printast.ml 827 lines tree with source locations bsc -dparsetree, res_parser -print ast, the playground's parsetree view, ounit_parser_recovery_tests
Sexp_ast in compiler/syntax/src/res_ast_debugger.ml ~1,040 lines S-expression without locations, except the offsets of explicit braces (see below) res_parser -print sexp, used by the formatter roundtrip test
compiler/ml/pprintast.ml 1,471 lines OCaml syntax res_parser -print ml (expected output for the parser fixtures in tests/syntax_tests/data/parsing), bsc -dsource, a few ounit tests

Sexp_ast is redundant. The roundtrip test in scripts/test_syntax.sh formats a file twice and checks two things:

  • the two formatted texts are equal;
  • the ASTs parsed from them are equal (as sexp).

The parser is deterministic, so the AST check holds whenever the text check does. The original file's AST can't usefully be compared with the formatted one, because the formatter changes the AST on purpose, e.g. it removes braces in switch cases.

Sexp_ast prints no locations, with one exception: since #8678 it prints the character offsets of explicit braces (braces_loc of Pexp_braces). That was not intended and nothing depends on it. It should not be carried into any other printer or test.

Pprintast is a leftover from OCaml. ReScript has no other use for printing its AST as OCaml code.

Proposal

  1. Remove Sexp_ast, -print sexp and the redundant AST comparison from the roundtrip test.
  2. Snapshot the parser fixtures with Printast instead of -print ml.
  3. Make bsc -dsource print the parsetree after PPX and builtin rewrites with the ReScript printer instead of OCaml syntax.
  4. Move Pprintast.string_of_int_as_char (used by printlambda.ml and parmatch.ml), then remove Pprintast and res_driver_ml_printer.ml.

That removes about 2,500 lines, and new parsetree nodes need one printer case instead of three. -print comments and -print doc in res_ast_debugger.ml, Printtyped and Printlambda are not affected.

Compatibility: res_parser isn't shipped in the npm packages, so -print sexp and -print ml are internal. bsc -dsource is a debugging flag. Its output switches from OCaml-like to ReScript syntax.

Ngôn ngữ chính
ReScript
Star
7.5k
Fork
483
Merge trung bình
1 ngày 4 giờ
Pull request đã merge (30 ngày)
130

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của rescript-lang/rescript

Tất cả issue của rescript-lang/rescript

Issue tương tự

Thêm issue về Compilers

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.