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

Formatter: five cases where comments and doc comments are placed wrongly

Đã đóng
#9,107 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

Một pull request liên quan đã được merge.

  • #9119 của @cknitt — đã merge

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
ocaml
Lĩnh vực
compilers

Hướng nghiên cứu

Start with the formatter cases described in the issue and inspect parameters_should_hug in compiler/syntax/src/res_parsetree_viewer.ml for the first case. Reproduce each of the five examples and trace the comment handling and formatting paths involved. Done means all five format correctly and remain stable when formatted again, with case 4 preserving the AST; an open pull request is already linked.

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

Mô tả

Found by a bug hunt over the 16 commits from eb087382 to cd641cbc.

All five are stable when formatted again. The fourth changes the AST, and the others change only the layout.

  1. A doc comment on a single hugged parameter is printed with a line break and no indent:
    let f = (/** r */ {x, y}) => x prints as let f = (/** r */ followed by {x, y}) => x at column 0. The same happens for [a], (a, b) and (). parameters_should_hug checks the parameter's attrs but not pat.ppat_attributes, where the doc comment is stored. This input is accepted since #9055.
  2. A trailing line comment after a parenthesized switch/if operand moves into the block, followed by a blank line:
    switch (x) // c1 then { | 1 => 2 | _ => 3 } prints as switch x {, then // c1, a blank line and | 1 => 2. Without the parentheses (#9061) the comment stays with the operand.
  3. A comment before a list tail spread moves after the dots:
    list{1, /* c */ ...xs} prints as list{1, .../* c */ xs}. Arrays keep it in place.
  4. Doc comments are printed before an attribute that precedes them, which changes the attribute order in the AST:
    type u = /** d1 */ @a /** d2 */ {x: int} prints /** d1 */, /** d2 */, then @a type u = {x: int}.
  5. A file that contains only a line comment gets an extra trailing newline: // c\n formats as // c\n\n.

Cases 2, 3 and 5 reproduce at b123b7c3. That revision rejects the inputs of 1 and 4.

🤖 Generated with Claude Code

Ngôn ngữ chính
OCaml
Star
7.5k
Fork
484
Merge trung bình
21 giờ 9 phút
Pull request đã merge (30 ngày)
255

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.