@@ -319,13 +319,36 @@ let completionWithParser ~debug ~path ~posCursor ~currentFile ~text =
319
319
scope :=
320
320
! scope |> Scope. addValue ~name: vd.pval_name.txt ~loc: vd.pval_name.loc
321
321
in
322
+ let rec scopePattern (pat : Parsetree.pattern ) =
323
+ match pat.ppat_desc with
324
+ | Ppat_any -> ()
325
+ | Ppat_var {txt; loc} -> scope := ! scope |> Scope. addValue ~name: txt ~loc
326
+ | Ppat_alias (p , asA ) ->
327
+ scopePattern p;
328
+ scope := ! scope |> Scope. addValue ~name: asA.txt ~loc: asA.loc
329
+ | Ppat_constant _ | Ppat_interval _ -> ()
330
+ | Ppat_tuple pl -> pl |> List. iter scopePattern
331
+ | Ppat_construct (_ , None) -> ()
332
+ | Ppat_construct (_ , Some p ) -> scopePattern p
333
+ | Ppat_variant (_ , None) -> ()
334
+ | Ppat_variant (_ , Some p ) -> scopePattern p
335
+ | Ppat_record (fields , _ ) ->
336
+ fields |> List. iter (fun (_ , p ) -> scopePattern p)
337
+ | Ppat_array pl -> pl |> List. iter scopePattern
338
+ | Ppat_or (p1 , _ ) -> scopePattern p1
339
+ | Ppat_constraint (p , _ ) -> scopePattern p
340
+ | Ppat_type _ -> ()
341
+ | Ppat_lazy p -> scopePattern p
342
+ | Ppat_unpack {txt; loc} -> scope := ! scope |> Scope. addValue ~name: txt ~loc
343
+ | Ppat_exception p -> scopePattern p
344
+ | Ppat_extension _ -> ()
345
+ | Ppat_open (_ , p ) -> scopePattern p
346
+ in
347
+
322
348
let scopeValueBinding (vb : Parsetree.value_binding ) =
323
- match vb.pvb_pat.ppat_desc with
324
- | Ppat_var {txt; loc}
325
- | Ppat_constraint ({ppat_desc = Ppat_var {txt; loc} } , _ ) ->
326
- scope := ! scope |> Scope. addValue ~name: txt ~loc
327
- | _ -> ()
349
+ scopePattern vb.pvb_pat
328
350
in
351
+
329
352
let scopeTypeKind (tk : Parsetree.type_kind ) =
330
353
match tk with
331
354
| Ptype_variant constrDecls ->
@@ -355,6 +378,12 @@ let completionWithParser ~debug ~path ~posCursor ~currentFile ~text =
355
378
! scope |> Scope. addModule ~name: md.pmd_name.txt ~loc: md.pmd_name.loc
356
379
in
357
380
381
+ let case (iterator : Ast_iterator.iterator ) (case : Parsetree.case ) =
382
+ let oldScope = ! scope in
383
+ scopePattern case.pc_lhs;
384
+ Ast_iterator. default_iterator.case iterator case;
385
+ scope := oldScope
386
+ in
358
387
let structure (iterator : Ast_iterator.iterator )
359
388
(structure : Parsetree.structure ) =
360
389
let oldScope = ! scope in
@@ -713,6 +742,7 @@ let completionWithParser ~debug ~path ~posCursor ~currentFile ~text =
713
742
{
714
743
Ast_iterator. default_iterator with
715
744
attribute;
745
+ case;
716
746
expr;
717
747
module_expr;
718
748
module_type;
0 commit comments