Skip to content

Commit 2470901

Browse files
committed
refactor completion functions
1 parent ed392ac commit 2470901

File tree

1 file changed

+57
-65
lines changed

1 file changed

+57
-65
lines changed

analysis/src/NewCompletions.ml

Lines changed: 57 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,23 @@ let resolveOpens ~env ~previous opens ~package =
496496
(* loop(previous) *)
497497
previous opens
498498

499+
type kind =
500+
| Module of moduleKind
501+
| Value of Types.type_expr
502+
| Type of Type.t
503+
| Constructor of constructor * Type.t declared
504+
| Field of field * Type.t declared
505+
| FileModule of string
506+
507+
let kindToInt kind =
508+
match kind with
509+
| Module _ -> 9
510+
| FileModule _ -> 9
511+
| Constructor (_, _) -> 4
512+
| Field (_, _) -> 5
513+
| Type _ -> 22
514+
| Value _ -> 12
515+
499516
let completionForDeclareds ~pos declareds prefix transformContents =
500517
(* Log.log("completion for declares " ++ prefix); *)
501518
Hashtbl.fold
@@ -521,33 +538,47 @@ let completionForExporteds exporteds
521538
else results)
522539
exporteds []
523540

524-
let completionForConstructors exportedTypes
525-
(stamps : (int, SharedTypes.Type.t SharedTypes.declared) Hashtbl.t) prefix =
541+
let completionForExportedsModules ~env ~suffix =
542+
completionForExporteds env.QueryEnv.exported.modules env.file.stamps.modules
543+
suffix (fun m -> Module m)
544+
545+
let completionForExportedsValues ~env ~suffix =
546+
completionForExporteds env.QueryEnv.exported.values env.file.stamps.values
547+
suffix (fun v -> Value v)
548+
549+
let completionForExportedsTypes ~env ~suffix =
550+
completionForExporteds env.QueryEnv.exported.types env.file.stamps.types
551+
suffix (fun t -> Type t)
552+
553+
let completionForConstructors ~(env : QueryEnv.t) ~suffix =
526554
Hashtbl.fold
527555
(fun _name stamp results ->
528-
let t = Hashtbl.find stamps stamp in
556+
let t = Hashtbl.find env.file.stamps.types stamp in
529557
match t.item.kind with
530558
| SharedTypes.Type.Variant constructors ->
531559
(constructors
532-
|> List.filter (fun c -> Utils.startsWith c.cname.txt prefix)
560+
|> List.filter (fun c -> Utils.startsWith c.cname.txt suffix)
533561
|> List.map (fun c -> (c, t)))
534562
@ results
535563
| _ -> results)
536-
exportedTypes []
564+
env.exported.types []
565+
|> List.map (fun (c, t) ->
566+
{(emptyDeclared c.cname.txt) with item = Constructor (c, t)})
537567

538-
let completionForFields exportedTypes
539-
(stamps : (int, SharedTypes.Type.t SharedTypes.declared) Hashtbl.t) prefix =
568+
let completionForFields ~(env : QueryEnv.t) ~suffix =
540569
Hashtbl.fold
541570
(fun _name stamp results ->
542-
let t = Hashtbl.find stamps stamp in
571+
let t = Hashtbl.find env.file.stamps.types stamp in
543572
match t.item.kind with
544573
| Record fields ->
545574
(fields
546-
|> List.filter (fun f -> Utils.startsWith f.fname.txt prefix)
575+
|> List.filter (fun f -> Utils.startsWith f.fname.txt suffix)
547576
|> List.map (fun f -> (f, t)))
548577
@ results
549578
| _ -> results)
550-
exportedTypes []
579+
env.exported.types []
580+
|> List.map (fun (f, t) ->
581+
{(emptyDeclared f.fname.txt) with item = Field (f, t)})
551582

552583
let isCapitalized name =
553584
if name = "" then false
@@ -626,23 +657,6 @@ let getEnvWithOpens ~pos ~(env : QueryEnv.t) ~package ~(opens : QueryEnv.t list)
626657
in
627658
loop opens
628659

629-
type kind =
630-
| Module of moduleKind
631-
| Value of Types.type_expr
632-
| Type of Type.t
633-
| Constructor of constructor * Type.t declared
634-
| Field of field * Type.t declared
635-
| FileModule of string
636-
637-
let kindToInt kind =
638-
match kind with
639-
| Module _ -> 9
640-
| FileModule _ -> 9
641-
| Constructor (_, _) -> 4
642-
| Field (_, _) -> 5
643-
| Type _ -> 22
644-
| Value _ -> 12
645-
646660
let detail name contents =
647661
match contents with
648662
| Type {decl} -> decl |> Shared.declToString name
@@ -657,19 +671,18 @@ let detail name contents =
657671
| Constructor (c, t) ->
658672
showConstructor c ^ "\n\n" ^ (t.item.decl |> Shared.declToString t.name.txt)
659673

674+
let completionForDeclaredsModules ~pos ~env ~suffix =
675+
completionForDeclareds ~pos env.QueryEnv.file.stamps.modules suffix (fun m ->
676+
Module m)
677+
660678
let localValueCompletions ~pos ~(env : QueryEnv.t) suffix =
661679
let results = [] in
662680
Log.log "---------------- LOCAL VAL";
663681
let results =
664682
if suffix = "" || isCapitalized suffix then
665683
results
666-
@ completionForDeclareds ~pos env.file.stamps.modules suffix (fun m ->
667-
Module m)
668-
@ (completionForConstructors env.exported.types env.file.stamps.types
669-
(* TODO declared thingsz *)
670-
suffix
671-
|> List.map (fun (c, t) ->
672-
{(emptyDeclared c.cname.txt) with item = Constructor (c, t)}))
684+
@ completionForDeclaredsModules ~pos ~env ~suffix
685+
@ completionForConstructors ~env ~suffix
673686
else results
674687
in
675688
let results =
@@ -679,9 +692,7 @@ let localValueCompletions ~pos ~(env : QueryEnv.t) suffix =
679692
Value v)
680693
@ completionForDeclareds ~pos env.file.stamps.types suffix (fun t ->
681694
Type t)
682-
@ (completionForFields env.exported.types env.file.stamps.types suffix
683-
|> List.map (fun (f, t) ->
684-
{(emptyDeclared f.fname.txt) with item = Field (f, t)}))
695+
@ completionForFields ~env ~suffix
685696
else results
686697
in
687698
results |> List.map (fun r -> (r, env))
@@ -695,31 +706,18 @@ let valueCompletions ~(env : QueryEnv.t) suffix =
695706
env.exported.modules
696707
|> Hashtbl.filter_map_inplace (fun name key ->
697708
if isCapitalized name then Some key else None);
698-
let moduleCompletions =
699-
completionForExporteds env.exported.modules env.file.stamps.modules
700-
suffix (fun m -> Module m)
701-
in
702-
(* Log.log(" -- capitalized " ++ string_of_int(Hashtbl.length(env.exported.types)) ++ " exported types"); *)
703-
(* env.exported.types |> Hashtbl.iter((name, _) => Log.log(" > " ++ name)); *)
704-
results @ moduleCompletions
705-
@ ((* TODO declared thingsz *)
706-
completionForConstructors env.exported.types env.file.stamps.types
707-
suffix
708-
|> List.map (fun (c, t) ->
709-
{(emptyDeclared c.cname.txt) with item = Constructor (c, t)})))
709+
results
710+
@ completionForExportedsModules ~env ~suffix
711+
@ completionForConstructors ~env ~suffix)
710712
else results
711713
in
712714
let results =
713715
if suffix = "" || not (isCapitalized suffix) then (
714716
Log.log " -- not capitalized";
715717
results
716-
@ completionForExporteds env.exported.values env.file.stamps.values suffix
717-
(fun v -> Value v)
718-
@ completionForExporteds env.exported.types env.file.stamps.types suffix
719-
(fun t -> Type t)
720-
@ (completionForFields env.exported.types env.file.stamps.types suffix
721-
|> List.map (fun (f, t) ->
722-
{(emptyDeclared f.fname.txt) with item = Field (f, t)})))
718+
@ completionForExportedsValues ~env ~suffix
719+
@ completionForExportedsTypes ~env ~suffix
720+
@ completionForFields ~env ~suffix)
723721
else results
724722
in
725723
results |> List.map (fun r -> (r, env))
@@ -728,20 +726,14 @@ let attributeCompletions ~(env : QueryEnv.t) ~suffix =
728726
let results = [] in
729727
let results =
730728
if suffix = "" || isCapitalized suffix then
731-
results
732-
@ completionForExporteds env.exported.modules env.file.stamps.modules
733-
suffix (fun m -> Module m)
729+
results @ completionForExportedsModules ~env ~suffix
734730
else results
735731
in
736732
let results =
737733
if suffix = "" || not (isCapitalized suffix) then
738734
results
739-
@ completionForExporteds env.exported.values env.file.stamps.values suffix
740-
(fun v -> Value v)
741-
(* completionForExporteds(env.exported.types, env.file.stamps.types, suffix, t => Type(t)) @ *)
742-
@ (completionForFields env.exported.types env.file.stamps.types suffix
743-
|> List.map (fun (f, t) ->
744-
{(emptyDeclared f.fname.txt) with item = Field (f, t)}))
735+
@ completionForExportedsValues ~env ~suffix
736+
@ completionForFields ~env ~suffix
745737
else results
746738
in
747739
results |> List.map (fun r -> (r, env))

0 commit comments

Comments
 (0)