Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit e52a0c8

Browse files
author
Iwan
committed
Improve generated AST in the case of a missing tilde in an arrow expression.
`let f = (x, y=2, z) => x + y + z` should be parsed with the AST of `let f = (x, ~y=2, z) => x + y + z`
1 parent a0d7689 commit e52a0c8

File tree

2 files changed

+7
-13
lines changed

2 files changed

+7
-13
lines changed

src/res_core.ml

+6-12
Original file line numberDiff line numberDiff line change
@@ -1600,10 +1600,6 @@ and parseParameter p =
16001600
let lidents = parseLidentList p in
16011601
Some (TypeParameter {uncurried; attrs; locs = lidents; pos = startPos})
16021602
) else (
1603-
let hasTilde = match p.token with
1604-
| Tilde -> true
1605-
| _ -> false
1606-
in
16071603
let (attrs, lbl, pat) = match p.Parser.token with
16081604
| Tilde ->
16091605
Parser.next p;
@@ -1650,16 +1646,14 @@ and parseParameter p =
16501646
in
16511647
match p.Parser.token with
16521648
| Equal ->
1653-
if not hasTilde then (
1654-
let msg = match pat.ppat_desc with
1655-
| Ppat_var var -> ErrorMessages.missingTildeLabeledParameter var.txt
1656-
| _ -> ErrorMessages.missingTildeLabeledParameter ""
1657-
in
1658-
Parser.err ~startPos p (Diagnostics.message msg)
1659-
);
16601649
Parser.next p;
16611650
let lbl = match lbl with
1662-
| Asttypes.Labelled lblName ->
1651+
| Asttypes.Labelled lblName -> Asttypes.Optional lblName
1652+
| Asttypes.Nolabel ->
1653+
let lblName = match pat.ppat_desc with | Ppat_var var -> var.txt | _ -> "" in
1654+
Parser.err ~startPos ~endPos:p.prevEndPos p (
1655+
Diagnostics.message (ErrorMessages.missingTildeLabeledParameter lblName)
1656+
);
16631657
Asttypes.Optional lblName
16641658
| lbl -> lbl
16651659
in

tests/parsing/errors/other/__snapshots__/parse.spec.js.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ module M = struct ;;match l with | None -> [] | Some l -> l ## prop end
3737

3838
exports[`labelledParameters.res 1`] = `
3939
"=====Parsetree==========================================
40-
let f x y z = (x + y) + z
40+
let f x ?(y= 2) z = (x + y) + z
4141
type nonrec f = x:int -> y:int -> int
4242
=====Errors=============================================
4343

0 commit comments

Comments
 (0)