From 6dc5dbc1185a7b7947dcafc1e322c4599cddfb78 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Wed, 28 Apr 2021 03:26:44 +0200 Subject: [PATCH] Complete complex patterns with variants and poly variants. And add a convoluted example of binding via variants. --- analysis/src/ProcessCmt.ml | 8 +++---- analysis/tests/src/Patterns.res | 24 +++++++++++--------- analysis/tests/src/expected/Patterns.res.txt | 14 ++++++------ 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/analysis/src/ProcessCmt.ml b/analysis/src/ProcessCmt.ml index d88580508..d840632a5 100644 --- a/analysis/src/ProcessCmt.ml +++ b/analysis/src/ProcessCmt.ml @@ -322,16 +322,14 @@ let rec forItem ~env ~(exported : exported) item = env.stamps.values in declareds := {declared with item = MValue declared.item} :: !declareds - | Tpat_tuple pats | Tpat_array pats -> + | Tpat_tuple pats | Tpat_array pats | Tpat_construct (_, _, pats) -> pats |> List.iter (fun p -> handlePattern [] p) | Tpat_or (p, _, _) -> handlePattern [] p | Tpat_record (items, _) -> items |> List.iter (fun (_, _, p) -> handlePattern [] p) | Tpat_lazy p -> handlePattern [] p - | Tpat_any | Tpat_constant _ - | Tpat_construct (_, _, _) - | Tpat_variant (_, _, _) -> - () + | Tpat_variant (_, Some p, _) -> handlePattern [] p + | Tpat_variant (_, None, _) | Tpat_any | Tpat_constant _ -> () in List.iter (fun {vb_pat; vb_attributes} -> handlePattern vb_attributes vb_pat) diff --git a/analysis/tests/src/Patterns.res b/analysis/tests/src/Patterns.res index d61c19adc..94f40b850 100644 --- a/analysis/tests/src/Patterns.res +++ b/analysis/tests/src/Patterns.res @@ -3,15 +3,17 @@ module A = { let (xxx, yyy) = makeX() - type t = {name:string, age:int} - - let makeT = () => {name:"", age:0} + type t = {name: string, age: int} + + let makeT = () => {name: "", age: 0} let {name, age} = makeT() let (a | a, b) = makeX() - let [v1,v2,v3] = [1,2,3] + type rec arr = A(array) + + let A([v1, _, _]) | _ as v1 = assert false let lazy lazyy = lazy 3 } @@ -21,14 +23,14 @@ let y = A.xxx let z = A.yyy -let n = A.name +let n1 = A.name // ^def -let n = A.a -// ^def +let n2 = A.a +// ^def -let n = A.v1 -// ^def +let n3 = A.v1 +// ^def -let n = A.lazyy -// ^def +let n4 = A.lazyy +// ^def diff --git a/analysis/tests/src/expected/Patterns.res.txt b/analysis/tests/src/expected/Patterns.res.txt index f827f2d83..e0e13a62b 100644 --- a/analysis/tests/src/expected/Patterns.res.txt +++ b/analysis/tests/src/expected/Patterns.res.txt @@ -1,15 +1,15 @@ -Definition tests/src/Patterns.res 18:10 +Definition tests/src/Patterns.res 20:10 {"uri": "Patterns.res", "range": {"start": {"line": 3, "character": 7}, "end": {"line": 3, "character": 10}}} -Definition tests/src/Patterns.res 23:11 +Definition tests/src/Patterns.res 25:11 {"uri": "Patterns.res", "range": {"start": {"line": 9, "character": 7}, "end": {"line": 9, "character": 11}}} -Definition tests/src/Patterns.res 26:10 +Definition tests/src/Patterns.res 28:11 {"uri": "Patterns.res", "range": {"start": {"line": 11, "character": 7}, "end": {"line": 11, "character": 8}}} -Definition tests/src/Patterns.res 29:10 -{"uri": "Patterns.res", "range": {"start": {"line": 13, "character": 7}, "end": {"line": 13, "character": 9}}} +Definition tests/src/Patterns.res 31:11 +{"uri": "Patterns.res", "range": {"start": {"line": 15, "character": 9}, "end": {"line": 15, "character": 11}}} -Definition tests/src/Patterns.res 32:10 -{"uri": "Patterns.res", "range": {"start": {"line": 15, "character": 11}, "end": {"line": 15, "character": 16}}} +Definition tests/src/Patterns.res 34:11 +{"uri": "Patterns.res", "range": {"start": {"line": 17, "character": 11}, "end": {"line": 17, "character": 16}}}