Skip to content

Commit 6d43678

Browse files
committed
general: fix CompletionItemKind to nest valueSet
Fix typo in general_gojay.go Fix CompletionItemKind to nest valueSet in gojay Fix CompletionItemKind to nest valueSet in gojay test Revert fixing typo in general_gojay.go Revert "Revert fixing typo in general_gojay.go" This reverts commit dcb155e. Revert "Fix typo in general_gojay.go" This reverts commit c0dffb3. Implement gojay interface in TextDocumentClientCapabilitiesCompletionItemKind Fix TextDocumentClientCapabilitiesCompletionItemKind implemetation for gojay Fix test for gojay Add comment to exported type Fix general_test.go Fix test in completionItemKind
1 parent 4c61d1d commit 6d43678

File tree

4 files changed

+115
-23
lines changed

4 files changed

+115
-23
lines changed

general.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,28 @@ type TextDocumentClientCapabilitiesCompletion struct {
179179
// capabilities.
180180
CompletionItem *TextDocumentClientCapabilitiesCompletionItem `json:"completionItem,omitempty"`
181181

182-
CompletionItemKind CompletionItemKind `json:"completionItemKind,omitempty"`
182+
CompletionItemKind *TextDocumentClientCapabilitiesCompletionItemKind `json:"completionItemKind,omitempty"`
183183

184184
// ContextSupport is the client supports to send additional context information for a
185185
// `textDocument/completion` request.
186186
ContextSupport bool `json:"contextSupport,omitempty"`
187187
}
188188

189+
// TextDocumentClientCapabilitiesCompletionItemKind specific capabilities for the `CompletionItemKind ` in the `textDocument/completion` request.
190+
type TextDocumentClientCapabilitiesCompletionItemKind struct {
191+
//
192+
// The completion item kind values the client supports. When this
193+
// property exists the client also guarantees that it will
194+
// handle values outside its set gracefully and falls back
195+
// to a default value when unknown.
196+
//
197+
// If this property is not present the client only supports
198+
// the completion items kinds from `Text` to `Reference` as defined in
199+
// the initial version of the protocol.
200+
//
201+
ValueSet []CompletionItemKind `json:"valueSet,omitempty"`
202+
}
203+
189204
// TextDocumentClientCapabilitiesCompletionItem is the client supports the following `CompletionItem` specific
190205
// capabilities.
191206
type TextDocumentClientCapabilitiesCompletionItem struct {

general_gojay.go

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ var (
455455
func (v *TextDocumentClientCapabilitiesCompletion) MarshalJSONObject(enc *gojay.Encoder) {
456456
enc.BoolKeyOmitEmpty(keyDynamicRegistration, v.DynamicRegistration)
457457
enc.ObjectKeyOmitEmpty(keyCompletionItem, v.CompletionItem)
458-
enc.IntKeyOmitEmpty(keyCompletionItemKind, int(v.CompletionItemKind))
458+
enc.ObjectKeyOmitEmpty(keyCompletionItemKind, v.CompletionItemKind)
459459
enc.BoolKeyOmitEmpty(keyContextSupport, v.ContextSupport)
460460
}
461461

@@ -473,7 +473,10 @@ func (v *TextDocumentClientCapabilitiesCompletion) UnmarshalJSONObject(dec *goja
473473
}
474474
return dec.Object(v.CompletionItem)
475475
case keyCompletionItemKind:
476-
return dec.Int((*int)(&v.CompletionItemKind))
476+
if v.CompletionItemKind == nil {
477+
v.CompletionItemKind = &TextDocumentClientCapabilitiesCompletionItemKind{}
478+
}
479+
return dec.Object(v.CompletionItemKind)
477480
case keyContextSupport:
478481
return dec.Bool(&v.ContextSupport)
479482
}
@@ -498,6 +501,66 @@ var (
498501
_ Pooler = (*TextDocumentClientCapabilitiesCompletion)(nil)
499502
)
500503

504+
// CompletionItemKinds represents a slice of CompletionItemKind.
505+
type CompletionItemKinds []CompletionItemKind
506+
507+
// MarshalJSONArray implements gojay's MarshalerJSONArray.
508+
func (v CompletionItemKinds) MarshalJSONArray(enc *gojay.Encoder) {
509+
for i := range v {
510+
enc.Int(int(v[i]))
511+
}
512+
}
513+
514+
// IsNil implements gojay's MarshalerJSONArray.
515+
func (v CompletionItemKinds) IsNil() bool { return len(v) == 0 }
516+
517+
// UnmarshalJSONArray implements gojay's UnmarshalerJSONArray.
518+
func (v *CompletionItemKinds) UnmarshalJSONArray(dec *gojay.Decoder) error {
519+
var value CompletionItemKind
520+
if err := dec.Int((*int)(&value)); err != nil {
521+
return err
522+
}
523+
*v = append(*v, value)
524+
return nil
525+
}
526+
527+
// compile time check whether the CompletionItemKinds implements a gojay.MarshalerJSONArray, gojay.UnmarshalerJSONArray and Pooler interface.
528+
var (
529+
_ gojay.MarshalerJSONArray = (*CompletionItemKinds)(nil)
530+
_ gojay.UnmarshalerJSONArray = (*CompletionItemKinds)(nil)
531+
)
532+
533+
// MarshalJSONObject implements gojay's MarshalerJSONObject.
534+
func (v *TextDocumentClientCapabilitiesCompletionItemKind) MarshalJSONObject(enc *gojay.Encoder) {
535+
enc.ArrayKey(keyValueSet, (*CompletionItemKinds)(&v.ValueSet))
536+
}
537+
538+
// IsNil returns wether the structure is nil value or not.
539+
func (v *TextDocumentClientCapabilitiesCompletionItemKind) IsNil() bool { return v == nil }
540+
541+
// UnmarshalJSONObject implements gojay's UnmarshalerJSONObject.
542+
func (v *TextDocumentClientCapabilitiesCompletionItemKind) UnmarshalJSONObject(dec *gojay.Decoder, k string) error {
543+
if k == keyValueSet {
544+
return dec.Array((*CompletionItemKinds)(&v.ValueSet))
545+
}
546+
return nil
547+
}
548+
549+
// NKeys returns the number of keys to unmarshal.
550+
func (v *TextDocumentClientCapabilitiesCompletionItemKind) NKeys() int { return 1 }
551+
552+
// Reset reset fields
553+
func (v *TextDocumentClientCapabilitiesCompletionItemKind) Reset() {
554+
v.ValueSet = nil
555+
}
556+
557+
// compile time check whether the TextDocumentClientCapabilitiesCompletion implements a gojay.MarshalerJSONObject and gojay.UnmarshalerJSONObject and Pooler interface.
558+
var (
559+
_ gojay.MarshalerJSONObject = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
560+
_ gojay.UnmarshalerJSONObject = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
561+
_ Pooler = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
562+
)
563+
501564
// MarkupKinds represents a slice of MarkupKind.
502565
type MarkupKinds []MarkupKind
503566

general_gojay_test.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ func TestTextDocumentClientCapabilitiesSynchronization(t *testing.T) {
427427
}
428428

429429
func TestTextDocumentClientCapabilitiesCompletion(t *testing.T) {
430-
const want = `{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":1,"contextSupport":true}`
430+
const want = `{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":{"valueSet":[1]},"contextSupport":true}`
431431

432432
t.Run("Marshal", func(t *testing.T) {
433433
t.Parallel()
@@ -453,8 +453,10 @@ func TestTextDocumentClientCapabilitiesCompletion(t *testing.T) {
453453
DeprecatedSupport: true,
454454
PreselectSupport: true,
455455
},
456-
CompletionItemKind: TextCompletion,
457-
ContextSupport: true,
456+
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
457+
ValueSet: []CompletionItemKind{TextCompletion},
458+
},
459+
ContextSupport: true,
458460
},
459461
want: want,
460462
wantMarshalErr: false,
@@ -512,8 +514,10 @@ func TestTextDocumentClientCapabilitiesCompletion(t *testing.T) {
512514
DeprecatedSupport: true,
513515
PreselectSupport: true,
514516
},
515-
CompletionItemKind: TextCompletion,
516-
ContextSupport: true,
517+
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
518+
ValueSet: []CompletionItemKind{TextCompletion},
519+
},
520+
ContextSupport: true,
517521
},
518522
wantUnmarshalErr: false,
519523
wantErr: false,
@@ -2491,7 +2495,7 @@ func TestTextDocumentClientCapabilitiesFoldingRange(t *testing.T) {
24912495
}
24922496

24932497
func TestTextDocumentClientCapabilities(t *testing.T) {
2494-
const want = `{"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":1,"contextSupport":true},"hover":{"dynamicRegistration":true,"contentFormat":["plaintext","markdown"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["plaintext","markdown"]}},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]},"hierarchicalDocumentSymbolSupport":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["quickfix","refactor","refactor.extract","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"publishDiagnostics":{"relatedInformation":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":0.5,"lineFoldingOnly":true},"selectionRange":{"dynamicRegistration":true}}`
2498+
const want = `{"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":{"valueSet":[1]},"contextSupport":true},"hover":{"dynamicRegistration":true,"contentFormat":["plaintext","markdown"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["plaintext","markdown"]}},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]},"hierarchicalDocumentSymbolSupport":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["quickfix","refactor","refactor.extract","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"publishDiagnostics":{"relatedInformation":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":0.5,"lineFoldingOnly":true},"selectionRange":{"dynamicRegistration":true}}`
24952499
wantType := TextDocumentClientCapabilities{
24962500
Synchronization: &TextDocumentClientCapabilitiesSynchronization{
24972501
DidSave: true,
@@ -2511,8 +2515,10 @@ func TestTextDocumentClientCapabilities(t *testing.T) {
25112515
DeprecatedSupport: true,
25122516
PreselectSupport: true,
25132517
},
2514-
CompletionItemKind: TextCompletion,
2515-
ContextSupport: true,
2518+
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
2519+
ValueSet: []CompletionItemKind{TextCompletion},
2520+
},
2521+
ContextSupport: true,
25162522
},
25172523
Hover: &TextDocumentClientCapabilitiesHover{
25182524
DynamicRegistration: true,
@@ -2708,7 +2714,7 @@ func TestTextDocumentClientCapabilities(t *testing.T) {
27082714
}
27092715

27102716
func TestClientCapabilities(t *testing.T) {
2711-
const want = `{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"failureHandling":"FailureHandling","resourceOperations":["ResourceOperations"]},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]}},"executeCommand":{"dynamicRegistration":true},"workspaceFolders":true,"configuration":true},"textDocument":{"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":1,"contextSupport":true},"hover":{"dynamicRegistration":true,"contentFormat":["plaintext","markdown"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["plaintext","markdown"]}},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]},"hierarchicalDocumentSymbolSupport":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["quickfix","refactor","refactor.extract","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"publishDiagnostics":{"relatedInformation":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":0.5,"lineFoldingOnly":true},"selectionRange":{"dynamicRegistration":true}}}`
2717+
const want = `{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"failureHandling":"FailureHandling","resourceOperations":["ResourceOperations"]},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]}},"executeCommand":{"dynamicRegistration":true},"workspaceFolders":true,"configuration":true},"textDocument":{"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["plaintext","markdown"],"deprecatedSupport":true,"preselectSupport":true},"completionItemKind":{"valueSet":[1]},"contextSupport":true},"hover":{"dynamicRegistration":true,"contentFormat":["plaintext","markdown"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["plaintext","markdown"]}},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6]},"hierarchicalDocumentSymbolSupport":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["quickfix","refactor","refactor.extract","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"publishDiagnostics":{"relatedInformation":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":0.5,"lineFoldingOnly":true},"selectionRange":{"dynamicRegistration":true}}}`
27122718
wantType := ClientCapabilities{
27132719
Workspace: &WorkspaceClientCapabilities{
27142720
ApplyEdit: true,
@@ -2761,8 +2767,10 @@ func TestClientCapabilities(t *testing.T) {
27612767
DeprecatedSupport: true,
27622768
PreselectSupport: true,
27632769
},
2764-
CompletionItemKind: TextCompletion,
2765-
ContextSupport: true,
2770+
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
2771+
ValueSet: []CompletionItemKind{TextCompletion},
2772+
},
2773+
ContextSupport: true,
27662774
},
27672775
Hover: &TextDocumentClientCapabilitiesHover{
27682776
DynamicRegistration: true,

0 commit comments

Comments
 (0)