Skip to content

Commit 042214e

Browse files
committed
Add insertText support for remaining Compose completion items
All Compose completion items will now append a colon at the bare minimum. Signed-off-by: Remy Suen <[email protected]>
1 parent 5501e18 commit 042214e

File tree

2 files changed

+66
-23
lines changed

2 files changed

+66
-23
lines changed

internal/compose/completion.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -192,44 +192,47 @@ func walkNodes(line int, node *ast.MappingValueNode) []*ast.MappingValueNode {
192192
return []*ast.MappingValueNode{}
193193
}
194194

195-
func extractDetail(schema *jsonschema.Schema) *string {
195+
func referencedTypes(schema *jsonschema.Schema) []string {
196196
if schema.Types != nil {
197-
schemaTypes := schema.Types.ToStrings()
198-
return types.CreateStringPointer(strings.Join(schemaTypes, " or "))
197+
return schema.Types.ToStrings()
199198
} else if schema.Ref != nil {
200199
if schema.Ref.Types != nil {
201-
schemaTypes := schema.Ref.Types.ToStrings()
202-
return types.CreateStringPointer(strings.Join(schemaTypes, " or "))
200+
return schema.Ref.Types.ToStrings()
203201
}
204202
schema = schema.Ref
205203
}
206-
referencedTypes := []string{}
204+
schemaTypes := []string{}
207205
for _, referenced := range schema.OneOf {
208206
if referenced.Types != nil {
209-
referencedTypes = append(referencedTypes, referenced.Types.ToStrings()[0])
207+
schemaTypes = append(schemaTypes, referenced.Types.ToStrings()[0])
210208
} else if referenced.Ref != nil {
211-
referencedTypes = append(referencedTypes, referenced.Ref.Types.ToStrings()[0])
209+
schemaTypes = append(schemaTypes, referenced.Ref.Types.ToStrings()[0])
212210
}
213211
}
214-
slices.Sort(referencedTypes)
215-
return types.CreateStringPointer(strings.Join(referencedTypes, " or "))
212+
return schemaTypes
213+
}
214+
215+
func extractDetail(schema *jsonschema.Schema) *string {
216+
schemaTypes := referencedTypes(schema)
217+
slices.Sort(schemaTypes)
218+
return types.CreateStringPointer(strings.Join(schemaTypes, " or "))
216219
}
217220

218221
func insertText(spacing, attributeName string, schema *jsonschema.Schema) *string {
219-
if schema.Types == nil {
220-
return nil
221-
}
222-
if slices.Contains(schema.Types.ToStrings(), "array") {
223-
if len(schema.Types.ToStrings()) == 1 && schema.OneOf == nil {
222+
schemaTypes := referencedTypes(schema)
223+
if slices.Contains(schemaTypes, "array") {
224+
if len(schemaTypes) == 1 {
224225
return types.CreateStringPointer(fmt.Sprintf("%v:\n%v- ", attributeName, spacing))
226+
} else if len(schemaTypes) == 2 && slices.Contains(schemaTypes, "object") {
227+
return types.CreateStringPointer(fmt.Sprintf("%v:\n%v", attributeName, spacing))
225228
}
226229
return nil
227230
}
228-
if slices.Contains(schema.Types.ToStrings(), "object") {
229-
if len(schema.Types.ToStrings()) == 1 {
231+
if slices.Contains(schemaTypes, "object") {
232+
if len(schemaTypes) == 1 {
230233
return types.CreateStringPointer(fmt.Sprintf("%v:\n%v", attributeName, spacing))
231234
}
232-
return nil
235+
return types.CreateStringPointer(fmt.Sprintf("%v:", attributeName))
233236
}
234237
return types.CreateStringPointer(fmt.Sprintf("%v: ", attributeName))
235238
}

internal/compose/completion_test.go

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var serviceProperties = []protocol.CompletionItem{
1919
{
2020
Label: "annotations",
2121
Detail: types.CreateStringPointer("array or object"),
22+
InsertText: types.CreateStringPointer("annotations:\n "),
2223
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
2324
},
2425
{
@@ -36,6 +37,7 @@ var serviceProperties = []protocol.CompletionItem{
3637
{
3738
Label: "build",
3839
Detail: types.CreateStringPointer("object or string"),
40+
InsertText: types.CreateStringPointer("build:"),
3941
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
4042
},
4143
{
@@ -71,6 +73,7 @@ var serviceProperties = []protocol.CompletionItem{
7173
{
7274
Label: "configs",
7375
Detail: types.CreateStringPointer("array"),
76+
InsertText: types.CreateStringPointer("configs:\n - "),
7477
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
7578
},
7679
{
@@ -82,11 +85,13 @@ var serviceProperties = []protocol.CompletionItem{
8285
{
8386
Label: "cpu_count",
8487
Detail: types.CreateStringPointer("integer or string"),
88+
InsertText: types.CreateStringPointer("cpu_count: "),
8589
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
8690
},
8791
{
8892
Label: "cpu_percent",
8993
Detail: types.CreateStringPointer("integer or string"),
94+
InsertText: types.CreateStringPointer("cpu_percent: "),
9095
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
9196
},
9297
{
@@ -140,21 +145,25 @@ var serviceProperties = []protocol.CompletionItem{
140145
{
141146
Label: "depends_on",
142147
Detail: types.CreateStringPointer("array or object"),
148+
InsertText: types.CreateStringPointer("depends_on:\n "),
143149
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
144150
},
145151
{
146152
Label: "deploy",
147153
Detail: types.CreateStringPointer("null or object"),
154+
InsertText: types.CreateStringPointer("deploy:"),
148155
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
149156
},
150157
{
151158
Label: "develop",
152159
Detail: types.CreateStringPointer("null or object"),
160+
InsertText: types.CreateStringPointer("develop:"),
153161
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
154162
},
155163
{
156164
Label: "device_cgroup_rules",
157165
Detail: types.CreateStringPointer("array"),
166+
InsertText: types.CreateStringPointer("device_cgroup_rules:\n - "),
158167
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
159168
},
160169
{
@@ -198,6 +207,7 @@ var serviceProperties = []protocol.CompletionItem{
198207
{
199208
Label: "environment",
200209
Detail: types.CreateStringPointer("array or object"),
210+
InsertText: types.CreateStringPointer("environment:\n "),
201211
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
202212
},
203213
{
@@ -209,6 +219,7 @@ var serviceProperties = []protocol.CompletionItem{
209219
{
210220
Label: "extends",
211221
Detail: types.CreateStringPointer("object or string"),
222+
InsertText: types.CreateStringPointer("extends:"),
212223
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
213224
},
214225
{
@@ -220,6 +231,7 @@ var serviceProperties = []protocol.CompletionItem{
220231
{
221232
Label: "extra_hosts",
222233
Detail: types.CreateStringPointer("array or object"),
234+
InsertText: types.CreateStringPointer("extra_hosts:\n "),
223235
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
224236
},
225237
{
@@ -236,6 +248,7 @@ var serviceProperties = []protocol.CompletionItem{
236248
{
237249
Label: "healthcheck",
238250
Detail: types.CreateStringPointer("object"),
251+
InsertText: types.CreateStringPointer("healthcheck:\n "),
239252
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
240253
},
241254
{
@@ -276,6 +289,7 @@ var serviceProperties = []protocol.CompletionItem{
276289
{
277290
Label: "labels",
278291
Detail: types.CreateStringPointer("array or object"),
292+
InsertText: types.CreateStringPointer("labels:\n "),
279293
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
280294
},
281295
{
@@ -329,6 +343,7 @@ var serviceProperties = []protocol.CompletionItem{
329343
{
330344
Label: "networks",
331345
Detail: types.CreateStringPointer("array or object"),
346+
InsertText: types.CreateStringPointer("networks:\n "),
332347
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
333348
},
334349
{
@@ -340,6 +355,7 @@ var serviceProperties = []protocol.CompletionItem{
340355
{
341356
Label: "oom_score_adj",
342357
Detail: types.CreateStringPointer("integer or string"),
358+
InsertText: types.CreateStringPointer("oom_score_adj: "),
343359
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
344360
},
345361
{
@@ -387,6 +403,7 @@ var serviceProperties = []protocol.CompletionItem{
387403
{
388404
Label: "profiles",
389405
Detail: types.CreateStringPointer("array"),
406+
InsertText: types.CreateStringPointer("profiles:\n - "),
390407
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
391408
},
392409
{
@@ -434,6 +451,7 @@ var serviceProperties = []protocol.CompletionItem{
434451
{
435452
Label: "secrets",
436453
Detail: types.CreateStringPointer("array"),
454+
InsertText: types.CreateStringPointer("secrets:\n - "),
437455
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
438456
},
439457
{
@@ -475,6 +493,7 @@ var serviceProperties = []protocol.CompletionItem{
475493
{
476494
Label: "sysctls",
477495
Detail: types.CreateStringPointer("array or object"),
496+
InsertText: types.CreateStringPointer("sysctls:\n "),
478497
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
479498
},
480499
{
@@ -491,6 +510,7 @@ var serviceProperties = []protocol.CompletionItem{
491510
{
492511
Label: "ulimits",
493512
Detail: types.CreateStringPointer("object"),
513+
InsertText: types.CreateStringPointer("ulimits:\n "),
494514
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
495515
},
496516
{
@@ -618,7 +638,8 @@ configs:
618638
},
619639
{
620640
Label: "external",
621-
Detail: types.CreateStringPointer("boolean or string or object"),
641+
Detail: types.CreateStringPointer("boolean or object or string"),
642+
InsertText: types.CreateStringPointer("external:"),
622643
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
623644
},
624645
{
@@ -630,6 +651,7 @@ configs:
630651
{
631652
Label: "labels",
632653
Detail: types.CreateStringPointer("array or object"),
654+
InsertText: types.CreateStringPointer("labels:\n "),
633655
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
634656
},
635657
{
@@ -689,7 +711,8 @@ networks:
689711
},
690712
{
691713
Label: "external",
692-
Detail: types.CreateStringPointer("boolean or string or object"),
714+
Detail: types.CreateStringPointer("boolean or object or string"),
715+
InsertText: types.CreateStringPointer("external:"),
693716
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
694717
},
695718
{
@@ -707,6 +730,7 @@ networks:
707730
{
708731
Label: "labels",
709732
Detail: types.CreateStringPointer("array or object"),
733+
InsertText: types.CreateStringPointer("labels:\n "),
710734
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
711735
},
712736
{
@@ -748,7 +772,8 @@ secrets:
748772
},
749773
{
750774
Label: "external",
751-
Detail: types.CreateStringPointer("boolean or string or object"),
775+
Detail: types.CreateStringPointer("boolean or object or string"),
776+
InsertText: types.CreateStringPointer("external:"),
752777
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
753778
},
754779
{
@@ -760,6 +785,7 @@ secrets:
760785
{
761786
Label: "labels",
762787
Detail: types.CreateStringPointer("array or object"),
788+
InsertText: types.CreateStringPointer("labels:\n "),
763789
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
764790
},
765791
{
@@ -813,12 +839,14 @@ volumes:
813839
},
814840
{
815841
Label: "external",
816-
Detail: types.CreateStringPointer("boolean or string or object"),
842+
Detail: types.CreateStringPointer("boolean or object or string"),
843+
InsertText: types.CreateStringPointer("external:"),
817844
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
818845
},
819846
{
820847
Label: "labels",
821848
Detail: types.CreateStringPointer("array or object"),
849+
InsertText: types.CreateStringPointer("labels:\n "),
822850
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
823851
},
824852
{
@@ -919,6 +947,7 @@ services:
919947
{
920948
Label: "labels",
921949
Detail: types.CreateStringPointer("array or object"),
950+
InsertText: types.CreateStringPointer("labels:\n "),
922951
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
923952
},
924953
{
@@ -1027,11 +1056,13 @@ services:
10271056
{
10281057
Label: "additional_contexts",
10291058
Detail: types.CreateStringPointer("array or object"),
1059+
InsertText: types.CreateStringPointer("additional_contexts:\n "),
10301060
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
10311061
},
10321062
{
10331063
Label: "args",
10341064
Detail: types.CreateStringPointer("array or object"),
1065+
InsertText: types.CreateStringPointer("args:\n "),
10351066
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
10361067
},
10371068
{
@@ -1073,6 +1104,7 @@ services:
10731104
{
10741105
Label: "extra_hosts",
10751106
Detail: types.CreateStringPointer("array or object"),
1107+
InsertText: types.CreateStringPointer("extra_hosts:\n "),
10761108
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
10771109
},
10781110
{
@@ -1084,6 +1116,7 @@ services:
10841116
{
10851117
Label: "labels",
10861118
Detail: types.CreateStringPointer("array or object"),
1119+
InsertText: types.CreateStringPointer("labels:\n "),
10871120
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
10881121
},
10891122
{
@@ -1119,6 +1152,7 @@ services:
11191152
{
11201153
Label: "secrets",
11211154
Detail: types.CreateStringPointer("array"),
1155+
InsertText: types.CreateStringPointer("secrets:\n - "),
11221156
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
11231157
},
11241158
{
@@ -1130,6 +1164,7 @@ services:
11301164
{
11311165
Label: "ssh",
11321166
Detail: types.CreateStringPointer("array or object"),
1167+
InsertText: types.CreateStringPointer("ssh:\n "),
11331168
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
11341169
},
11351170
{
@@ -1145,7 +1180,9 @@ services:
11451180
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
11461181
},
11471182
{
1148-
Label: "ulimits", Detail: types.CreateStringPointer("object"),
1183+
Label: "ulimits",
1184+
Detail: types.CreateStringPointer("object"),
1185+
InsertText: types.CreateStringPointer("ulimits:\n "),
11491186
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
11501187
},
11511188
},
@@ -1337,6 +1374,7 @@ services:
13371374
{
13381375
Label: "aliases",
13391376
Detail: types.CreateStringPointer("array"),
1377+
InsertText: types.CreateStringPointer("aliases:\n - "),
13401378
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
13411379
},
13421380
{
@@ -1372,6 +1410,7 @@ services:
13721410
{
13731411
Label: "link_local_ips",
13741412
Detail: types.CreateStringPointer("array"),
1413+
InsertText: types.CreateStringPointer("link_local_ips:\n - "),
13751414
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
13761415
},
13771416
{
@@ -1615,6 +1654,7 @@ services:
16151654
{
16161655
Label: "labels",
16171656
Detail: types.CreateStringPointer("array or object"),
1657+
InsertText: types.CreateStringPointer("labels:\n "),
16181658
InsertTextMode: types.CreateInsertTextModePointer(protocol.InsertTextModeAsIs),
16191659
},
16201660
{

0 commit comments

Comments
 (0)