Record written arrow arity before external lowering - #8563
Conversation
External arrow parsing used to subtract labelled phantom @as(...) _ parameters from the head arity, while the printer added them back. No downstream consumer needs that parser-level encoding: external lowering removes phantom parameters and rebuilds the type with the effective call arity. Record the written parameter count in the parsetree instead and remove the parser and printer compensation. Also assign arity 1 to bare labelled arrow types so they agree with their parenthesized spelling. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com>
86a3008 to
e45b706
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e45b706218
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| arrow, exactly like its parenthesized form [(~x: t) => u]; it must | ||
| carry the same arity or the two spellings produce types that print | ||
| identically but do not unify. *) | ||
| Ast_helper.Typ.arrow ~loc ~arity:(Some 1) {attrs; lbl; typ} return_type |
There was a problem hiding this comment.
Add behavioral coverage for labeled-arrow unification
Add a lambda/end-to-end regression that typechecks or calls through equivalent ~x: int => string and (~x: int) => string annotations. The changed snapshots only verify the parsed arity metadata, so the user-facing claim that these spellings now unify could regress in later compiler layers while every added test continues to pass; repository guidance explicitly requires syntax, lambda, and end-to-end coverage for compiler changes.
AGENTS.md reference: AGENTS.md:L39-L41
Useful? React with 👍 / 👎.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## codex/harden-parsetree0-bridge #8563 +/- ##
==================================================================
- Coverage 75.59% 75.58% -0.01%
==================================================================
Files 476 476
Lines 62759 62745 -14
==================================================================
- Hits 47443 47428 -15
- Misses 15316 15317 +1
🚀 New features to boost your workflow:
|
rescript
@rescript/darwin-arm64
@rescript/darwin-x64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
Summary
@as(...) _parameters on externalsRationale
External lowering already removes phantom parameters and rebuilds the function type with its effective call arity. Encoding that lowered arity in the parser made the surface parsetree context-dependent and required the printer to reverse the adjustment. Keeping the written arity makes the parser representation consistent while preserving generated JavaScript.
Bare labeled arrow types previously printed like their parenthesized equivalent but carried different arity metadata and therefore did not unify with it.
Validation
make test-syntaxmake test