rescript-lang / rescript-lang/rescript

broken @as in external does weird things

Open
#7,948 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
OCaml
Stars
7.5k
Forks
485
Avg merge
1d 2h
Merged PRs (30d)
55

Description

i just inlined a small binding in a file:

module Node = {
  module Fs = {
    @module("node:fs") external existsSync: string => bool = "existsSync"
    @module("node:fs")
    external readFileSync: (string, @as(json`"utf8`) _) => string = "readFileSync"
  }
}

i missed the closing " after utf8. having format on save, the formatter did a weird change:

    external readFileSync: ((string, @as(json`"utf8`) _)) => string = "readFileSync"

it added a double set of parens. this is a really edge case scenario so you may throw this in the trash if you like

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the formatter behavior with the external binding and malformed @as(json"utf8) snippet shown in the issue. Trace the formatter handling for external declarations and @as syntax; done means formatting this input no longer adds the extra pair of parentheses.

Written by the indexing model from the issue text.

Assessment

Tech stack
ocaml
Domain
compilers, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.