Skip to content

Commit defc4aa

Browse files
authored
Refactor: completion creation fns to just one (#951)
* refactor completion creation fns to just one * remove supportsSnippets from TS
1 parent 9217d76 commit defc4aa

File tree

5 files changed

+58
-100
lines changed

5 files changed

+58
-100
lines changed

analysis/bin/main.ml

+2-8
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,8 @@ let main () =
110110
path line col
111111
in
112112
match args with
113-
| [_; "completion"; path; line; col; currentFile; supportsSnippets] ->
113+
| [_; "completion"; path; line; col; currentFile] ->
114114
printHeaderInfo path line col;
115-
(Cfg.supportsSnippets :=
116-
match supportsSnippets with
117-
| "true" -> true
118-
| _ -> false);
119115
Commands.completion ~debug ~path
120116
~pos:(int_of_string line, int_of_string col)
121117
~currentFile
@@ -193,9 +189,7 @@ let main () =
193189
(Json.escape (CreateInterface.command ~path ~cmiFile))
194190
| [_; "format"; path] ->
195191
Printf.printf "\"%s\"" (Json.escape (Commands.format ~path))
196-
| [_; "test"; path] ->
197-
Cfg.supportsSnippets := true;
198-
Commands.test ~path
192+
| [_; "test"; path] -> Commands.test ~path
199193
| args when List.mem "-h" args || List.mem "--help" args -> prerr_endline help
200194
| _ ->
201195
prerr_endline help;

analysis/src/Cfg.ml

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
let supportsSnippets = ref false
2-
31
let debugFollowCtxPath = ref false
42

53
let isDocGenFromCompiler = ref false

analysis/src/CompletionBackEnd.ml

+52-70
Original file line numberDiff line numberDiff line change
@@ -631,9 +631,7 @@ let completionToItem
631631
| Some detail -> detail)
632632
~docstring
633633
in
634-
if !Cfg.supportsSnippets then
635-
{item with sortText; insertText; insertTextFormat; filterText}
636-
else item
634+
{item with sortText; insertText; insertTextFormat; filterText}
637635

638636
let completionsGetTypeEnv = function
639637
| {Completion.kind = Value typ; env} :: _ -> Some (typ, env)
@@ -1021,14 +1019,13 @@ and getCompletionsForContextPath ~debug ~full ~opens ~rawOpens ~pos ~env ~exact
10211019
|> String.concat "."
10221020
in
10231021
[
1024-
Completion.createWithSnippet ~name ~kind:(Value typ) ~env
1022+
Completion.create name ~includesSnippets:true ~kind:(Value typ) ~env
10251023
~sortText:"A"
10261024
~docstring:
10271025
[
10281026
"Turns `" ^ builtinNameToComplete
10291027
^ "` into a JSX element so it can be used inside of JSX.";
1030-
]
1031-
();
1028+
];
10321029
]
10331030
@ completions
10341031
| _ -> completions)
@@ -1274,7 +1271,6 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
12741271
~full ~prefix ~completionContext ~mode (t : SharedTypes.completionType) =
12751272
let emptyCase = emptyCase ~mode in
12761273
let printConstructorArgs = printConstructorArgs ~mode in
1277-
let createWithSnippet = Completion.createWithSnippet ?typeArgContext in
12781274
let create = Completion.create ?typeArgContext in
12791275
match t with
12801276
| TtypeT {env; path} ->
@@ -1326,14 +1322,15 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
13261322
if valueWithTypeT typeExpr then
13271323
getCompletionName name
13281324
|> Option.map (fun name ->
1329-
createWithSnippet ~name ~insertText:name ~kind:(Value typeExpr)
1330-
~env ())
1325+
create name ~includesSnippets:true ~insertText:name
1326+
~kind:(Value typeExpr) ~env)
13311327
else if fnReturnsTypeT typeExpr then
13321328
getCompletionName name
13331329
|> Option.map (fun name ->
1334-
createWithSnippet
1335-
~name:(Printf.sprintf "%s()" name)
1336-
~insertText:(name ^ "($0)") ~kind:(Value typeExpr) ~env ())
1330+
create
1331+
(Printf.sprintf "%s()" name)
1332+
~includesSnippets:true ~insertText:(name ^ "($0)")
1333+
~kind:(Value typeExpr) ~env)
13371334
else None
13381335
in
13391336
let completionItems =
@@ -1353,8 +1350,8 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
13531350
match path with
13541351
| Pdot (Pdot (Pident m, "Re", _), "t", _) when Ident.name m = "Js" ->
13551352
(* regexps *)
1356-
createWithSnippet ~name:"%re()" ~insertText:"%re(\"/$0/g\")"
1357-
~kind:(Label "Regular expression") ~env ()
1353+
create "%re()" ~insertText:"%re(\"/$0/g\")" ~includesSnippets:true
1354+
~kind:(Label "Regular expression") ~env
13581355
:: completionItems
13591356
| _ -> completionItems
13601357
in
@@ -1375,29 +1372,28 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
13751372
| InlineRecord _ -> 1
13761373
| Args args -> List.length args
13771374
in
1378-
createWithSnippet ?deprecated:constructor.deprecated
1379-
~name:
1380-
(constructor.cname.txt
1381-
^ printConstructorArgs numArgs ~asSnippet:false)
1375+
create ?deprecated:constructor.deprecated ~includesSnippets:true
1376+
(constructor.cname.txt
1377+
^ printConstructorArgs numArgs ~asSnippet:false)
13821378
~insertText:
13831379
(constructor.cname.txt
13841380
^ printConstructorArgs numArgs ~asSnippet:true)
13851381
~kind:
13861382
(Constructor
13871383
(constructor, variantDecl |> Shared.declToString variantName))
1388-
~env ())
1384+
~env)
13891385
|> filterItems ~prefix
13901386
| Tpolyvariant {env; constructors; typeExpr} ->
13911387
if Debug.verbose () then
13921388
print_endline "[complete_typed_value]--> Tpolyvariant";
13931389
constructors
13941390
|> List.map (fun (constructor : polyVariantConstructor) ->
1395-
createWithSnippet
1396-
~name:
1397-
("#" ^ constructor.displayName
1398-
^ printConstructorArgs
1399-
(List.length constructor.args)
1400-
~asSnippet:false)
1391+
create
1392+
("#" ^ constructor.displayName
1393+
^ printConstructorArgs
1394+
(List.length constructor.args)
1395+
~asSnippet:false)
1396+
~includesSnippets:true
14011397
~insertText:
14021398
((if Utils.startsWith prefix "#" then "" else "#")
14031399
^ constructor.displayName
@@ -1407,7 +1403,7 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
14071403
~kind:
14081404
(PolyvariantConstructor
14091405
(constructor, typeExpr |> Shared.typeToString))
1410-
~env ())
1406+
~env)
14111407
|> filterItems
14121408
~prefix:(if Utils.startsWith prefix "#" then prefix else "#" ^ prefix)
14131409
| Toption (env, t) ->
@@ -1436,19 +1432,17 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
14361432
in
14371433
let noneCase = Completion.create "None" ~kind:(kindFromInnerType t) ~env in
14381434
let someAnyCase =
1439-
createWithSnippet ~name:"Some(_)" ~kind:(kindFromInnerType t) ~env
1435+
create "Some(_)" ~includesSnippets:true ~kind:(kindFromInnerType t) ~env
14401436
~insertText:(Printf.sprintf "Some(%s)" (emptyCase 1))
1441-
()
14421437
in
14431438
let completions =
14441439
match completionContext with
14451440
| Some (Completable.CameFromRecordField fieldName) ->
14461441
[
1447-
createWithSnippet
1448-
~name:("Some(" ^ fieldName ^ ")")
1449-
~kind:(kindFromInnerType t) ~env
1450-
~insertText:("Some(" ^ fieldName ^ ")$0")
1451-
();
1442+
create
1443+
("Some(" ^ fieldName ^ ")")
1444+
~includesSnippets:true ~kind:(kindFromInnerType t) ~env
1445+
~insertText:("Some(" ^ fieldName ^ ")$0");
14521446
someAnyCase;
14531447
noneCase;
14541448
]
@@ -1498,24 +1492,21 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
14981492
})
14991493
in
15001494
let okAnyCase =
1501-
createWithSnippet ~name:"Ok(_)" ~kind:(Value okType) ~env
1495+
create "Ok(_)" ~includesSnippets:true ~kind:(Value okType) ~env
15021496
~insertText:(Printf.sprintf "Ok(%s)" (emptyCase 1))
1503-
()
15041497
in
15051498
let errorAnyCase =
1506-
createWithSnippet ~name:"Error(_)" ~kind:(Value errorType) ~env
1499+
create "Error(_)" ~includesSnippets:true ~kind:(Value errorType) ~env
15071500
~insertText:(Printf.sprintf "Error(%s)" (emptyCase 1))
1508-
()
15091501
in
15101502
let completions =
15111503
match completionContext with
15121504
| Some (Completable.CameFromRecordField fieldName) ->
15131505
[
1514-
createWithSnippet
1515-
~name:("Ok(" ^ fieldName ^ ")")
1516-
~kind:(Value okType) ~env
1517-
~insertText:("Ok(" ^ fieldName ^ ")$0")
1518-
();
1506+
create
1507+
("Ok(" ^ fieldName ^ ")")
1508+
~includesSnippets:true ~kind:(Value okType) ~env
1509+
~insertText:("Ok(" ^ fieldName ^ ")$0");
15191510
okAnyCase;
15201511
errorAnyCase;
15211512
]
@@ -1527,10 +1518,11 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
15271518
if Debug.verbose () then print_endline "[complete_typed_value]--> Tuple";
15281519
let numExprs = List.length exprs in
15291520
[
1530-
createWithSnippet
1531-
~name:(printConstructorArgs numExprs ~asSnippet:false)
1521+
create
1522+
(printConstructorArgs numExprs ~asSnippet:false)
1523+
~includesSnippets:true
15321524
~insertText:(printConstructorArgs numExprs ~asSnippet:true)
1533-
~kind:(Value typ) ~env ();
1525+
~kind:(Value typ) ~env;
15341526
]
15351527
| Trecord {env; fields} as extractedType -> (
15361528
if Debug.verbose () then print_endline "[complete_typed_value]--> Trecord";
@@ -1564,16 +1556,14 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
15641556
| _ ->
15651557
if prefix = "" then
15661558
[
1567-
createWithSnippet ~name:"{}"
1568-
~insertText:(if !Cfg.supportsSnippets then "{$0}" else "{}")
1569-
~sortText:"A"
1559+
create "{}" ~includesSnippets:true ~insertText:"{$0}" ~sortText:"A"
15701560
~kind:
15711561
(ExtractedType
15721562
( extractedType,
15731563
match mode with
15741564
| Pattern _ -> `Type
15751565
| Expression -> `Value ))
1576-
~env ();
1566+
~env;
15771567
]
15781568
else [])
15791569
| TinlineRecord {env; fields} -> (
@@ -1591,18 +1581,15 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
15911581
| _ ->
15921582
if prefix = "" then
15931583
[
1594-
createWithSnippet ~name:"{}"
1595-
~insertText:(if !Cfg.supportsSnippets then "{$0}" else "{}")
1596-
~sortText:"A" ~kind:(Label "Inline record") ~env ();
1584+
create "{}" ~includesSnippets:true ~insertText:"{$0}" ~sortText:"A"
1585+
~kind:(Label "Inline record") ~env;
15971586
]
15981587
else [])
15991588
| Tarray (env, typ) ->
16001589
if Debug.verbose () then print_endline "[complete_typed_value]--> Tarray";
16011590
if prefix = "" then
16021591
[
1603-
createWithSnippet ~name:"[]"
1604-
~insertText:(if !Cfg.supportsSnippets then "[$0]" else "[]")
1605-
~sortText:"A"
1592+
create "[]" ~includesSnippets:true ~insertText:"[$0]" ~sortText:"A"
16061593
~kind:
16071594
(match typ with
16081595
| ExtractedType typ ->
@@ -1612,19 +1599,17 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
16121599
| Pattern _ -> `Type
16131600
| Expression -> `Value )
16141601
| TypeExpr typ -> Value typ)
1615-
~env ();
1602+
~env;
16161603
]
16171604
else []
16181605
| Tstring env ->
16191606
if Debug.verbose () then print_endline "[complete_typed_value]--> Tstring";
16201607
if prefix = "" then
16211608
[
1622-
createWithSnippet ~name:"\"\""
1623-
~insertText:(if !Cfg.supportsSnippets then "\"$0\"" else "\"\"")
1624-
~sortText:"A"
1609+
create "\"\"" ~includesSnippets:true ~insertText:"\"$0\"" ~sortText:"A"
16251610
~kind:
16261611
(Value (Ctype.newconstr (Path.Pident (Ident.create "string")) []))
1627-
~env ();
1612+
~env;
16281613
]
16291614
else []
16301615
| Tfunction {env; typ; args; uncurried; returnType}
@@ -1673,14 +1658,11 @@ let rec completeTypedValue ?(typeArgContext : typeArgContext option) ~rawOpens
16731658
in
16741659
let asyncPrefix = if isAsync then "async " else "" in
16751660
[
1676-
createWithSnippet
1677-
~name:(asyncPrefix ^ mkFnArgs ~asSnippet:false ^ " => {}")
1678-
~insertText:
1679-
(asyncPrefix
1680-
^ mkFnArgs ~asSnippet:!Cfg.supportsSnippets
1681-
^ " => "
1682-
^ if !Cfg.supportsSnippets then "{$0}" else "{}")
1683-
~sortText:"A" ~kind:(Value typ) ~env ();
1661+
create
1662+
(asyncPrefix ^ mkFnArgs ~asSnippet:false ^ " => {}")
1663+
~includesSnippets:true
1664+
~insertText:(asyncPrefix ^ mkFnArgs ~asSnippet:true ^ " => " ^ "{$0}")
1665+
~sortText:"A" ~kind:(Value typ) ~env;
16841666
]
16851667
| Tfunction _ ->
16861668
if Debug.verbose () then
@@ -1952,8 +1934,8 @@ let rec processCompletable ~debug ~full ~scope ~env ~pos ~forHover completable =
19521934
| Cdecorator prefix ->
19531935
let mkDecorator (name, docstring, maybeInsertText) =
19541936
{
1955-
(Completion.createWithSnippet ~name ~kind:(Label "") ~env
1956-
?insertText:maybeInsertText ())
1937+
(Completion.create name ~includesSnippets:true ~kind:(Label "") ~env
1938+
?insertText:maybeInsertText)
19571939
with
19581940
docstring;
19591941
}

analysis/src/SharedTypes.ml

+4-19
Original file line numberDiff line numberDiff line change
@@ -802,24 +802,8 @@ module Completion = struct
802802
typeArgContext: typeArgContext option;
803803
}
804804

805-
let create ~kind ~env ?typeArgContext ?(docstring = []) ?filterText ?detail
806-
?deprecated ?insertText name =
807-
{
808-
name;
809-
env;
810-
deprecated;
811-
docstring;
812-
kind;
813-
sortText = None;
814-
insertText;
815-
insertTextFormat = None;
816-
filterText;
817-
detail;
818-
typeArgContext;
819-
}
820-
821-
let createWithSnippet ~name ?typeArgContext ?insertText ~kind ~env ?sortText
822-
?deprecated ?filterText ?detail ?(docstring = []) () =
805+
let create ?typeArgContext ?(includesSnippets = false) ?insertText ~kind ~env
806+
?sortText ?deprecated ?filterText ?detail ?(docstring = []) name =
823807
{
824808
name;
825809
env;
@@ -828,7 +812,8 @@ module Completion = struct
828812
kind;
829813
sortText;
830814
insertText;
831-
insertTextFormat = Some Protocol.Snippet;
815+
insertTextFormat =
816+
(if includesSnippets then Some Protocol.Snippet else None);
832817
filterText;
833818
detail;
834819
typeArgContext;

server/src/server.ts

-1
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,6 @@ function completion(msg: p.RequestMessage) {
653653
params.position.line,
654654
params.position.character,
655655
tmpname,
656-
Boolean(extensionClientCapabilities.supportsSnippetSyntax),
657656
],
658657
msg
659658
);

0 commit comments

Comments
 (0)