Skip to content

Commit

Permalink
general: fix CompletionItemKind to nest valueSet
Browse files Browse the repository at this point in the history
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
  • Loading branch information
micnncim committed Sep 26, 2019
1 parent 4c61d1d commit 6d43678
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 23 deletions.
17 changes: 16 additions & 1 deletion general.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,28 @@ type TextDocumentClientCapabilitiesCompletion struct {
// capabilities.
CompletionItem *TextDocumentClientCapabilitiesCompletionItem `json:"completionItem,omitempty"`

CompletionItemKind CompletionItemKind `json:"completionItemKind,omitempty"`
CompletionItemKind *TextDocumentClientCapabilitiesCompletionItemKind `json:"completionItemKind,omitempty"`

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

// TextDocumentClientCapabilitiesCompletionItemKind specific capabilities for the `CompletionItemKind ` in the `textDocument/completion` request.
type TextDocumentClientCapabilitiesCompletionItemKind struct {
//
// The completion item kind values the client supports. When this
// property exists the client also guarantees that it will
// handle values outside its set gracefully and falls back
// to a default value when unknown.
//
// If this property is not present the client only supports
// the completion items kinds from `Text` to `Reference` as defined in
// the initial version of the protocol.
//
ValueSet []CompletionItemKind `json:"valueSet,omitempty"`
}

// TextDocumentClientCapabilitiesCompletionItem is the client supports the following `CompletionItem` specific
// capabilities.
type TextDocumentClientCapabilitiesCompletionItem struct {
Expand Down
67 changes: 65 additions & 2 deletions general_gojay.go
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ var (
func (v *TextDocumentClientCapabilitiesCompletion) MarshalJSONObject(enc *gojay.Encoder) {
enc.BoolKeyOmitEmpty(keyDynamicRegistration, v.DynamicRegistration)
enc.ObjectKeyOmitEmpty(keyCompletionItem, v.CompletionItem)
enc.IntKeyOmitEmpty(keyCompletionItemKind, int(v.CompletionItemKind))
enc.ObjectKeyOmitEmpty(keyCompletionItemKind, v.CompletionItemKind)
enc.BoolKeyOmitEmpty(keyContextSupport, v.ContextSupport)
}

Expand All @@ -473,7 +473,10 @@ func (v *TextDocumentClientCapabilitiesCompletion) UnmarshalJSONObject(dec *goja
}
return dec.Object(v.CompletionItem)
case keyCompletionItemKind:
return dec.Int((*int)(&v.CompletionItemKind))
if v.CompletionItemKind == nil {
v.CompletionItemKind = &TextDocumentClientCapabilitiesCompletionItemKind{}
}
return dec.Object(v.CompletionItemKind)
case keyContextSupport:
return dec.Bool(&v.ContextSupport)
}
Expand All @@ -498,6 +501,66 @@ var (
_ Pooler = (*TextDocumentClientCapabilitiesCompletion)(nil)
)

// CompletionItemKinds represents a slice of CompletionItemKind.
type CompletionItemKinds []CompletionItemKind

// MarshalJSONArray implements gojay's MarshalerJSONArray.
func (v CompletionItemKinds) MarshalJSONArray(enc *gojay.Encoder) {
for i := range v {
enc.Int(int(v[i]))
}
}

// IsNil implements gojay's MarshalerJSONArray.
func (v CompletionItemKinds) IsNil() bool { return len(v) == 0 }

// UnmarshalJSONArray implements gojay's UnmarshalerJSONArray.
func (v *CompletionItemKinds) UnmarshalJSONArray(dec *gojay.Decoder) error {
var value CompletionItemKind
if err := dec.Int((*int)(&value)); err != nil {
return err
}
*v = append(*v, value)
return nil
}

// compile time check whether the CompletionItemKinds implements a gojay.MarshalerJSONArray, gojay.UnmarshalerJSONArray and Pooler interface.
var (
_ gojay.MarshalerJSONArray = (*CompletionItemKinds)(nil)
_ gojay.UnmarshalerJSONArray = (*CompletionItemKinds)(nil)
)

// MarshalJSONObject implements gojay's MarshalerJSONObject.
func (v *TextDocumentClientCapabilitiesCompletionItemKind) MarshalJSONObject(enc *gojay.Encoder) {
enc.ArrayKey(keyValueSet, (*CompletionItemKinds)(&v.ValueSet))
}

// IsNil returns wether the structure is nil value or not.
func (v *TextDocumentClientCapabilitiesCompletionItemKind) IsNil() bool { return v == nil }

// UnmarshalJSONObject implements gojay's UnmarshalerJSONObject.
func (v *TextDocumentClientCapabilitiesCompletionItemKind) UnmarshalJSONObject(dec *gojay.Decoder, k string) error {
if k == keyValueSet {
return dec.Array((*CompletionItemKinds)(&v.ValueSet))
}
return nil
}

// NKeys returns the number of keys to unmarshal.
func (v *TextDocumentClientCapabilitiesCompletionItemKind) NKeys() int { return 1 }

// Reset reset fields
func (v *TextDocumentClientCapabilitiesCompletionItemKind) Reset() {
v.ValueSet = nil
}

// compile time check whether the TextDocumentClientCapabilitiesCompletion implements a gojay.MarshalerJSONObject and gojay.UnmarshalerJSONObject and Pooler interface.
var (
_ gojay.MarshalerJSONObject = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
_ gojay.UnmarshalerJSONObject = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
_ Pooler = (*TextDocumentClientCapabilitiesCompletionItemKind)(nil)
)

// MarkupKinds represents a slice of MarkupKind.
type MarkupKinds []MarkupKind

Expand Down
30 changes: 19 additions & 11 deletions general_gojay_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ func TestTextDocumentClientCapabilitiesSynchronization(t *testing.T) {
}

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

t.Run("Marshal", func(t *testing.T) {
t.Parallel()
Expand All @@ -453,8 +453,10 @@ func TestTextDocumentClientCapabilitiesCompletion(t *testing.T) {
DeprecatedSupport: true,
PreselectSupport: true,
},
CompletionItemKind: TextCompletion,
ContextSupport: true,
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
ValueSet: []CompletionItemKind{TextCompletion},
},
ContextSupport: true,
},
want: want,
wantMarshalErr: false,
Expand Down Expand Up @@ -512,8 +514,10 @@ func TestTextDocumentClientCapabilitiesCompletion(t *testing.T) {
DeprecatedSupport: true,
PreselectSupport: true,
},
CompletionItemKind: TextCompletion,
ContextSupport: true,
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
ValueSet: []CompletionItemKind{TextCompletion},
},
ContextSupport: true,
},
wantUnmarshalErr: false,
wantErr: false,
Expand Down Expand Up @@ -2491,7 +2495,7 @@ func TestTextDocumentClientCapabilitiesFoldingRange(t *testing.T) {
}

func TestTextDocumentClientCapabilities(t *testing.T) {
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}}`
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}}`
wantType := TextDocumentClientCapabilities{
Synchronization: &TextDocumentClientCapabilitiesSynchronization{
DidSave: true,
Expand All @@ -2511,8 +2515,10 @@ func TestTextDocumentClientCapabilities(t *testing.T) {
DeprecatedSupport: true,
PreselectSupport: true,
},
CompletionItemKind: TextCompletion,
ContextSupport: true,
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
ValueSet: []CompletionItemKind{TextCompletion},
},
ContextSupport: true,
},
Hover: &TextDocumentClientCapabilitiesHover{
DynamicRegistration: true,
Expand Down Expand Up @@ -2708,7 +2714,7 @@ func TestTextDocumentClientCapabilities(t *testing.T) {
}

func TestClientCapabilities(t *testing.T) {
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}}}`
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}}}`
wantType := ClientCapabilities{
Workspace: &WorkspaceClientCapabilities{
ApplyEdit: true,
Expand Down Expand Up @@ -2761,8 +2767,10 @@ func TestClientCapabilities(t *testing.T) {
DeprecatedSupport: true,
PreselectSupport: true,
},
CompletionItemKind: TextCompletion,
ContextSupport: true,
CompletionItemKind: &TextDocumentClientCapabilitiesCompletionItemKind{
ValueSet: []CompletionItemKind{TextCompletion},
},
ContextSupport: true,
},
Hover: &TextDocumentClientCapabilitiesHover{
DynamicRegistration: true,
Expand Down
Loading

0 comments on commit 6d43678

Please sign in to comment.