Updating golanglint

This commit is contained in:
Mike Farah 2025-05-03 16:34:21 +10:00
parent 89518a09b8
commit 20b5129120
29 changed files with 156 additions and 86 deletions

38
.golangci.bck.yml Normal file
View File

@ -0,0 +1,38 @@
run:
timeout: 5m
linters:
enable:
- asciicheck
- depguard
- errorlint
- gci
- gochecknoinits
- gofmt
- goimports
- gosec
- gosimple
- staticcheck
- unused
- misspell
- nakedret
- nolintlint
- predeclared
- revive
- unconvert
- unparam
linters-settings:
depguard:
rules:
prevent_unmaintained_packages:
list-mode: lax
files:
- $all
- "!$test"
deny:
- pkg: io/ioutil
desc: "replaced by io and os packages since Go 1.16: https://tip.golang.org/doc/go1.16#ioutil"
issues:
exclude-rules:
- linters:
- revive
text: "var-naming"

View File

@ -1,18 +1,11 @@
run: version: "2"
timeout: 5m
linters: linters:
enable: enable:
- asciicheck - asciicheck
- depguard - depguard
- errorlint - errorlint
- gci
- gochecknoinits - gochecknoinits
- gofmt
- goimports
- gosec - gosec
- gosimple
- staticcheck
- unused
- misspell - misspell
- nakedret - nakedret
- nolintlint - nolintlint
@ -20,19 +13,40 @@ linters:
- revive - revive
- unconvert - unconvert
- unparam - unparam
linters-settings: settings:
depguard: depguard:
rules: rules:
prevent_unmaintained_packages: prevent_unmaintained_packages:
list-mode: lax list-mode: lax
files: files:
- $all - $all
- "!$test" - '!$test'
deny: deny:
- pkg: io/ioutil - pkg: io/ioutil
desc: "replaced by io and os packages since Go 1.16: https://tip.golang.org/doc/go1.16#ioutil" desc: 'replaced by io and os packages since Go 1.16: https://tip.golang.org/doc/go1.16#ioutil'
issues: exclusions:
exclude-rules: generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
- linters: - linters:
- revive - revive
text: "var-naming" text: var-naming
paths:
- third_party$
- builtin$
- examples$
formatters:
enable:
- gci
- gofmt
- goimports
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$

View File

@ -3,7 +3,7 @@
testLoadFileNotExist() { testLoadFileNotExist() {
result=$(./yq e -n 'load("cat.yml")' 2>&1) result=$(./yq e -n 'load("cat.yml")' 2>&1)
assertEquals 1 $? assertEquals 1 $?
assertEquals "Error: Failed to load cat.yml: open cat.yml: no such file or directory" "$result" assertEquals "Error: failed to load cat.yml: open cat.yml: no such file or directory" "$result"
} }
testLoadFileExpNotExist() { testLoadFileExpNotExist() {
@ -15,7 +15,7 @@ testLoadFileExpNotExist() {
testStrLoadFileNotExist() { testStrLoadFileNotExist() {
result=$(./yq e -n 'strload("cat.yml")' 2>&1) result=$(./yq e -n 'strload("cat.yml")' 2>&1)
assertEquals 1 $? assertEquals 1 $?
assertEquals "Error: Failed to load cat.yml: open cat.yml: no such file or directory" "$result" assertEquals "Error: failed to load cat.yml: open cat.yml: no such file or directory" "$result"
} }
testStrLoadFileExpNotExist() { testStrLoadFileExpNotExist() {

View File

@ -45,5 +45,5 @@ func getHumanVersion() string {
} }
// Strip off any single quotes added by the git information. // Strip off any single quotes added by the git information.
return strings.Replace(version, "'", "", -1) return strings.ReplaceAll(version, "'", "")
} }

View File

@ -201,13 +201,14 @@ func (n *CandidateNode) SetParent(parent *CandidateNode) {
type ValueVisitor func(*CandidateNode) error type ValueVisitor func(*CandidateNode) error
func (n *CandidateNode) VisitValues(visitor ValueVisitor) error { func (n *CandidateNode) VisitValues(visitor ValueVisitor) error {
if n.Kind == MappingNode { switch n.Kind {
case MappingNode:
for i := 1; i < len(n.Content); i = i + 2 { for i := 1; i < len(n.Content); i = i + 2 {
if err := visitor(n.Content[i]); err != nil { if err := visitor(n.Content[i]); err != nil {
return err return err
} }
} }
} else if n.Kind == SequenceNode { case SequenceNode:
for i := 0; i < len(n.Content); i = i + 1 { for i := 0; i < len(n.Content); i = i + 1 {
if err := visitor(n.Content[i]); err != nil { if err := visitor(n.Content[i]); err != nil {
return err return err

View File

@ -64,6 +64,6 @@ func (d *dataTreeNavigator) GetMatchingNodes(context Context, expressionNode *Ex
if handler != nil { if handler != nil {
return handler(d, context, expressionNode) return handler(d, context, expressionNode)
} }
return Context{}, fmt.Errorf("Unknown operator %v", expressionNode.Operation.OperationType) return Context{}, fmt.Errorf("unknown operator %v", expressionNode.Operation.OperationType)
} }

View File

@ -249,11 +249,12 @@ func (dec *tomlDecoder) processTopLevelNode(currentNode *toml.Node) (bool, error
var runAgainstCurrentExp bool var runAgainstCurrentExp bool
var err error var err error
log.Debug("processTopLevelNode: Going to process %v state is current %v", currentNode.Kind, NodeToString(dec.rootMap)) log.Debug("processTopLevelNode: Going to process %v state is current %v", currentNode.Kind, NodeToString(dec.rootMap))
if currentNode.Kind == toml.Table { switch currentNode.Kind {
case toml.Table:
runAgainstCurrentExp, err = dec.processTable(currentNode) runAgainstCurrentExp, err = dec.processTable(currentNode)
} else if currentNode.Kind == toml.ArrayTable { case toml.ArrayTable:
runAgainstCurrentExp, err = dec.processArrayTable(currentNode) runAgainstCurrentExp, err = dec.processArrayTable(currentNode)
} else { default:
runAgainstCurrentExp, err = dec.decodeKeyValuesIntoMap(dec.rootMap, currentNode) runAgainstCurrentExp, err = dec.decodeKeyValuesIntoMap(dec.rootMap, currentNode)
} }

View File

@ -315,13 +315,14 @@ func (dec *xmlDecoder) decodeXML(root *xmlNode) error {
case xml.Comment: case xml.Comment:
commentStr := string(xml.CharData(se)) commentStr := string(xml.CharData(se))
if elem.state == "started" { switch elem.state {
case "started":
applyFootComment(elem, commentStr) applyFootComment(elem, commentStr)
} else if elem.state == "chardata" { case "chardata":
log.Debug("got a line comment for (%v) %v: [%v]", elem.state, elem.label, commentStr) log.Debug("got a line comment for (%v) %v: [%v]", elem.state, elem.label, commentStr)
elem.n.LineComment = joinComments([]string{elem.n.LineComment, commentStr}, " ") elem.n.LineComment = joinComments([]string{elem.n.LineComment, commentStr}, " ")
} else { default:
log.Debug("got a head comment for (%v) %v: [%v]", elem.state, elem.label, commentStr) log.Debug("got a head comment for (%v) %v: [%v]", elem.state, elem.label, commentStr)
elem.n.HeadComment = joinComments([]string{elem.n.HeadComment, commentStr}, " ") elem.n.HeadComment = joinComments([]string{elem.n.HeadComment, commentStr}, " ")
} }

View File

@ -167,10 +167,14 @@ func needsQuoting(s string) bool {
// [%a_][%w_]* // [%a_][%w_]*
for i, c := range s { for i, c := range s {
if i == 0 { if i == 0 {
// keeping for legacy reasons, upgraded linter
//nolint:staticcheck
if !((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') { if !((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') {
return true return true
} }
} else { } else {
// keeping for legacy reasons, upgraded linter
//nolint:staticcheck
if !((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') { if !((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') {
return true return true
} }
@ -299,10 +303,10 @@ func (le *luaEncoder) encodeAny(writer io.Writer, node *CandidateNode) error {
return writeString(writer, node.Value) return writeString(writer, node.Value)
} }
default: default:
return fmt.Errorf("Lua encoder NYI -- %s", node.Tag) return fmt.Errorf("lua encoder NYI -- %s", node.Tag)
} }
default: default:
return fmt.Errorf("Lua encoder NYI -- %s", node.Tag) return fmt.Errorf("lua encoder NYI -- %s", node.Tag)
} }
} }

View File

@ -107,7 +107,7 @@ func (pe *propertiesEncoder) doEncode(p *properties.Properties, node *CandidateN
case AliasNode: case AliasNode:
return pe.doEncode(p, node.Alias, path, nil) return pe.doEncode(p, node.Alias, path, nil)
default: default:
return fmt.Errorf("Unsupported node %v", node.Tag) return fmt.Errorf("unsupported node %v", node.Tag)
} }
} }

View File

@ -75,7 +75,7 @@ func (pe *shellVariablesEncoder) doEncode(w *io.Writer, node *CandidateNode, pat
case AliasNode: case AliasNode:
return pe.doEncode(w, node.Alias, path) return pe.doEncode(w, node.Alias, path)
default: default:
return fmt.Errorf("Unsupported node %v", node.Tag) return fmt.Errorf("unsupported node %v", node.Tag)
} }
} }

View File

@ -50,14 +50,15 @@ func (p *expressionParserImpl) createExpressionTree(postFixPath []*Operation) (*
log.Debugf("pathTree %v ", Operation.toString()) log.Debugf("pathTree %v ", Operation.toString())
if Operation.OperationType.NumArgs > 0 { if Operation.OperationType.NumArgs > 0 {
numArgs := Operation.OperationType.NumArgs numArgs := Operation.OperationType.NumArgs
if numArgs == 1 { switch numArgs {
case 1:
if len(stack) < 1 { if len(stack) < 1 {
return nil, fmt.Errorf("'%v' expects 1 arg but received none", strings.TrimSpace(Operation.StringValue)) return nil, fmt.Errorf("'%v' expects 1 arg but received none", strings.TrimSpace(Operation.StringValue))
} }
remaining, rhs := stack[:len(stack)-1], stack[len(stack)-1] remaining, rhs := stack[:len(stack)-1], stack[len(stack)-1]
newNode.RHS = rhs newNode.RHS = rhs
stack = remaining stack = remaining
} else if numArgs == 2 { case 2:
if len(stack) < 2 { if len(stack) < 2 {
return nil, fmt.Errorf("'%v' expects 2 args but there is %v", strings.TrimSpace(Operation.StringValue), len(stack)) return nil, fmt.Errorf("'%v' expects 2 args but there is %v", strings.TrimSpace(Operation.StringValue), len(stack))
} }

View File

@ -26,11 +26,12 @@ func popOpToResult(opStack []*token, result []*Operation) ([]*token, []*Operatio
} }
func validateNoOpenTokens(token *token) error { func validateNoOpenTokens(token *token) error {
if token.TokenType == openCollect { switch token.TokenType {
case openCollect:
return fmt.Errorf(("bad expression, could not find matching `]`")) return fmt.Errorf(("bad expression, could not find matching `]`"))
} else if token.TokenType == openCollectObject { case openCollectObject:
return fmt.Errorf(("bad expression, could not find matching `}`")) return fmt.Errorf(("bad expression, could not find matching `}`"))
} else if token.TokenType == openBracket { case openBracket:
return fmt.Errorf(("bad expression, could not find matching `)`")) return fmt.Errorf(("bad expression, could not find matching `)`"))
} }
return nil return nil
@ -64,7 +65,7 @@ func (p *expressionPostFixerImpl) ConvertToPostfix(infixTokens []*token) ([]*Ope
opStack, result = popOpToResult(opStack, result) opStack, result = popOpToResult(opStack, result)
} }
if len(opStack) == 0 { if len(opStack) == 0 {
return nil, errors.New("Bad path expression, got close collect brackets without matching opening bracket") return nil, errors.New("bad path expression, got close collect brackets without matching opening bracket")
} }
// now we should have [ as the last element on the opStack, get rid of it // now we should have [ as the last element on the opStack, get rid of it
opStack = opStack[0 : len(opStack)-1] opStack = opStack[0 : len(opStack)-1]

View File

@ -31,24 +31,25 @@ type token struct {
} }
func (t *token) toString(detail bool) string { func (t *token) toString(detail bool) string {
if t.TokenType == operationToken { switch t.TokenType {
case operationToken:
if detail { if detail {
return fmt.Sprintf("%v (%v)", t.Operation.toString(), t.Operation.OperationType.Precedence) return fmt.Sprintf("%v (%v)", t.Operation.toString(), t.Operation.OperationType.Precedence)
} }
return t.Operation.toString() return t.Operation.toString()
} else if t.TokenType == openBracket { case openBracket:
return "(" return "("
} else if t.TokenType == closeBracket { case closeBracket:
return ")" return ")"
} else if t.TokenType == openCollect { case openCollect:
return "[" return "["
} else if t.TokenType == closeCollect { case closeCollect:
return "]" return "]"
} else if t.TokenType == openCollectObject { case openCollectObject:
return "{" return "{"
} else if t.TokenType == closeCollectObject { case closeCollectObject:
return "}" return "}"
} else if t.TokenType == traverseArrayCollect { case traverseArrayCollect:
return ".[" return ".["
} }

View File

@ -26,11 +26,12 @@ func deleteChildOperator(d *dataTreeNavigator, context Context, expressionNode *
candidatePath := candidate.GetPath() candidatePath := candidate.GetPath()
childPath := candidatePath[len(candidatePath)-1] childPath := candidatePath[len(candidatePath)-1]
if parentNode.Kind == MappingNode { switch parentNode.Kind {
case MappingNode:
deleteFromMap(candidate.Parent, childPath) deleteFromMap(candidate.Parent, childPath)
} else if parentNode.Kind == SequenceNode { case SequenceNode:
deleteFromArray(candidate.Parent, childPath) deleteFromArray(candidate.Parent, childPath)
} else { default:
return Context{}, fmt.Errorf("cannot delete nodes from parent of tag %v", parentNode.Tag) return Context{}, fmt.Errorf("cannot delete nodes from parent of tag %v", parentNode.Tag)
} }
} }

View File

@ -45,12 +45,13 @@ func keysOperator(_ *dataTreeNavigator, context Context, _ *ExpressionNode) (Con
candidate := el.Value.(*CandidateNode) candidate := el.Value.(*CandidateNode)
var targetNode *CandidateNode var targetNode *CandidateNode
if candidate.Kind == MappingNode { switch candidate.Kind {
case MappingNode:
targetNode = getMapKeys(candidate) targetNode = getMapKeys(candidate)
} else if candidate.Kind == SequenceNode { case SequenceNode:
targetNode = getIndices(candidate) targetNode = getIndices(candidate)
} else { default:
return Context{}, fmt.Errorf("Cannot get keys of %v, keys only works for maps and arrays", candidate.Tag) return Context{}, fmt.Errorf("cannot get keys of %v, keys only works for maps and arrays", candidate.Tag)
} }
results.PushBack(targetNode) results.PushBack(targetNode)

View File

@ -82,7 +82,7 @@ func loadStringOperator(d *dataTreeNavigator, context Context, expressionNode *E
contentsCandidate, err := loadString(filename) contentsCandidate, err := loadString(filename)
if err != nil { if err != nil {
return Context{}, fmt.Errorf("Failed to load %v: %w", filename, err) return Context{}, fmt.Errorf("failed to load %v: %w", filename, err)
} }
results.PushBack(contentsCandidate) results.PushBack(contentsCandidate)
@ -118,7 +118,7 @@ func loadOperator(d *dataTreeNavigator, context Context, expressionNode *Express
contentsCandidate, err := loadWithDecoder(filename, loadPrefs.decoder) contentsCandidate, err := loadWithDecoder(filename, loadPrefs.decoder)
if err != nil { if err != nil {
return Context{}, fmt.Errorf("Failed to load %v: %w", filename, err) return Context{}, fmt.Errorf("failed to load %v: %w", filename, err)
} }
results.PushBack(contentsCandidate) results.PushBack(contentsCandidate)

View File

@ -154,9 +154,9 @@ func repeatString(lhs *CandidateNode, rhs *CandidateNode) (*CandidateNode, error
if err != nil { if err != nil {
return nil, err return nil, err
} else if count < 0 { } else if count < 0 {
return nil, fmt.Errorf("Cannot repeat string by a negative number (%v)", count) return nil, fmt.Errorf("cannot repeat string by a negative number (%v)", count)
} else if count > 10000000 { } else if count > 10000000 {
return nil, fmt.Errorf("Cannot repeat string by more than 100 million (%v)", count) return nil, fmt.Errorf("cannot repeat string by more than 100 million (%v)", count)
} }
target.Value = strings.Repeat(stringNode.Value, count) target.Value = strings.Repeat(stringNode.Value, count)

View File

@ -206,7 +206,7 @@ var multiplyOperatorScenarios = []expressionScenario{
skipDoc: true, skipDoc: true,
document: `n: -4`, document: `n: -4`,
expression: `"banana" * .n`, expression: `"banana" * .n`,
expectedError: "Cannot repeat string by a negative number (-4)", expectedError: "cannot repeat string by a negative number (-4)",
}, },
{ {
description: "Multiply string X by more than 100 million", description: "Multiply string X by more than 100 million",
@ -214,7 +214,7 @@ var multiplyOperatorScenarios = []expressionScenario{
skipDoc: true, skipDoc: true,
document: `n: 100000001`, document: `n: 100000001`,
expression: `"banana" * .n`, expression: `"banana" * .n`,
expectedError: "Cannot repeat string by more than 100 million (100000001)", expectedError: "cannot repeat string by more than 100 million (100000001)",
}, },
{ {
description: "Multiply int node X string", description: "Multiply int node X string",

View File

@ -58,11 +58,12 @@ func omitOperator(d *dataTreeNavigator, context Context, expressionNode *Express
var replacement *CandidateNode var replacement *CandidateNode
if node.Kind == MappingNode { switch node.Kind {
case MappingNode:
replacement = omitMap(node, indicesToOmit) replacement = omitMap(node, indicesToOmit)
} else if node.Kind == SequenceNode { case SequenceNode:
replacement = omitSequence(node, indicesToOmit) replacement = omitSequence(node, indicesToOmit)
} else { default:
log.Debugf("Omit from type %v (%v) is noop", node.Tag, node.GetNicePath()) log.Debugf("Omit from type %v (%v) is noop", node.Tag, node.GetNicePath())
return context, nil return context, nil
} }

View File

@ -22,15 +22,16 @@ func getPathArrayFromNode(funcName string, node *CandidateNode) ([]interface{},
path := make([]interface{}, len(node.Content)) path := make([]interface{}, len(node.Content))
for i, childNode := range node.Content { for i, childNode := range node.Content {
if childNode.Tag == "!!str" { switch childNode.Tag {
case "!!str":
path[i] = childNode.Value path[i] = childNode.Value
} else if childNode.Tag == "!!int" { case "!!int":
number, err := parseInt(childNode.Value) number, err := parseInt(childNode.Value)
if err != nil { if err != nil {
return nil, fmt.Errorf("%v: could not parse %v as an int: %w", funcName, childNode.Value, err) return nil, fmt.Errorf("%v: could not parse %v as an int: %w", funcName, childNode.Value, err)
} }
path[i] = number path[i] = number
} else { default:
return nil, fmt.Errorf("%v: expected either a !!str or !!int in the path, found %v instead", funcName, childNode.Tag) return nil, fmt.Errorf("%v: expected either a !!str or !!int in the path, found %v instead", funcName, childNode.Tag)
} }

View File

@ -64,15 +64,16 @@ func pickOperator(d *dataTreeNavigator, context Context, expressionNode *Express
node := el.Value.(*CandidateNode) node := el.Value.(*CandidateNode)
var replacement *CandidateNode var replacement *CandidateNode
if node.Kind == MappingNode { switch node.Kind {
case MappingNode:
replacement = pickMap(node, indicesToPick) replacement = pickMap(node, indicesToPick)
} else if node.Kind == SequenceNode { case SequenceNode:
replacement, err = pickSequence(node, indicesToPick) replacement, err = pickSequence(node, indicesToPick)
if err != nil { if err != nil {
return Context{}, err return Context{}, err
} }
} else { default:
return Context{}, fmt.Errorf("cannot pick indices from type %v (%v)", node.Tag, node.GetNicePath()) return Context{}, fmt.Errorf("cannot pick indices from type %v (%v)", node.Tag, node.GetNicePath())
} }

View File

@ -47,11 +47,12 @@ func sortByOperator(d *dataTreeNavigator, context Context, expressionNode *Expre
sort.Stable(sortableArray) sort.Stable(sortableArray)
sortedList := candidate.CopyWithoutContent() sortedList := candidate.CopyWithoutContent()
if candidate.Kind == MappingNode { switch candidate.Kind {
case MappingNode:
for _, sortedNode := range sortableArray { for _, sortedNode := range sortableArray {
sortedList.AddKeyValueChild(sortedNode.Node.Key, sortedNode.Node) sortedList.AddKeyValueChild(sortedNode.Node.Key, sortedNode.Node)
} }
} else if candidate.Kind == SequenceNode { case SequenceNode:
for _, sortedNode := range sortableArray { for _, sortedNode := range sortableArray {
sortedList.AddChild(sortedNode.Node) sortedList.AddChild(sortedNode.Node)
} }

View File

@ -410,7 +410,7 @@ func extractMatchArguments(d *dataTreeNavigator, context Context, expressionNode
return nil, matchPrefs, fmt.Errorf(`'i' is not a valid option for match. To ignore case, use an expression like match("(?i)cat")`) return nil, matchPrefs, fmt.Errorf(`'i' is not a valid option for match. To ignore case, use an expression like match("(?i)cat")`)
} }
if len(paramText) > 0 { if len(paramText) > 0 {
return nil, matchPrefs, fmt.Errorf(`Unrecognised match params '%v', please see docs at https://mikefarah.gitbook.io/yq/operators/string-operators`, paramText) return nil, matchPrefs, fmt.Errorf(`unrecognised match params '%v', please see docs at https://mikefarah.gitbook.io/yq/operators/string-operators`, paramText)
} }
} }

View File

@ -19,7 +19,7 @@ func parseStyle(customStyle string) (Style, error) {
} else if customStyle == "flow" { } else if customStyle == "flow" {
return FlowStyle, nil return FlowStyle, nil
} else if customStyle != "" { } else if customStyle != "" {
return 0, fmt.Errorf("Unknown style %v", customStyle) return 0, fmt.Errorf("unknown style %v", customStyle)
} }
return 0, nil return 0, nil
} }

View File

@ -135,12 +135,13 @@ func traverseArrayIndices(context Context, matchingNode *CandidateNode, indicesT
} }
} }
if matchingNode.Kind == AliasNode { switch matchingNode.Kind {
case AliasNode:
matchingNode = matchingNode.Alias matchingNode = matchingNode.Alias
return traverseArrayIndices(context, matchingNode, indicesToTraverse, prefs) return traverseArrayIndices(context, matchingNode, indicesToTraverse, prefs)
} else if matchingNode.Kind == SequenceNode { case SequenceNode:
return traverseArrayWithIndices(matchingNode, indicesToTraverse, prefs) return traverseArrayWithIndices(matchingNode, indicesToTraverse, prefs)
} else if matchingNode.Kind == MappingNode { case MappingNode:
return traverseMapWithIndices(context, matchingNode, indicesToTraverse, prefs) return traverseMapWithIndices(context, matchingNode, indicesToTraverse, prefs)
} }
log.Debugf("OperatorArrayTraverse skipping %v as its a %v", matchingNode, matchingNode.Tag) log.Debugf("OperatorArrayTraverse skipping %v as its a %v", matchingNode, matchingNode.Tag)

View File

@ -132,7 +132,7 @@ func (p *resultsPrinter) PrintResults(matchingNodes *list.List) error {
tempBufferBytes := tempBuffer.Bytes() tempBufferBytes := tempBuffer.Bytes()
if bytes.IndexByte(tempBufferBytes, 0) != -1 { if bytes.IndexByte(tempBufferBytes, 0) != -1 {
return fmt.Errorf( return fmt.Errorf(
"Can't serialize value because it contains NUL char and you are using NUL separated output", "can't serialize value because it contains NUL char and you are using NUL separated output",
) )
} }
if _, err := writer.Write(tempBufferBytes); err != nil { if _, err := writer.Write(tempBufferBytes); err != nil {

View File

@ -319,10 +319,11 @@ func documentUnwrappedEncodePropertyScenario(w *bufio.Writer, s formatScenario)
prefs := NewDefaultPropertiesPreferences() prefs := NewDefaultPropertiesPreferences()
useArrayBracketsFlag := "" useArrayBracketsFlag := ""
useCustomSeparatorFlag := "" useCustomSeparatorFlag := ""
if s.scenarioType == "encode-array-brackets" { switch s.scenarioType {
case "encode-array-brackets":
useArrayBracketsFlag = " --properties-array-brackets" useArrayBracketsFlag = " --properties-array-brackets"
prefs.UseArrayBrackets = true prefs.UseArrayBrackets = true
} else if s.scenarioType == "encode-custom-separator" { case "encode-custom-separator":
prefs.KeyValueSeparator = " :@ " prefs.KeyValueSeparator = " :@ "
useCustomSeparatorFlag = ` --properties-separator=" :@ "` useCustomSeparatorFlag = ` --properties-separator=" :@ "`
} }

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
set -ex set -ex
go mod download golang.org/x/tools@latest go mod download golang.org/x/tools@latest
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.64.8 curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.1.5
curl -sSfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s curl -sSfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s