From 5d81930e5624c37e472b035edcc1c11ce3a111b1 Mon Sep 17 00:00:00 2001 From: Matthieu Morel Date: Thu, 25 Nov 2021 14:41:02 +0100 Subject: [PATCH] enable gci linter --- .golangci.yml | 1 + cmd/constant.go | 36 +++-- cmd/evaluate_all_command.go | 3 +- cmd/evalute_sequence_command.go | 4 +- cmd/root.go | 7 +- cmd/shell-completion.go | 1 - cmd/utils.go | 1 - cmd/version_test.go | 2 +- pkg/yqlib/all_at_once_evaluator_test.go | 2 +- pkg/yqlib/candidate_node.go | 3 +- pkg/yqlib/context.go | 1 - pkg/yqlib/data_tree_navigator.go | 4 +- pkg/yqlib/encoder.go | 8 +- pkg/yqlib/encoder_properties_test.go | 32 ++--- pkg/yqlib/encoder_test.go | 26 ++-- pkg/yqlib/expression_parser.go | 4 +- pkg/yqlib/expression_parser_test.go | 1 + pkg/yqlib/expression_postfix.go | 15 +- pkg/yqlib/expression_processing_test.go | 6 +- pkg/yqlib/expression_tokeniser.go | 42 +++--- pkg/yqlib/front_matter.go | 1 - pkg/yqlib/lib.go | 173 ++++++++++++++---------- pkg/yqlib/matchKeyString_test.go | 2 +- pkg/yqlib/operator_add.go | 11 +- pkg/yqlib/operator_anchors_aliases.go | 13 +- pkg/yqlib/operator_assign.go | 2 - pkg/yqlib/operator_booleans.go | 8 +- pkg/yqlib/operator_collect.go | 2 +- pkg/yqlib/operator_collect_object.go | 2 - pkg/yqlib/operator_collect_test.go | 3 +- pkg/yqlib/operator_comments.go | 14 +- pkg/yqlib/operator_create_map.go | 11 +- pkg/yqlib/operator_delete.go | 5 +- pkg/yqlib/operator_document_index.go | 2 +- pkg/yqlib/operator_encoder_decoder.go | 8 +- pkg/yqlib/operator_entries.go | 34 +++-- pkg/yqlib/operator_env.go | 2 +- pkg/yqlib/operator_file.go | 4 +- pkg/yqlib/operator_flatten.go | 2 - pkg/yqlib/operator_group_by.go | 8 +- pkg/yqlib/operator_has.go | 8 +- pkg/yqlib/operator_keys.go | 7 +- pkg/yqlib/operator_length.go | 2 +- pkg/yqlib/operator_load.go | 4 +- pkg/yqlib/operator_multiply.go | 13 +- pkg/yqlib/operator_parent.go | 3 +- pkg/yqlib/operator_path.go | 2 +- pkg/yqlib/operator_pipe.go | 3 +- pkg/yqlib/operator_recursive_descent.go | 3 +- pkg/yqlib/operator_reduce.go | 4 +- pkg/yqlib/operator_select.go | 4 +- pkg/yqlib/operator_select_test.go | 3 +- pkg/yqlib/operator_sort_keys.go | 3 +- pkg/yqlib/operator_strings.go | 25 ++-- pkg/yqlib/operator_style.go | 4 +- pkg/yqlib/operator_subtract.go | 10 +- pkg/yqlib/operator_tag.go | 4 +- pkg/yqlib/operator_traverse_path.go | 27 ++-- pkg/yqlib/operator_union.go | 2 - pkg/yqlib/operator_unique.go | 8 +- pkg/yqlib/operator_value_test.go | 18 ++- pkg/yqlib/operator_with.go | 2 - pkg/yqlib/operators.go | 8 +- pkg/yqlib/operators_test.go | 2 - pkg/yqlib/printer.go | 2 +- pkg/yqlib/printer_test.go | 18 +-- pkg/yqlib/printer_writer.go | 2 - pkg/yqlib/stream_evaluator.go | 2 - pkg/yqlib/utils.go | 2 +- pkg/yqlib/write_in_place_handler.go | 2 - 70 files changed, 335 insertions(+), 368 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index ae8999ed..7a9f27b7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -3,6 +3,7 @@ run: linters: enable: - errorlint + - gci - gofmt - goimports - gosec diff --git a/cmd/constant.go b/cmd/constant.go index 0b921410..8ae12f77 100644 --- a/cmd/constant.go +++ b/cmd/constant.go @@ -1,22 +1,28 @@ package cmd -var leadingContentPreProcessing = true -var unwrapScalar = true +var ( + leadingContentPreProcessing = true + unwrapScalar = true +) -var writeInplace = false -var outputToJSON = false -var outputFormat = "yaml" +var ( + writeInplace = false + outputToJSON = false + outputFormat = "yaml" +) -var exitStatus = false -var forceColor = false -var forceNoColor = false -var colorsEnabled = false -var indent = 2 -var noDocSeparators = false -var nullInput = false -var verbose = false -var version = false -var prettyPrint = false +var ( + exitStatus = false + forceColor = false + forceNoColor = false + colorsEnabled = false + indent = 2 + noDocSeparators = false + nullInput = false + verbose = false + version = false + prettyPrint = false +) // can be either "" (off), "extract" or "process" var frontMatter = "" diff --git a/cmd/evaluate_all_command.go b/cmd/evaluate_all_command.go index af3c6ec7..9b364cc2 100644 --- a/cmd/evaluate_all_command.go +++ b/cmd/evaluate_all_command.go @@ -9,7 +9,7 @@ import ( ) func createEvaluateAllCommand() *cobra.Command { - var cmdEvalAll = &cobra.Command{ + cmdEvalAll := &cobra.Command{ Use: "eval-all [expression] [yaml_file1]...", Aliases: []string{"ea"}, Short: "Loads _all_ yaml documents of _all_ yaml files and runs expression once", @@ -39,6 +39,7 @@ Note that it consumes more memory than eval. } return cmdEvalAll } + func evaluateAll(cmd *cobra.Command, args []string) error { // 0 args, read std in // 1 arg, null input, process expression diff --git a/cmd/evalute_sequence_command.go b/cmd/evalute_sequence_command.go index e875c4bd..f0a3a7b1 100644 --- a/cmd/evalute_sequence_command.go +++ b/cmd/evalute_sequence_command.go @@ -10,7 +10,7 @@ import ( ) func createEvaluateSequenceCommand() *cobra.Command { - var cmdEvalSequence = &cobra.Command{ + cmdEvalSequence := &cobra.Command{ Use: "eval [expression] [yaml_file1]...", Aliases: []string{"e"}, Short: "Apply the expression to each document in each yaml file in sequence", @@ -44,7 +44,7 @@ expression and prints the result in sequence.`, } func processExpression(expression string) string { - var prettyPrintExp = `(... | (select(tag != "!!str"), select(tag == "!!str") | select(test("(?i)^(y|yes|n|no|on|off)$") | not)) ) style=""` + prettyPrintExp := `(... | (select(tag != "!!str"), select(tag == "!!str") | select(test("(?i)^(y|yes|n|no|on|off)$") | not)) ) style=""` if prettyPrint && expression == "" { return prettyPrintExp } else if prettyPrint { diff --git a/cmd/root.go b/cmd/root.go index 11471d27..be9860de 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -8,7 +8,7 @@ import ( ) func New() *cobra.Command { - var rootCmd = &cobra.Command{ + rootCmd := &cobra.Command{ Use: "yq", Short: "yq is a lightweight and portable command-line YAML processor.", Long: `yq is a portable command-line YAML processor (https://github.com/mikefarah/yq/) @@ -20,14 +20,13 @@ See https://mikefarah.gitbook.io/yq/ for detailed documentation and examples.`, } cmd.Println(cmd.UsageString()) return nil - }, PersistentPreRun: func(cmd *cobra.Command, args []string) { cmd.SetOut(cmd.OutOrStdout()) - var format = logging.MustStringFormatter( + format := logging.MustStringFormatter( `%{color}%{time:15:04:05} %{shortfunc} [%{level:.4s}]%{color:reset} %{message}`, ) - var backend = logging.AddModuleLevel( + backend := logging.AddModuleLevel( logging.NewBackendFormatter(logging.NewLogBackend(os.Stderr, "", 0), format)) if verbose { diff --git a/cmd/shell-completion.go b/cmd/shell-completion.go index 0fadfb12..40232ae3 100644 --- a/cmd/shell-completion.go +++ b/cmd/shell-completion.go @@ -56,6 +56,5 @@ $ yq shell-completion fish > ~/.config/fish/completions/yq.fish err = cmd.Root().GenPowerShellCompletion(os.Stdout) } return err - }, } diff --git a/cmd/utils.go b/cmd/utils.go index 483ea426..a59882ea 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -46,7 +46,6 @@ func initCommand(cmd *cobra.Command, args []string) (firstFileIndex int, err err } func configurePrinterWriter(format yqlib.PrinterOutputFormat, out io.Writer) yqlib.PrinterWriter { - var printerWriter yqlib.PrinterWriter if splitFileExp != "" { diff --git a/cmd/version_test.go b/cmd/version_test.go index 1ffc64ae..419c98f5 100644 --- a/cmd/version_test.go +++ b/cmd/version_test.go @@ -3,7 +3,7 @@ package cmd import "testing" func TestGetVersionDisplay(t *testing.T) { - var expectedVersion = ProductName + " (https://github.com/mikefarah/yq/) version " + Version + expectedVersion := ProductName + " (https://github.com/mikefarah/yq/) version " + Version if VersionPrerelease != "" { expectedVersion = expectedVersion + "-" + VersionPrerelease } diff --git a/pkg/yqlib/all_at_once_evaluator_test.go b/pkg/yqlib/all_at_once_evaluator_test.go index 2e9abc43..154eb5da 100644 --- a/pkg/yqlib/all_at_once_evaluator_test.go +++ b/pkg/yqlib/all_at_once_evaluator_test.go @@ -31,7 +31,7 @@ var evaluateNodesScenario = []expressionScenario{ } func TestAllAtOnceEvaluateNodes(t *testing.T) { - var evaluator = NewAllAtOnceEvaluator() + evaluator := NewAllAtOnceEvaluator() for _, tt := range evaluateNodesScenario { node := test.ParseData(tt.document) list, _ := evaluator.EvaluateNodes(tt.expression, &node) diff --git a/pkg/yqlib/candidate_node.go b/pkg/yqlib/candidate_node.go index b2c0e47d..920d4536 100644 --- a/pkg/yqlib/candidate_node.go +++ b/pkg/yqlib/candidate_node.go @@ -87,7 +87,7 @@ func (n *CandidateNode) createChildPath(path interface{}) []interface{} { return newPath } - //don't use append as they may actually modify the path of the orignal node! + // don't use append as they may actually modify the path of the orignal node! newPath := make([]interface{}, len(n.Path)+1) copy(newPath, n.Path) newPath[len(n.Path)] = path @@ -105,7 +105,6 @@ func (n *CandidateNode) Copy() (*CandidateNode, error) { // updates this candidate from the given candidate node func (n *CandidateNode) UpdateFrom(other *CandidateNode) { - n.UpdateAttributesFrom(other) n.Node.Content = other.Node.Content n.Node.Value = other.Node.Value diff --git a/pkg/yqlib/context.go b/pkg/yqlib/context.go index 6be006f0..de666bb2 100644 --- a/pkg/yqlib/context.go +++ b/pkg/yqlib/context.go @@ -88,7 +88,6 @@ func (n *Context) DeepClone() Context { func (n *Context) Clone() Context { clone := Context{} err := copier.Copy(&clone, n) - if err != nil { log.Error("Error cloning context :(") panic(err) diff --git a/pkg/yqlib/data_tree_navigator.go b/pkg/yqlib/data_tree_navigator.go index 13659eaa..6a9d1ce1 100644 --- a/pkg/yqlib/data_tree_navigator.go +++ b/pkg/yqlib/data_tree_navigator.go @@ -13,8 +13,7 @@ type DataTreeNavigator interface { GetMatchingNodes(context Context, expressionNode *ExpressionNode) (Context, error) } -type dataTreeNavigator struct { -} +type dataTreeNavigator struct{} func NewDataTreeNavigator() DataTreeNavigator { return &dataTreeNavigator{} @@ -37,5 +36,4 @@ func (d *dataTreeNavigator) GetMatchingNodes(context Context, expressionNode *Ex return handler(d, context, expressionNode) } return Context{}, fmt.Errorf("Unknown operator %v", expressionNode.Operation.OperationType) - } diff --git a/pkg/yqlib/encoder.go b/pkg/yqlib/encoder.go index 71ec6c38..a1dce667 100644 --- a/pkg/yqlib/encoder.go +++ b/pkg/yqlib/encoder.go @@ -29,14 +29,13 @@ func NewYamlEncoder(destination io.Writer, indent int, colorise bool) Encoder { } func (ye *yamlEncoder) Encode(node *yaml.Node) error { - destination := ye.destination tempBuffer := bytes.NewBuffer(nil) if ye.colorise { destination = tempBuffer } - var encoder = yaml.NewEncoder(destination) + encoder := yaml.NewEncoder(destination) encoder.SetIndent(ye.indent) // TODO: work out if the first doc had a separator or not. @@ -61,7 +60,6 @@ type jsonEncoder struct { } func mapKeysToStrings(node *yaml.Node) { - if node.Kind == yaml.MappingNode { for index, child := range node.Content { if index%2 == 0 { // its a map key @@ -76,10 +74,10 @@ func mapKeysToStrings(node *yaml.Node) { } func NewJsonEncoder(destination io.Writer, indent int) Encoder { - var encoder = json.NewEncoder(destination) + encoder := json.NewEncoder(destination) encoder.SetEscapeHTML(false) // do not escape html chars e.g. &, <, > - var indentString = "" + indentString := "" for index := 0; index < indent; index++ { indentString = indentString + " " diff --git a/pkg/yqlib/encoder_properties_test.go b/pkg/yqlib/encoder_properties_test.go index df973734..8f64cf47 100644 --- a/pkg/yqlib/encoder_properties_test.go +++ b/pkg/yqlib/encoder_properties_test.go @@ -13,7 +13,7 @@ func yamlToProps(sampleYaml string) string { var output bytes.Buffer writer := bufio.NewWriter(&output) - var propsEncoder = NewPropertiesEncoder(writer) + propsEncoder := NewPropertiesEncoder(writer) inputs, err := readDocuments(strings.NewReader(sampleYaml), "sample.yml", 0) if err != nil { panic(err) @@ -29,50 +29,50 @@ func yamlToProps(sampleYaml string) string { } func TestPropertiesEncoderSimple(t *testing.T) { - var sampleYaml = `a: 'bob cool'` + sampleYaml := `a: 'bob cool'` - var expectedJson = `a = bob cool` - var actualProps = yamlToProps(sampleYaml) + expectedJson := `a = bob cool` + actualProps := yamlToProps(sampleYaml) test.AssertResult(t, expectedJson, actualProps) } func TestPropertiesEncoderSimpleWithComments(t *testing.T) { - var sampleYaml = `a: 'bob cool' # line` + sampleYaml := `a: 'bob cool' # line` - var expectedJson = `# line + expectedJson := `# line a = bob cool` - var actualProps = yamlToProps(sampleYaml) + actualProps := yamlToProps(sampleYaml) test.AssertResult(t, expectedJson, actualProps) } func TestPropertiesEncoderDeep(t *testing.T) { - var sampleYaml = `a: + sampleYaml := `a: b: "bob cool" ` - var expectedJson = `a.b = bob cool` - var actualProps = yamlToProps(sampleYaml) + expectedJson := `a.b = bob cool` + actualProps := yamlToProps(sampleYaml) test.AssertResult(t, expectedJson, actualProps) } func TestPropertiesEncoderDeepWithComments(t *testing.T) { - var sampleYaml = `a: # a thing + sampleYaml := `a: # a thing b: "bob cool" # b thing ` - var expectedJson = `# b thing + expectedJson := `# b thing a.b = bob cool` - var actualProps = yamlToProps(sampleYaml) + actualProps := yamlToProps(sampleYaml) test.AssertResult(t, expectedJson, actualProps) } func TestPropertiesEncoderArray(t *testing.T) { - var sampleYaml = `a: + sampleYaml := `a: b: [{c: dog}, {c: cat}] ` - var expectedJson = `a.b.0.c = dog + expectedJson := `a.b.0.c = dog a.b.1.c = cat` - var actualProps = yamlToProps(sampleYaml) + actualProps := yamlToProps(sampleYaml) test.AssertResult(t, expectedJson, actualProps) } diff --git a/pkg/yqlib/encoder_test.go b/pkg/yqlib/encoder_test.go index 283e89ee..f9283c45 100644 --- a/pkg/yqlib/encoder_test.go +++ b/pkg/yqlib/encoder_test.go @@ -13,7 +13,7 @@ func yamlToJson(sampleYaml string, indent int) string { var output bytes.Buffer writer := bufio.NewWriter(&output) - var jsonEncoder = NewJsonEncoder(writer, indent) + jsonEncoder := NewJsonEncoder(writer, indent) inputs, err := readDocuments(strings.NewReader(sampleYaml), "sample.yml", 0) if err != nil { panic(err) @@ -29,12 +29,12 @@ func yamlToJson(sampleYaml string, indent int) string { } func TestJsonEncoderPreservesObjectOrder(t *testing.T) { - var sampleYaml = `zabbix: winner + sampleYaml := `zabbix: winner apple: great banana: - {cobra: kai, angus: bob} ` - var expectedJson = `{ + expectedJson := `{ "zabbix": "winner", "apple": "great", "banana": [ @@ -44,31 +44,31 @@ banana: } ] }` - var actualJson = yamlToJson(sampleYaml, 2) + actualJson := yamlToJson(sampleYaml, 2) test.AssertResult(t, expectedJson, actualJson) } func TestJsonNullInArray(t *testing.T) { - var sampleYaml = `[null]` - var actualJson = yamlToJson(sampleYaml, 0) + sampleYaml := `[null]` + actualJson := yamlToJson(sampleYaml, 0) test.AssertResult(t, sampleYaml, actualJson) } func TestJsonNull(t *testing.T) { - var sampleYaml = `null` - var actualJson = yamlToJson(sampleYaml, 0) + sampleYaml := `null` + actualJson := yamlToJson(sampleYaml, 0) test.AssertResult(t, sampleYaml, actualJson) } func TestJsonNullInObject(t *testing.T) { - var sampleYaml = `{x: null}` - var actualJson = yamlToJson(sampleYaml, 0) + sampleYaml := `{x: null}` + actualJson := yamlToJson(sampleYaml, 0) test.AssertResult(t, `{"x":null}`, actualJson) } func TestJsonEncoderDoesNotEscapeHTMLChars(t *testing.T) { - var sampleYaml = `build: "( ./lint && ./format && ./compile ) < src.code"` - var expectedJson = `{"build":"( ./lint && ./format && ./compile ) < src.code"}` - var actualJson = yamlToJson(sampleYaml, 0) + sampleYaml := `build: "( ./lint && ./format && ./compile ) < src.code"` + expectedJson := `{"build":"( ./lint && ./format && ./compile ) < src.code"}` + actualJson := yamlToJson(sampleYaml, 0) test.AssertResult(t, expectedJson, actualJson) } diff --git a/pkg/yqlib/expression_parser.go b/pkg/yqlib/expression_parser.go index 7306e1e8..b3b73371 100644 --- a/pkg/yqlib/expression_parser.go +++ b/pkg/yqlib/expression_parser.go @@ -38,14 +38,14 @@ func (p *expressionParserImpl) ParseExpression(expression string) (*ExpressionNo } func (p *expressionParserImpl) createExpressionTree(postFixPath []*Operation) (*ExpressionNode, error) { - var stack = make([]*ExpressionNode, 0) + stack := make([]*ExpressionNode, 0) if len(postFixPath) == 0 { return nil, nil } for _, Operation := range postFixPath { - var newNode = ExpressionNode{Operation: Operation} + newNode := ExpressionNode{Operation: Operation} log.Debugf("pathTree %v ", Operation.toString()) if Operation.OperationType.NumArgs > 0 { numArgs := Operation.OperationType.NumArgs diff --git a/pkg/yqlib/expression_parser_test.go b/pkg/yqlib/expression_parser_test.go index f1e05e17..1e814490 100644 --- a/pkg/yqlib/expression_parser_test.go +++ b/pkg/yqlib/expression_parser_test.go @@ -10,6 +10,7 @@ func TestParserNoMatchingCloseCollect(t *testing.T) { _, err := NewExpressionParser().ParseExpression("[1,2") test.AssertResultComplex(t, "Bad expression, could not find matching `]`", err.Error()) } + func TestParserNoMatchingCloseObjectInCollect(t *testing.T) { _, err := NewExpressionParser().ParseExpression(`[{"b": "c"]`) test.AssertResultComplex(t, "Bad expression, could not find matching `}`", err.Error()) diff --git a/pkg/yqlib/expression_postfix.go b/pkg/yqlib/expression_postfix.go index f9938680..4a5789b5 100644 --- a/pkg/yqlib/expression_postfix.go +++ b/pkg/yqlib/expression_postfix.go @@ -11,8 +11,7 @@ type expressionPostFixer interface { ConvertToPostfix([]*token) ([]*Operation, error) } -type expressionPostFixerImpl struct { -} +type expressionPostFixerImpl struct{} func newExpressionPostFixer() expressionPostFixer { return &expressionPostFixerImpl{} @@ -39,8 +38,8 @@ func validateNoOpenTokens(token *token) error { func (p *expressionPostFixerImpl) ConvertToPostfix(infixTokens []*token) ([]*Operation, error) { var result []*Operation // surround the whole thing with brackets - var opStack = []*token{{TokenType: openBracket}} - var tokens = append(infixTokens, &token{TokenType: closeBracket}) + opStack := []*token{{TokenType: openBracket}} + tokens := append(infixTokens, &token{TokenType: closeBracket}) for _, currentToken := range tokens { log.Debugf("postfix processing currentToken %v", currentToken.toString(true)) @@ -70,7 +69,7 @@ func (p *expressionPostFixerImpl) ConvertToPostfix(infixTokens []*token) ([]*Ope opStack = opStack[0 : len(opStack)-1] log.Debugf("deleting open bracket from opstack") - //and append a collect to the result + // and append a collect to the result // hack - see if there's the optional traverse flag // on the close op - move it to the collect op. // allows for .["cat"]? @@ -84,8 +83,8 @@ func (p *expressionPostFixerImpl) ConvertToPostfix(infixTokens []*token) ([]*Ope result = append(result, &Operation{OperationType: shortPipeOpType}) log.Debugf("put shortpipe onto the result") - //traverseArrayCollect is a sneaky op that needs to be included too - //when closing a [] + // traverseArrayCollect is a sneaky op that needs to be included too + // when closing a [] if len(opStack) > 0 && opStack[len(opStack)-1].Operation != nil && opStack[len(opStack)-1].Operation.OperationType == traverseArrayOpType { opStack, result = popOpToResult(opStack, result) } @@ -106,7 +105,7 @@ func (p *expressionPostFixerImpl) ConvertToPostfix(infixTokens []*token) ([]*Ope opStack = opStack[0 : len(opStack)-1] default: - var currentPrecedence = currentToken.Operation.OperationType.Precedence + currentPrecedence := currentToken.Operation.OperationType.Precedence // pop off higher precedent operators onto the result for len(opStack) > 0 && opStack[len(opStack)-1].TokenType == operationToken && diff --git a/pkg/yqlib/expression_processing_test.go b/pkg/yqlib/expression_processing_test.go index 9e38eff3..699b17e5 100644 --- a/pkg/yqlib/expression_processing_test.go +++ b/pkg/yqlib/expression_processing_test.go @@ -282,8 +282,10 @@ var pathTests = []struct { }, } -var tokeniser = newExpressionTokeniser() -var postFixer = newExpressionPostFixer() +var ( + tokeniser = newExpressionTokeniser() + postFixer = newExpressionPostFixer() +) func TestPathParsing(t *testing.T) { for _, tt := range pathTests { diff --git a/pkg/yqlib/expression_tokeniser.go b/pkg/yqlib/expression_tokeniser.go index 5951ca20..84aca61b 100644 --- a/pkg/yqlib/expression_tokeniser.go +++ b/pkg/yqlib/expression_tokeniser.go @@ -56,7 +56,6 @@ func (t *token) toString(detail bool) string { return "}" } else if t.TokenType == traverseArrayCollect { return ".[" - } else { return "NFI" } @@ -134,7 +133,7 @@ func opTokenWithPrefs(op *operationType, assignOpType *operationType, preference func extractNumberParamter(value string) (int, error) { parameterParser := regexp.MustCompile(`.*\(([0-9]+)\)`) matches := parameterParser.FindStringSubmatch(value) - var indent, errParsingInt = strconv.ParseInt(matches[1], 10, 32) // nolint + indent, errParsingInt := strconv.ParseInt(matches[1], 10, 32) // nolint if errParsingInt != nil { return 0, errParsingInt } @@ -144,7 +143,7 @@ func extractNumberParamter(value string) (int, error) { func flattenWithDepth() lex.Action { return func(s *lex.Scanner, m *machines.Match) (interface{}, error) { value := string(m.Bytes) - var depth, errParsingInt = extractNumberParamter(value) + depth, errParsingInt := extractNumberParamter(value) if errParsingInt != nil { return nil, errParsingInt } @@ -158,7 +157,7 @@ func flattenWithDepth() lex.Action { func encodeWithIndent(outputFormat PrinterOutputFormat) lex.Action { return func(s *lex.Scanner, m *machines.Match) (interface{}, error) { value := string(m.Bytes) - var indent, errParsingInt = extractNumberParamter(value) + indent, errParsingInt := extractNumberParamter(value) if errParsingInt != nil { return nil, errParsingInt } @@ -196,8 +195,8 @@ func unwrap(value string) string { func numberValue() lex.Action { return func(s *lex.Scanner, m *machines.Match) (interface{}, error) { - var numberString = string(m.Bytes) - var number, errParsingInt = strconv.ParseInt(numberString, 10, 64) // nolint + numberString := string(m.Bytes) + number, errParsingInt := strconv.ParseInt(numberString, 10, 64) // nolint if errParsingInt != nil { return nil, errParsingInt } @@ -208,10 +207,10 @@ func numberValue() lex.Action { func hexValue() lex.Action { return func(s *lex.Scanner, m *machines.Match) (interface{}, error) { - var originalString = string(m.Bytes) - var numberString = originalString[2:] + originalString := string(m.Bytes) + numberString := originalString[2:] log.Debugf("numberString: %v", numberString) - var number, errParsingInt = strconv.ParseInt(numberString, 16, 64) // nolint + number, errParsingInt := strconv.ParseInt(numberString, 16, 64) // nolint if errParsingInt != nil { return nil, errParsingInt } @@ -222,8 +221,8 @@ func hexValue() lex.Action { func floatValue() lex.Action { return func(s *lex.Scanner, m *machines.Match) (interface{}, error) { - var numberString = string(m.Bytes) - var number, errParsingInt = strconv.ParseFloat(numberString, 64) // nolint + numberString := string(m.Bytes) + number, errParsingInt := strconv.ParseFloat(numberString, 64) // nolint if errParsingInt != nil { return nil, errParsingInt } @@ -271,7 +270,7 @@ func envOp(strenv bool) lex.Action { value = value[7 : len(value)-1] preferences.StringValue = true } else { - //env( ) + // env( ) value = value[4 : len(value)-1] } @@ -302,11 +301,15 @@ func initLexer() (*lex.Lexer, error) { lexer.Add([]byte(`\)`), literalToken(closeBracket, true)) lexer.Add([]byte(`\.\[`), literalToken(traverseArrayCollect, false)) - lexer.Add([]byte(`\.\.`), opTokenWithPrefs(recursiveDescentOpType, nil, recursiveDescentPreferences{RecurseArray: true, - TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: false}})) + lexer.Add([]byte(`\.\.`), opTokenWithPrefs(recursiveDescentOpType, nil, recursiveDescentPreferences{ + RecurseArray: true, + TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: false}, + })) - lexer.Add([]byte(`\.\.\.`), opTokenWithPrefs(recursiveDescentOpType, nil, recursiveDescentPreferences{RecurseArray: true, - TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: true}})) + lexer.Add([]byte(`\.\.\.`), opTokenWithPrefs(recursiveDescentOpType, nil, recursiveDescentPreferences{ + RecurseArray: true, + TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: true}, + })) lexer.Add([]byte(`,`), opToken(unionOpType)) lexer.Add([]byte(`:\s*`), opToken(createMapOpType)) @@ -459,7 +462,7 @@ type expressionTokeniserImpl struct { } func newExpressionTokeniser() expressionTokeniser { - var lexer, err = initLexer() + lexer, err := initLexer() if err != nil { panic(err) } @@ -468,7 +471,6 @@ func newExpressionTokeniser() expressionTokeniser { func (p *expressionTokeniserImpl) Tokenise(expression string) ([]*token, error) { scanner, err := p.lexer.Scanner([]byte(expression)) - if err != nil { return nil, fmt.Errorf("Parsing expression: %w", err) } @@ -484,7 +486,7 @@ func (p *expressionTokeniserImpl) Tokenise(expression string) ([]*token, error) return nil, fmt.Errorf("Parsing expression: %w", err) } } - var postProcessedTokens = make([]*token, 0) + postProcessedTokens := make([]*token, 0) skipNextToken := false @@ -507,7 +509,7 @@ func (p *expressionTokeniserImpl) handleToken(tokens []*token, index int, postPr if currentToken.TokenType == traverseArrayCollect { // `.[exp]`` works by creating a traversal array of [self, exp] and piping that into the traverse array operator - //need to put a traverse array then a collect currentToken + // need to put a traverse array then a collect currentToken // do this by adding traverse then converting currentToken to collect log.Debug(" adding self") diff --git a/pkg/yqlib/front_matter.go b/pkg/yqlib/front_matter.go index 2e198882..85e6004c 100644 --- a/pkg/yqlib/front_matter.go +++ b/pkg/yqlib/front_matter.go @@ -90,5 +90,4 @@ func (f *frontMatterHandlerImpl) Split() error { safelyCloseFile(yamlTempFile) return nil - } diff --git a/pkg/yqlib/lib.go b/pkg/yqlib/lib.go index b40c519e..ade142e6 100644 --- a/pkg/yqlib/lib.go +++ b/pkg/yqlib/lib.go @@ -22,9 +22,11 @@ type operationType struct { Handler operatorHandler } -var orOpType = &operationType{Type: "OR", NumArgs: 2, Precedence: 20, Handler: orOperator} -var andOpType = &operationType{Type: "AND", NumArgs: 2, Precedence: 20, Handler: andOperator} -var reduceOpType = &operationType{Type: "REDUCE", NumArgs: 2, Precedence: 35, Handler: reduceOperator} +var ( + orOpType = &operationType{Type: "OR", NumArgs: 2, Precedence: 20, Handler: orOperator} + andOpType = &operationType{Type: "AND", NumArgs: 2, Precedence: 20, Handler: andOperator} + reduceOpType = &operationType{Type: "REDUCE", NumArgs: 2, Precedence: 35, Handler: reduceOperator} +) var blockOpType = &operationType{Type: "BLOCK", Precedence: 10, NumArgs: 2, Handler: emptyOperator} @@ -32,96 +34,124 @@ var unionOpType = &operationType{Type: "UNION", NumArgs: 2, Precedence: 10, Hand var pipeOpType = &operationType{Type: "PIPE", NumArgs: 2, Precedence: 30, Handler: pipeOperator} -var assignOpType = &operationType{Type: "ASSIGN", NumArgs: 2, Precedence: 40, Handler: assignUpdateOperator} -var addAssignOpType = &operationType{Type: "ADD_ASSIGN", NumArgs: 2, Precedence: 40, Handler: addAssignOperator} -var subtractAssignOpType = &operationType{Type: "SUBTRACT_ASSIGN", NumArgs: 2, Precedence: 40, Handler: subtractAssignOperator} +var ( + assignOpType = &operationType{Type: "ASSIGN", NumArgs: 2, Precedence: 40, Handler: assignUpdateOperator} + addAssignOpType = &operationType{Type: "ADD_ASSIGN", NumArgs: 2, Precedence: 40, Handler: addAssignOperator} + subtractAssignOpType = &operationType{Type: "SUBTRACT_ASSIGN", NumArgs: 2, Precedence: 40, Handler: subtractAssignOperator} +) -var assignAttributesOpType = &operationType{Type: "ASSIGN_ATTRIBUTES", NumArgs: 2, Precedence: 40, Handler: assignAttributesOperator} -var assignStyleOpType = &operationType{Type: "ASSIGN_STYLE", NumArgs: 2, Precedence: 40, Handler: assignStyleOperator} -var assignVariableOpType = &operationType{Type: "ASSIGN_VARIABLE", NumArgs: 2, Precedence: 40, Handler: assignVariableOperator} -var assignTagOpType = &operationType{Type: "ASSIGN_TAG", NumArgs: 2, Precedence: 40, Handler: assignTagOperator} -var assignCommentOpType = &operationType{Type: "ASSIGN_COMMENT", NumArgs: 2, Precedence: 40, Handler: assignCommentsOperator} -var assignAnchorOpType = &operationType{Type: "ASSIGN_ANCHOR", NumArgs: 2, Precedence: 40, Handler: assignAnchorOperator} -var assignAliasOpType = &operationType{Type: "ASSIGN_ALIAS", NumArgs: 2, Precedence: 40, Handler: assignAliasOperator} +var ( + assignAttributesOpType = &operationType{Type: "ASSIGN_ATTRIBUTES", NumArgs: 2, Precedence: 40, Handler: assignAttributesOperator} + assignStyleOpType = &operationType{Type: "ASSIGN_STYLE", NumArgs: 2, Precedence: 40, Handler: assignStyleOperator} + assignVariableOpType = &operationType{Type: "ASSIGN_VARIABLE", NumArgs: 2, Precedence: 40, Handler: assignVariableOperator} + assignTagOpType = &operationType{Type: "ASSIGN_TAG", NumArgs: 2, Precedence: 40, Handler: assignTagOperator} + assignCommentOpType = &operationType{Type: "ASSIGN_COMMENT", NumArgs: 2, Precedence: 40, Handler: assignCommentsOperator} + assignAnchorOpType = &operationType{Type: "ASSIGN_ANCHOR", NumArgs: 2, Precedence: 40, Handler: assignAnchorOperator} + assignAliasOpType = &operationType{Type: "ASSIGN_ALIAS", NumArgs: 2, Precedence: 40, Handler: assignAliasOperator} +) -var multiplyOpType = &operationType{Type: "MULTIPLY", NumArgs: 2, Precedence: 42, Handler: multiplyOperator} -var addOpType = &operationType{Type: "ADD", NumArgs: 2, Precedence: 42, Handler: addOperator} -var subtractOpType = &operationType{Type: "SUBTRACT", NumArgs: 2, Precedence: 42, Handler: subtractOperator} -var alternativeOpType = &operationType{Type: "ALTERNATIVE", NumArgs: 2, Precedence: 42, Handler: alternativeOperator} +var ( + multiplyOpType = &operationType{Type: "MULTIPLY", NumArgs: 2, Precedence: 42, Handler: multiplyOperator} + addOpType = &operationType{Type: "ADD", NumArgs: 2, Precedence: 42, Handler: addOperator} + subtractOpType = &operationType{Type: "SUBTRACT", NumArgs: 2, Precedence: 42, Handler: subtractOperator} + alternativeOpType = &operationType{Type: "ALTERNATIVE", NumArgs: 2, Precedence: 42, Handler: alternativeOperator} +) -var equalsOpType = &operationType{Type: "EQUALS", NumArgs: 2, Precedence: 40, Handler: equalsOperator} -var notEqualsOpType = &operationType{Type: "EQUALS", NumArgs: 2, Precedence: 40, Handler: notEqualsOperator} +var ( + equalsOpType = &operationType{Type: "EQUALS", NumArgs: 2, Precedence: 40, Handler: equalsOperator} + notEqualsOpType = &operationType{Type: "EQUALS", NumArgs: 2, Precedence: 40, Handler: notEqualsOperator} +) -//createmap needs to be above union, as we use union to build the components of the objects +// createmap needs to be above union, as we use union to build the components of the objects var createMapOpType = &operationType{Type: "CREATE_MAP", NumArgs: 2, Precedence: 15, Handler: createMapOperator} var shortPipeOpType = &operationType{Type: "SHORT_PIPE", NumArgs: 2, Precedence: 45, Handler: pipeOperator} -var lengthOpType = &operationType{Type: "LENGTH", NumArgs: 0, Precedence: 50, Handler: lengthOperator} -var collectOpType = &operationType{Type: "COLLECT", NumArgs: 0, Precedence: 50, Handler: collectOperator} -var encodeOpType = &operationType{Type: "ENCODE", NumArgs: 0, Precedence: 50, Handler: encodeOperator} -var decodeOpType = &operationType{Type: "DECODE", NumArgs: 0, Precedence: 50, Handler: decodeOperator} +var ( + lengthOpType = &operationType{Type: "LENGTH", NumArgs: 0, Precedence: 50, Handler: lengthOperator} + collectOpType = &operationType{Type: "COLLECT", NumArgs: 0, Precedence: 50, Handler: collectOperator} + encodeOpType = &operationType{Type: "ENCODE", NumArgs: 0, Precedence: 50, Handler: encodeOperator} + decodeOpType = &operationType{Type: "DECODE", NumArgs: 0, Precedence: 50, Handler: decodeOperator} +) -var anyOpType = &operationType{Type: "ANY", NumArgs: 0, Precedence: 50, Handler: anyOperator} -var allOpType = &operationType{Type: "ALL", NumArgs: 0, Precedence: 50, Handler: allOperator} -var containsOpType = &operationType{Type: "CONTAINS", NumArgs: 1, Precedence: 50, Handler: containsOperator} -var anyConditionOpType = &operationType{Type: "ANY_CONDITION", NumArgs: 1, Precedence: 50, Handler: anyOperator} -var allConditionOpType = &operationType{Type: "ALL_CONDITION", NumArgs: 1, Precedence: 50, Handler: allOperator} +var ( + anyOpType = &operationType{Type: "ANY", NumArgs: 0, Precedence: 50, Handler: anyOperator} + allOpType = &operationType{Type: "ALL", NumArgs: 0, Precedence: 50, Handler: allOperator} + containsOpType = &operationType{Type: "CONTAINS", NumArgs: 1, Precedence: 50, Handler: containsOperator} + anyConditionOpType = &operationType{Type: "ANY_CONDITION", NumArgs: 1, Precedence: 50, Handler: anyOperator} + allConditionOpType = &operationType{Type: "ALL_CONDITION", NumArgs: 1, Precedence: 50, Handler: allOperator} +) -var toEntriesOpType = &operationType{Type: "TO_ENTRIES", NumArgs: 0, Precedence: 50, Handler: toEntriesOperator} -var fromEntriesOpType = &operationType{Type: "FROM_ENTRIES", NumArgs: 0, Precedence: 50, Handler: fromEntriesOperator} -var withEntriesOpType = &operationType{Type: "WITH_ENTRIES", NumArgs: 1, Precedence: 50, Handler: withEntriesOperator} +var ( + toEntriesOpType = &operationType{Type: "TO_ENTRIES", NumArgs: 0, Precedence: 50, Handler: toEntriesOperator} + fromEntriesOpType = &operationType{Type: "FROM_ENTRIES", NumArgs: 0, Precedence: 50, Handler: fromEntriesOperator} + withEntriesOpType = &operationType{Type: "WITH_ENTRIES", NumArgs: 1, Precedence: 50, Handler: withEntriesOperator} +) var withOpType = &operationType{Type: "WITH", NumArgs: 1, Precedence: 50, Handler: withOperator} -var splitDocumentOpType = &operationType{Type: "SPLIT_DOC", NumArgs: 0, Precedence: 50, Handler: splitDocumentOperator} -var getVariableOpType = &operationType{Type: "GET_VARIABLE", NumArgs: 0, Precedence: 55, Handler: getVariableOperator} -var getStyleOpType = &operationType{Type: "GET_STYLE", NumArgs: 0, Precedence: 50, Handler: getStyleOperator} -var getTagOpType = &operationType{Type: "GET_TAG", NumArgs: 0, Precedence: 50, Handler: getTagOperator} +var ( + splitDocumentOpType = &operationType{Type: "SPLIT_DOC", NumArgs: 0, Precedence: 50, Handler: splitDocumentOperator} + getVariableOpType = &operationType{Type: "GET_VARIABLE", NumArgs: 0, Precedence: 55, Handler: getVariableOperator} + getStyleOpType = &operationType{Type: "GET_STYLE", NumArgs: 0, Precedence: 50, Handler: getStyleOperator} + getTagOpType = &operationType{Type: "GET_TAG", NumArgs: 0, Precedence: 50, Handler: getTagOperator} +) -var getKeyOpType = &operationType{Type: "GET_KEY", NumArgs: 0, Precedence: 50, Handler: getKeyOperator} -var getParentOpType = &operationType{Type: "GET_PARENT", NumArgs: 0, Precedence: 50, Handler: getParentOperator} +var ( + getKeyOpType = &operationType{Type: "GET_KEY", NumArgs: 0, Precedence: 50, Handler: getKeyOperator} + getParentOpType = &operationType{Type: "GET_PARENT", NumArgs: 0, Precedence: 50, Handler: getParentOperator} +) -var getCommentOpType = &operationType{Type: "GET_COMMENT", NumArgs: 0, Precedence: 50, Handler: getCommentsOperator} -var getAnchorOpType = &operationType{Type: "GET_ANCHOR", NumArgs: 0, Precedence: 50, Handler: getAnchorOperator} -var getAliasOptype = &operationType{Type: "GET_ALIAS", NumArgs: 0, Precedence: 50, Handler: getAliasOperator} -var getDocumentIndexOpType = &operationType{Type: "GET_DOCUMENT_INDEX", NumArgs: 0, Precedence: 50, Handler: getDocumentIndexOperator} -var getFilenameOpType = &operationType{Type: "GET_FILENAME", NumArgs: 0, Precedence: 50, Handler: getFilenameOperator} -var getFileIndexOpType = &operationType{Type: "GET_FILE_INDEX", NumArgs: 0, Precedence: 50, Handler: getFileIndexOperator} -var getPathOpType = &operationType{Type: "GET_PATH", NumArgs: 0, Precedence: 50, Handler: getPathOperator} +var ( + getCommentOpType = &operationType{Type: "GET_COMMENT", NumArgs: 0, Precedence: 50, Handler: getCommentsOperator} + getAnchorOpType = &operationType{Type: "GET_ANCHOR", NumArgs: 0, Precedence: 50, Handler: getAnchorOperator} + getAliasOptype = &operationType{Type: "GET_ALIAS", NumArgs: 0, Precedence: 50, Handler: getAliasOperator} + getDocumentIndexOpType = &operationType{Type: "GET_DOCUMENT_INDEX", NumArgs: 0, Precedence: 50, Handler: getDocumentIndexOperator} + getFilenameOpType = &operationType{Type: "GET_FILENAME", NumArgs: 0, Precedence: 50, Handler: getFilenameOperator} + getFileIndexOpType = &operationType{Type: "GET_FILE_INDEX", NumArgs: 0, Precedence: 50, Handler: getFileIndexOperator} + getPathOpType = &operationType{Type: "GET_PATH", NumArgs: 0, Precedence: 50, Handler: getPathOperator} +) -var explodeOpType = &operationType{Type: "EXPLODE", NumArgs: 1, Precedence: 50, Handler: explodeOperator} -var sortKeysOpType = &operationType{Type: "SORT_KEYS", NumArgs: 1, Precedence: 50, Handler: sortKeysOperator} -var joinStringOpType = &operationType{Type: "JOIN", NumArgs: 1, Precedence: 50, Handler: joinStringOperator} -var subStringOpType = &operationType{Type: "SUBSTR", NumArgs: 1, Precedence: 50, Handler: substituteStringOperator} -var matchOpType = &operationType{Type: "MATCH", NumArgs: 1, Precedence: 50, Handler: matchOperator} -var captureOpType = &operationType{Type: "CAPTURE", NumArgs: 1, Precedence: 50, Handler: captureOperator} -var testOpType = &operationType{Type: "TEST", NumArgs: 1, Precedence: 50, Handler: testOperator} -var splitStringOpType = &operationType{Type: "SPLIT", NumArgs: 1, Precedence: 50, Handler: splitStringOperator} +var ( + explodeOpType = &operationType{Type: "EXPLODE", NumArgs: 1, Precedence: 50, Handler: explodeOperator} + sortKeysOpType = &operationType{Type: "SORT_KEYS", NumArgs: 1, Precedence: 50, Handler: sortKeysOperator} + joinStringOpType = &operationType{Type: "JOIN", NumArgs: 1, Precedence: 50, Handler: joinStringOperator} + subStringOpType = &operationType{Type: "SUBSTR", NumArgs: 1, Precedence: 50, Handler: substituteStringOperator} + matchOpType = &operationType{Type: "MATCH", NumArgs: 1, Precedence: 50, Handler: matchOperator} + captureOpType = &operationType{Type: "CAPTURE", NumArgs: 1, Precedence: 50, Handler: captureOperator} + testOpType = &operationType{Type: "TEST", NumArgs: 1, Precedence: 50, Handler: testOperator} + splitStringOpType = &operationType{Type: "SPLIT", NumArgs: 1, Precedence: 50, Handler: splitStringOperator} +) var loadOpType = &operationType{Type: "LOAD", NumArgs: 1, Precedence: 50, Handler: loadYamlOperator} var keysOpType = &operationType{Type: "KEYS", NumArgs: 0, Precedence: 50, Handler: keysOperator} -var collectObjectOpType = &operationType{Type: "COLLECT_OBJECT", NumArgs: 0, Precedence: 50, Handler: collectObjectOperator} -var traversePathOpType = &operationType{Type: "TRAVERSE_PATH", NumArgs: 0, Precedence: 55, Handler: traversePathOperator} -var traverseArrayOpType = &operationType{Type: "TRAVERSE_ARRAY", NumArgs: 2, Precedence: 50, Handler: traverseArrayOperator} +var ( + collectObjectOpType = &operationType{Type: "COLLECT_OBJECT", NumArgs: 0, Precedence: 50, Handler: collectObjectOperator} + traversePathOpType = &operationType{Type: "TRAVERSE_PATH", NumArgs: 0, Precedence: 55, Handler: traversePathOperator} + traverseArrayOpType = &operationType{Type: "TRAVERSE_ARRAY", NumArgs: 2, Precedence: 50, Handler: traverseArrayOperator} +) -var selfReferenceOpType = &operationType{Type: "SELF", NumArgs: 0, Precedence: 55, Handler: selfOperator} -var valueOpType = &operationType{Type: "VALUE", NumArgs: 0, Precedence: 50, Handler: valueOperator} -var envOpType = &operationType{Type: "ENV", NumArgs: 0, Precedence: 50, Handler: envOperator} -var notOpType = &operationType{Type: "NOT", NumArgs: 0, Precedence: 50, Handler: notOperator} -var emptyOpType = &operationType{Type: "EMPTY", Precedence: 50, Handler: emptyOperator} +var ( + selfReferenceOpType = &operationType{Type: "SELF", NumArgs: 0, Precedence: 55, Handler: selfOperator} + valueOpType = &operationType{Type: "VALUE", NumArgs: 0, Precedence: 50, Handler: valueOperator} + envOpType = &operationType{Type: "ENV", NumArgs: 0, Precedence: 50, Handler: envOperator} + notOpType = &operationType{Type: "NOT", NumArgs: 0, Precedence: 50, Handler: notOperator} + emptyOpType = &operationType{Type: "EMPTY", Precedence: 50, Handler: emptyOperator} +) var recursiveDescentOpType = &operationType{Type: "RECURSIVE_DESCENT", NumArgs: 0, Precedence: 50, Handler: recursiveDescentOperator} -var selectOpType = &operationType{Type: "SELECT", NumArgs: 1, Precedence: 50, Handler: selectOperator} -var hasOpType = &operationType{Type: "HAS", NumArgs: 1, Precedence: 50, Handler: hasOperator} -var uniqueOpType = &operationType{Type: "UNIQUE", NumArgs: 0, Precedence: 50, Handler: unique} -var uniqueByOpType = &operationType{Type: "UNIQUE_BY", NumArgs: 1, Precedence: 50, Handler: uniqueBy} -var groupByOpType = &operationType{Type: "GROUP_BY", NumArgs: 1, Precedence: 50, Handler: groupBy} -var flattenOpType = &operationType{Type: "FLATTEN_BY", NumArgs: 0, Precedence: 50, Handler: flattenOp} -var deleteChildOpType = &operationType{Type: "DELETE", NumArgs: 1, Precedence: 40, Handler: deleteChildOperator} +var ( + selectOpType = &operationType{Type: "SELECT", NumArgs: 1, Precedence: 50, Handler: selectOperator} + hasOpType = &operationType{Type: "HAS", NumArgs: 1, Precedence: 50, Handler: hasOperator} + uniqueOpType = &operationType{Type: "UNIQUE", NumArgs: 0, Precedence: 50, Handler: unique} + uniqueByOpType = &operationType{Type: "UNIQUE_BY", NumArgs: 1, Precedence: 50, Handler: uniqueBy} + groupByOpType = &operationType{Type: "GROUP_BY", NumArgs: 1, Precedence: 50, Handler: groupBy} + flattenOpType = &operationType{Type: "FLATTEN_BY", NumArgs: 0, Precedence: 50, Handler: flattenOp} + deleteChildOpType = &operationType{Type: "DELETE", NumArgs: 1, Precedence: 40, Handler: deleteChildOperator} +) type Operation struct { OperationType *operationType @@ -146,7 +176,6 @@ func recurseNodeArrayEqual(lhs *yaml.Node, rhs *yaml.Node) bool { } func findInArray(array *yaml.Node, item *yaml.Node) int { - for index := 0; index < len(array.Content); index = index + 1 { if recursiveNodeEqual(array.Content[index], item) { return index @@ -178,7 +207,6 @@ func recursiveNodeEqual(lhs *yaml.Node, rhs *yaml.Node) bool { return false } else if lhs.Tag == "!!null" { return true - } else if lhs.Kind == yaml.ScalarNode { return lhs.Value == rhs.Value } else if lhs.Kind == yaml.SequenceNode { @@ -187,7 +215,6 @@ func recursiveNodeEqual(lhs *yaml.Node, rhs *yaml.Node) bool { return recurseNodeObjectEqual(lhs, rhs) } return false - } // yaml numbers can be hex encoded... @@ -202,7 +229,7 @@ func parseInt(numberString string) (string, int64, error) { } func createScalarNode(value interface{}, stringValue string) *yaml.Node { - var node = &yaml.Node{Kind: yaml.ScalarNode} + node := &yaml.Node{Kind: yaml.ScalarNode} node.Value = stringValue switch value.(type) { @@ -247,7 +274,7 @@ func (p *Operation) toString() string { } } -//use for debugging only +// use for debugging only func NodesToString(collection *list.List) string { if !log.IsEnabledFor(logging.DEBUG) { return "" diff --git a/pkg/yqlib/matchKeyString_test.go b/pkg/yqlib/matchKeyString_test.go index 3cacb4a5..0f25cf68 100644 --- a/pkg/yqlib/matchKeyString_test.go +++ b/pkg/yqlib/matchKeyString_test.go @@ -6,7 +6,7 @@ import ( ) func TestDeepMatch(t *testing.T) { - var tests = []struct { + tests := []struct { name string pattern string ok bool diff --git a/pkg/yqlib/operator_add.go b/pkg/yqlib/operator_add.go index 1473bbfc..028589d2 100644 --- a/pkg/yqlib/operator_add.go +++ b/pkg/yqlib/operator_add.go @@ -2,16 +2,17 @@ package yqlib import ( "fmt" - "strconv" yaml "gopkg.in/yaml.v3" ) func createAddOp(lhs *ExpressionNode, rhs *ExpressionNode) *ExpressionNode { - return &ExpressionNode{Operation: &Operation{OperationType: addOpType}, - Lhs: lhs, - Rhs: rhs} + return &ExpressionNode{ + Operation: &Operation{OperationType: addOpType}, + Lhs: lhs, + Rhs: rhs, + } } func addAssignOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { @@ -29,7 +30,6 @@ func toNodes(candidate *CandidateNode) []*yaml.Node { default: return []*yaml.Node{candidate.Node} } - } func addOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { @@ -71,7 +71,6 @@ func add(d *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *Candida } func addScalars(target *CandidateNode, lhs *yaml.Node, rhs *yaml.Node) (*CandidateNode, error) { - if lhs.Tag == "!!str" { target.Node.Tag = "!!str" target.Node.Value = lhs.Value + rhs.Value diff --git a/pkg/yqlib/operator_anchors_aliases.go b/pkg/yqlib/operator_anchors_aliases.go index c9ee4ca0..2f5c4fe2 100644 --- a/pkg/yqlib/operator_anchors_aliases.go +++ b/pkg/yqlib/operator_anchors_aliases.go @@ -7,7 +7,6 @@ import ( ) func assignAliasOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("AssignAlias operator!") aliasName := "" @@ -22,7 +21,6 @@ func assignAliasOperator(d *dataTreeNavigator, context Context, expressionNode * } lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) - if err != nil { return Context{}, err } @@ -51,7 +49,7 @@ func assignAliasOperator(d *dataTreeNavigator, context Context, expressionNode * func getAliasOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetAlias operator!") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -63,7 +61,6 @@ func getAliasOperator(d *dataTreeNavigator, context Context, expressionNode *Exp } func assignAnchorOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("AssignAnchor operator!") anchorName := "" @@ -79,7 +76,6 @@ func assignAnchorOperator(d *dataTreeNavigator, context Context, expressionNode } lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) - if err != nil { return Context{}, err } @@ -106,7 +102,7 @@ func assignAnchorOperator(d *dataTreeNavigator, context Context, expressionNode func getAnchorOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetAnchor operator!") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -125,7 +121,6 @@ func explodeOperator(d *dataTreeNavigator, context Context, expressionNode *Expr candidate := el.Value.(*CandidateNode) rhs, err := d.GetMatchingNodes(context.SingleChildContext(candidate), expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -142,7 +137,7 @@ func explodeOperator(d *dataTreeNavigator, context Context, expressionNode *Expr } func reconstructAliasedMap(node *yaml.Node, context Context) error { - var newContent = list.New() + newContent := list.New() // can I short cut here by prechecking if there's an anchor in the map? // no it needs to recurse in overrideEntry. @@ -258,9 +253,7 @@ func applyAlias(node *yaml.Node, alias *yaml.Node, aliasIndex int, newContent Co } func overrideEntry(node *yaml.Node, key *yaml.Node, value *yaml.Node, startIndex int, newContent Context) error { - err := explodeNode(value, newContent) - if err != nil { return err } diff --git a/pkg/yqlib/operator_assign.go b/pkg/yqlib/operator_assign.go index cbc53837..76950f2b 100644 --- a/pkg/yqlib/operator_assign.go +++ b/pkg/yqlib/operator_assign.go @@ -22,7 +22,6 @@ func assignUpdateOperator(d *dataTreeNavigator, context Context, expressionNode candidate := el.Value.(*CandidateNode) rhs, err := d.GetMatchingNodes(context.SingleChildContext(candidate), expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -51,7 +50,6 @@ func assignAttributesOperator(d *dataTreeNavigator, context Context, expressionN candidate := el.Value.(*CandidateNode) rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(candidate), expressionNode.Rhs) - if err != nil { return Context{}, err } diff --git a/pkg/yqlib/operator_booleans.go b/pkg/yqlib/operator_booleans.go index b8f37ac3..cb584e78 100644 --- a/pkg/yqlib/operator_booleans.go +++ b/pkg/yqlib/operator_booleans.go @@ -69,7 +69,7 @@ func findBoolean(wantBool bool, d *dataTreeNavigator, context Context, expressio for _, node := range sequenceNode.Content { if expressionNode != nil { - //need to evaluate the expression against the node + // need to evaluate the expression against the node candidate := &CandidateNode{Node: node} rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(candidate), expressionNode) if err != nil { @@ -95,7 +95,7 @@ func findBoolean(wantBool bool, d *dataTreeNavigator, context Context, expressio } func allOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -114,7 +114,7 @@ func allOperator(d *dataTreeNavigator, context Context, expressionNode *Expressi } func anyOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -151,7 +151,7 @@ func andOperator(d *dataTreeNavigator, context Context, expressionNode *Expressi func notOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- notOperation") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_collect.go b/pkg/yqlib/operator_collect.go index 3ea2d04c..e830ac2a 100644 --- a/pkg/yqlib/operator_collect.go +++ b/pkg/yqlib/operator_collect.go @@ -15,7 +15,7 @@ func collectOperator(d *dataTreeNavigator, context Context, expressionNode *Expr return context.SingleChildContext(candidate), nil } - var results = list.New() + results := list.New() node := &yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} var collectC *CandidateNode diff --git a/pkg/yqlib/operator_collect_object.go b/pkg/yqlib/operator_collect_object.go index 9cc6792d..2407e81a 100644 --- a/pkg/yqlib/operator_collect_object.go +++ b/pkg/yqlib/operator_collect_object.go @@ -51,7 +51,6 @@ func collectObjectOperator(d *dataTreeNavigator, originalContext Context, expres } return context.ChildContext(newObject), nil - } func collect(d *dataTreeNavigator, context Context, remainingMatches *list.List) (Context, error) { @@ -97,5 +96,4 @@ func collect(d *dataTreeNavigator, context Context, remainingMatches *list.List) } } return collect(d, context.ChildContext(newAgg), remainingMatches) - } diff --git a/pkg/yqlib/operator_collect_test.go b/pkg/yqlib/operator_collect_test.go index d78833e1..fea734cf 100644 --- a/pkg/yqlib/operator_collect_test.go +++ b/pkg/yqlib/operator_collect_test.go @@ -45,7 +45,8 @@ var collectOperatorScenarios = []expressionScenario{ expected: []string{ "D0, P[], (!!seq)::- cat\n", }, - }, { + }, + { document: ``, skipDoc: true, expression: `[true]`, diff --git a/pkg/yqlib/operator_comments.go b/pkg/yqlib/operator_comments.go index 9671bc50..3ef3cd02 100644 --- a/pkg/yqlib/operator_comments.go +++ b/pkg/yqlib/operator_comments.go @@ -1,8 +1,6 @@ package yqlib import ( - // "bufio" - // "bytes" "bufio" "bytes" "container/list" @@ -18,11 +16,9 @@ type commentOpPreferences struct { } func assignCommentsOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("AssignComments operator!") lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) - if err != nil { return Context{}, err } @@ -73,11 +69,11 @@ func assignCommentsOperator(d *dataTreeNavigator, context Context, expressionNod func getCommentsOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { preferences := expressionNode.Operation.Preferences.(commentOpPreferences) - var startCommentCharaterRegExp = regexp.MustCompile(`^# `) - var subsequentCommentCharaterRegExp = regexp.MustCompile(`\n# `) + startCommentCharaterRegExp := regexp.MustCompile(`^# `) + subsequentCommentCharaterRegExp := regexp.MustCompile(`\n# `) log.Debugf("GetComments operator!") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -85,9 +81,9 @@ func getCommentsOperator(d *dataTreeNavigator, context Context, expressionNode * if preferences.LineComment { comment = candidate.Node.LineComment } else if preferences.HeadComment && candidate.LeadingContent != "" { - var chompRegexp = regexp.MustCompile(`\n$`) + chompRegexp := regexp.MustCompile(`\n$`) var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) if err := processLeadingContent(candidate, writer, false, YamlOutputFormat); err != nil { return Context{}, err } diff --git a/pkg/yqlib/operator_create_map.go b/pkg/yqlib/operator_create_map.go index cac23356..b7b82732 100644 --- a/pkg/yqlib/operator_create_map.go +++ b/pkg/yqlib/operator_create_map.go @@ -9,8 +9,8 @@ import ( func createMapOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- createMapOperation") - //each matchingNodes entry should turn into a sequence of keys to create. - //then collect object should do a cross function of the same index sequence for all matches. + // each matchingNodes entry should turn into a sequence of keys to create. + // then collect object should do a cross function of the same index sequence for all matches. var path []interface{} @@ -19,7 +19,6 @@ func createMapOperator(d *dataTreeNavigator, context Context, expressionNode *Ex sequences := list.New() if context.MatchingNodes.Len() > 0 { - for matchingNodeEl := context.MatchingNodes.Front(); matchingNodeEl != nil; matchingNodeEl = matchingNodeEl.Next() { matchingNode := matchingNodeEl.Value.(*CandidateNode) sequenceNode, err := sequenceFor(d, context, matchingNode, expressionNode) @@ -37,13 +36,12 @@ func createMapOperator(d *dataTreeNavigator, context Context, expressionNode *Ex } return context.SingleChildContext(&CandidateNode{Node: listToNodeSeq(sequences), Document: document, Path: path}), nil - } func sequenceFor(d *dataTreeNavigator, context Context, matchingNode *CandidateNode, expressionNode *ExpressionNode) (*CandidateNode, error) { var path []interface{} var document uint = 0 - var matches = list.New() + matches := list.New() if matchingNode != nil { path = matchingNode.Path @@ -63,7 +61,6 @@ func sequenceFor(d *dataTreeNavigator, context Context, matchingNode *CandidateN return &CandidateNode{Node: &node, Document: document, Path: path}, nil }, false) - if err != nil { return nil, err } @@ -72,7 +69,7 @@ func sequenceFor(d *dataTreeNavigator, context Context, matchingNode *CandidateN return &CandidateNode{Node: innerList, Document: document, Path: path}, nil } -//NOTE: here the document index gets dropped so we +// NOTE: here the document index gets dropped so we // no longer know where the node originates from. func listToNodeSeq(list *list.List) *yaml.Node { node := yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} diff --git a/pkg/yqlib/operator_delete.go b/pkg/yqlib/operator_delete.go index 39adaf23..2fbbe4bf 100644 --- a/pkg/yqlib/operator_delete.go +++ b/pkg/yqlib/operator_delete.go @@ -8,15 +8,14 @@ import ( func deleteChildOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { nodesToDelete, err := d.GetMatchingNodes(context.ReadOnlyClone(), expressionNode.Rhs) - if err != nil { return Context{}, err } - //need to iterate backwards to ensure correct indices when deleting multiple + // need to iterate backwards to ensure correct indices when deleting multiple for el := nodesToDelete.MatchingNodes.Back(); el != nil; el = el.Prev() { candidate := el.Value.(*CandidateNode) - //problem: context may already be '.a' and then I pass in '.a.a2'. + // problem: context may already be '.a' and then I pass in '.a.a2'. // should pass in .a2. if candidate.Parent == nil { log.Info("Could not find parent of %v", candidate.GetKey()) diff --git a/pkg/yqlib/operator_document_index.go b/pkg/yqlib/operator_document_index.go index 566fe9df..97c724b4 100644 --- a/pkg/yqlib/operator_document_index.go +++ b/pkg/yqlib/operator_document_index.go @@ -8,7 +8,7 @@ import ( ) func getDocumentIndexOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_encoder_decoder.go b/pkg/yqlib/operator_encoder_decoder.go index 328a8e67..dc9ff13d 100644 --- a/pkg/yqlib/operator_encoder_decoder.go +++ b/pkg/yqlib/operator_encoder_decoder.go @@ -28,7 +28,7 @@ type encoderPreferences struct { func encodeOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { preferences := expressionNode.Operation.Preferences.(encoderPreferences) - var results = list.New() + results := list.New() hasOnlyOneNewLine := regexp.MustCompile("[^\n].*\n$") endWithNewLine := regexp.MustCompile(".*\n$") @@ -37,7 +37,6 @@ func encodeOperator(d *dataTreeNavigator, context Context, expressionNode *Expre for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) stringValue, err := yamlToString(candidate, preferences) - if err != nil { return Context{}, err } @@ -68,8 +67,7 @@ func encodeOperator(d *dataTreeNavigator, context Context, expressionNode *Expre /* takes a string and decodes it back into an object */ func decodeOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -82,7 +80,7 @@ func decodeOperator(d *dataTreeNavigator, context Context, expressionNode *Expre if errorReading != nil { return Context{}, errorReading } - //first node is a doc + // first node is a doc node := unwrapDoc(&dataBucket) results.PushBack(candidate.CreateReplacement(node)) diff --git a/pkg/yqlib/operator_entries.go b/pkg/yqlib/operator_entries.go index a98f2e6b..e4d50c5b 100644 --- a/pkg/yqlib/operator_entries.go +++ b/pkg/yqlib/operator_entries.go @@ -8,8 +8,8 @@ import ( ) func entrySeqFor(key *yaml.Node, value *yaml.Node) *yaml.Node { - var keyKey = &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!str", Value: "key"} - var valueKey = &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!str", Value: "value"} + keyKey := &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!str", Value: "key"} + valueKey := &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!str", Value: "value"} return &yaml.Node{ Kind: yaml.MappingNode, @@ -19,10 +19,10 @@ func entrySeqFor(key *yaml.Node, value *yaml.Node) *yaml.Node { } func toEntriesFromMap(candidateNode *CandidateNode) *CandidateNode { - var sequence = &yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} - var entriesNode = candidateNode.CreateReplacement(sequence) + sequence := &yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} + entriesNode := candidateNode.CreateReplacement(sequence) - var contents = unwrapDoc(candidateNode.Node).Content + contents := unwrapDoc(candidateNode.Node).Content for index := 0; index < len(contents); index = index + 2 { key := contents[index] value := contents[index+1] @@ -33,10 +33,10 @@ func toEntriesFromMap(candidateNode *CandidateNode) *CandidateNode { } func toEntriesfromSeq(candidateNode *CandidateNode) *CandidateNode { - var sequence = &yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} - var entriesNode = candidateNode.CreateReplacement(sequence) + sequence := &yaml.Node{Kind: yaml.SequenceNode, Tag: "!!seq"} + entriesNode := candidateNode.CreateReplacement(sequence) - var contents = unwrapDoc(candidateNode.Node).Content + contents := unwrapDoc(candidateNode.Node).Content for index := 0; index < len(contents); index = index + 1 { key := &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!int", Value: fmt.Sprintf("%v", index)} value := contents[index] @@ -47,7 +47,7 @@ func toEntriesfromSeq(candidateNode *CandidateNode) *CandidateNode { } func toEntriesOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) candidateNode := unwrapDoc(candidate.Node) @@ -89,14 +89,13 @@ func parseEntry(d *dataTreeNavigator, entry *yaml.Node, position int) (*yaml.Nod } return keyResults.Front().Value.(*CandidateNode).Node, valueResults.Front().Value.(*CandidateNode).Node, nil - } func fromEntries(d *dataTreeNavigator, candidateNode *CandidateNode) (*CandidateNode, error) { - var node = &yaml.Node{Kind: yaml.MappingNode, Tag: "!!map"} - var mapCandidateNode = candidateNode.CreateReplacement(node) + node := &yaml.Node{Kind: yaml.MappingNode, Tag: "!!map"} + mapCandidateNode := candidateNode.CreateReplacement(node) - var contents = unwrapDoc(candidateNode.Node).Content + contents := unwrapDoc(candidateNode.Node).Content for index := 0; index < len(contents); index = index + 1 { key, value, err := parseEntry(d, contents[index], index) @@ -110,7 +109,7 @@ func fromEntries(d *dataTreeNavigator, candidateNode *CandidateNode) (*Candidate } func fromEntriesOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) candidateNode := unwrapDoc(candidate.Node) @@ -131,14 +130,13 @@ func fromEntriesOperator(d *dataTreeNavigator, context Context, expressionNode * } func withEntriesOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - - //to_entries on the context + // to_entries on the context toEntries, err := toEntriesOperator(d, context, expressionNode) if err != nil { return Context{}, err } - //run expression against entries + // run expression against entries // splat toEntries and pipe it into Rhs splatted, err := splat(d, toEntries, traversePreferences{}) if err != nil { @@ -157,6 +155,6 @@ func withEntriesOperator(d *dataTreeNavigator, context Context, expressionNode * return Context{}, err } - //from_entries on the result + // from_entries on the result return fromEntriesOperator(d, collected, expressionNode) } diff --git a/pkg/yqlib/operator_env.go b/pkg/yqlib/operator_env.go index f6c5eebc..8c32516e 100644 --- a/pkg/yqlib/operator_env.go +++ b/pkg/yqlib/operator_env.go @@ -36,7 +36,7 @@ func envOperator(d *dataTreeNavigator, context Context, expressionNode *Expressi if errorReading != nil { return Context{}, errorReading } - //first node is a doc + // first node is a doc node = unwrapDoc(&dataBucket) } log.Debug("ENV tag", node.Tag) diff --git a/pkg/yqlib/operator_file.go b/pkg/yqlib/operator_file.go index c0ffaad8..1fa75d6b 100644 --- a/pkg/yqlib/operator_file.go +++ b/pkg/yqlib/operator_file.go @@ -10,7 +10,7 @@ import ( func getFilenameOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetFilename") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -25,7 +25,7 @@ func getFilenameOperator(d *dataTreeNavigator, context Context, expressionNode * func getFileIndexOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetFileIndex") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_flatten.go b/pkg/yqlib/operator_flatten.go index e7ccf99c..b60fed3d 100644 --- a/pkg/yqlib/operator_flatten.go +++ b/pkg/yqlib/operator_flatten.go @@ -34,7 +34,6 @@ func flatten(node *yaml.Node, depth int) { } func flattenOp(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- flatten Operator") depth := expressionNode.Operation.Preferences.(flattenPreferences).depth @@ -50,5 +49,4 @@ func flattenOp(d *dataTreeNavigator, context Context, expressionNode *Expression } return context, nil - } diff --git a/pkg/yqlib/operator_group_by.go b/pkg/yqlib/operator_group_by.go index 3acc8fa9..fb89150c 100644 --- a/pkg/yqlib/operator_group_by.go +++ b/pkg/yqlib/operator_group_by.go @@ -9,11 +9,10 @@ import ( ) func processIntoGroups(d *dataTreeNavigator, context Context, rhsExp *ExpressionNode, node *yaml.Node) (*orderedmap.OrderedMap, error) { - var newMatches = orderedmap.NewOrderedMap() + newMatches := orderedmap.NewOrderedMap() for _, node := range node.Content { child := &CandidateNode{Node: node} rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(child), rhsExp) - if err != nil { return nil, err } @@ -38,9 +37,8 @@ func processIntoGroups(d *dataTreeNavigator, context Context, rhsExp *Expression } func groupBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- groupBy Operator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -51,7 +49,6 @@ func groupBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionNo } newMatches, err := processIntoGroups(d, context, expressionNode.Rhs, candidateNode) - if err != nil { return Context{}, err } @@ -72,5 +69,4 @@ func groupBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionNo } return context.ChildContext(results), nil - } diff --git a/pkg/yqlib/operator_has.go b/pkg/yqlib/operator_has.go index bce557a0..cc08545c 100644 --- a/pkg/yqlib/operator_has.go +++ b/pkg/yqlib/operator_has.go @@ -8,12 +8,10 @@ import ( ) func hasOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- hasOperation") - var results = list.New() + results := list.New() rhs, err := d.GetMatchingNodes(context.ReadOnlyClone(), expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -30,7 +28,7 @@ func hasOperator(d *dataTreeNavigator, context Context, expressionNode *Expressi // grab the first value candidateNode := unwrapDoc(candidate.Node) - var contents = candidateNode.Content + contents := candidateNode.Content switch candidateNode.Kind { case yaml.MappingNode: candidateHasKey := false @@ -44,7 +42,7 @@ func hasOperator(d *dataTreeNavigator, context Context, expressionNode *Expressi case yaml.SequenceNode: candidateHasKey := false if wanted.Tag == "!!int" { - var number, errParsingInt = strconv.ParseInt(wantedKey, 10, 64) // nolint + number, errParsingInt := strconv.ParseInt(wantedKey, 10, 64) // nolint if errParsingInt != nil { return Context{}, errParsingInt } diff --git a/pkg/yqlib/operator_keys.go b/pkg/yqlib/operator_keys.go index da0c19dd..f7da2c53 100644 --- a/pkg/yqlib/operator_keys.go +++ b/pkg/yqlib/operator_keys.go @@ -10,7 +10,7 @@ import ( func getKeyOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- getKeyOperator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -21,13 +21,12 @@ func getKeyOperator(d *dataTreeNavigator, context Context, expressionNode *Expre } return context.ChildContext(results), nil - } func keysOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- keysOperator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -57,7 +56,7 @@ func getMapKeys(node *yaml.Node) *yaml.Node { } func getIndicies(node *yaml.Node) *yaml.Node { - var contents = make([]*yaml.Node, len(node.Content)) + contents := make([]*yaml.Node, len(node.Content)) for index := range node.Content { contents[index] = &yaml.Node{ diff --git a/pkg/yqlib/operator_length.go b/pkg/yqlib/operator_length.go index 46f1c8c8..3db7fa4a 100644 --- a/pkg/yqlib/operator_length.go +++ b/pkg/yqlib/operator_length.go @@ -9,7 +9,7 @@ import ( func lengthOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- lengthOperation") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_load.go b/pkg/yqlib/operator_load.go index 4741b09a..87691018 100644 --- a/pkg/yqlib/operator_load.go +++ b/pkg/yqlib/operator_load.go @@ -27,7 +27,6 @@ func loadString(filename string) (*CandidateNode, error) { } func loadYaml(filename string) (*CandidateNode, error) { - file, err := os.Open(filename) // #nosec if err != nil { return nil, err @@ -44,7 +43,6 @@ func loadYaml(filename string) (*CandidateNode, error) { return &CandidateNode{Node: &yaml.Node{Kind: yaml.ScalarNode, Tag: "!!null"}}, nil } else if documents.Len() == 1 { return documents.Front().Value.(*CandidateNode), nil - } else { sequenceNode := &CandidateNode{Node: &yaml.Node{Kind: yaml.SequenceNode}} for doc := documents.Front(); doc != nil; doc = doc.Next() { @@ -62,7 +60,7 @@ func loadYamlOperator(d *dataTreeNavigator, context Context, expressionNode *Exp // need to evaluate the 1st parameter against the context // and return the data accordingly. - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_multiply.go b/pkg/yqlib/operator_multiply.go index a60f0287..502c6338 100644 --- a/pkg/yqlib/operator_multiply.go +++ b/pkg/yqlib/operator_multiply.go @@ -1,11 +1,10 @@ package yqlib import ( + "container/list" "fmt" "strconv" - "container/list" - "github.com/jinzhu/copier" yaml "gopkg.in/yaml.v3" ) @@ -47,7 +46,7 @@ func multiply(preferences multiplyPreferences) func(d *dataTreeNavigator, contex if lhs.Node.Kind == yaml.MappingNode && rhs.Node.Kind == yaml.MappingNode || (lhs.Node.Kind == yaml.SequenceNode && rhs.Node.Kind == yaml.SequenceNode) { - var newBlank = CandidateNode{} + newBlank := CandidateNode{} err := copier.CopyWithOption(&newBlank, lhs, copier.Option{IgnoreEmpty: true, DeepCopy: true}) if err != nil { return nil, err @@ -103,11 +102,13 @@ func multiplyIntegers(lhs *CandidateNode, rhs *CandidateNode) (*CandidateNode, e } func mergeObjects(d *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *CandidateNode, preferences multiplyPreferences) (*CandidateNode, error) { - var results = list.New() + results := list.New() // only need to recurse the array if we are doing a deep merge - prefs := recursiveDescentPreferences{RecurseArray: preferences.DeepMergeArrays, - TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: true}} + prefs := recursiveDescentPreferences{ + RecurseArray: preferences.DeepMergeArrays, + TraversePreferences: traversePreferences{DontFollowAlias: true, IncludeMapKeys: true}, + } log.Debugf("merge - preferences.DeepMergeArrays %v", preferences.DeepMergeArrays) log.Debugf("merge - preferences.AppendArrays %v", preferences.AppendArrays) err := recursiveDecent(d, results, context.SingleChildContext(rhs), prefs) diff --git a/pkg/yqlib/operator_parent.go b/pkg/yqlib/operator_parent.go index ab0f03d0..4063efa5 100644 --- a/pkg/yqlib/operator_parent.go +++ b/pkg/yqlib/operator_parent.go @@ -5,7 +5,7 @@ import "container/list" func getParentOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- getParentOperator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -15,5 +15,4 @@ func getParentOperator(d *dataTreeNavigator, context Context, expressionNode *Ex } return context.ChildContext(results), nil - } diff --git a/pkg/yqlib/operator_path.go b/pkg/yqlib/operator_path.go index 1c249b74..3d0382a5 100644 --- a/pkg/yqlib/operator_path.go +++ b/pkg/yqlib/operator_path.go @@ -19,7 +19,7 @@ func createPathNodeFor(pathElement interface{}) *yaml.Node { func getPathOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetPath") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_pipe.go b/pkg/yqlib/operator_pipe.go index 2e023521..255bc074 100644 --- a/pkg/yqlib/operator_pipe.go +++ b/pkg/yqlib/operator_pipe.go @@ -1,8 +1,7 @@ package yqlib func pipeOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - - //lhs may update the variable context, we should pass that into the RHS + // lhs may update the variable context, we should pass that into the RHS // BUT we still return the original context back (see jq) // https://stedolan.github.io/jq/manual/#Variable/SymbolicBindingOperator:...as$identifier|... diff --git a/pkg/yqlib/operator_recursive_descent.go b/pkg/yqlib/operator_recursive_descent.go index 71095540..b1e65d79 100644 --- a/pkg/yqlib/operator_recursive_descent.go +++ b/pkg/yqlib/operator_recursive_descent.go @@ -12,7 +12,7 @@ type recursiveDescentPreferences struct { } func recursiveDescentOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - var results = list.New() + results := list.New() preferences := expressionNode.Operation.Preferences.(recursiveDescentPreferences) err := recursiveDecent(d, results, context, preferences) @@ -36,7 +36,6 @@ func recursiveDecent(d *dataTreeNavigator, results *list.List, context Context, (preferences.RecurseArray || candidate.Node.Kind != yaml.SequenceNode) { children, err := splat(d, context.SingleChildContext(candidate), preferences.TraversePreferences) - if err != nil { return err } diff --git a/pkg/yqlib/operator_reduce.go b/pkg/yqlib/operator_reduce.go index cc908fad..abe199ae 100644 --- a/pkg/yqlib/operator_reduce.go +++ b/pkg/yqlib/operator_reduce.go @@ -13,8 +13,8 @@ func reduceOperator(d *dataTreeNavigator, context Context, expressionNode *Expre // '.' refers to the current accumulator, initialised to 0 // $var references a single element from the .a - //ensure lhs is actually an assignment - //and rhs is a block (empty) + // ensure lhs is actually an assignment + // and rhs is a block (empty) if expressionNode.Lhs.Operation.OperationType != assignVariableOpType { return Context{}, fmt.Errorf("reduce must be given a variables assignment, got %v instead", expressionNode.Lhs.Operation.OperationType.Type) } else if expressionNode.Rhs.Operation.OperationType != blockOpType { diff --git a/pkg/yqlib/operator_select.go b/pkg/yqlib/operator_select.go index 269441b3..3131dff7 100644 --- a/pkg/yqlib/operator_select.go +++ b/pkg/yqlib/operator_select.go @@ -5,14 +5,12 @@ import ( ) func selectOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- selectOperation") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(candidate), expressionNode.Rhs) - if err != nil { return Context{}, err } diff --git a/pkg/yqlib/operator_select_test.go b/pkg/yqlib/operator_select_test.go index 4a1e8723..a399b0e4 100644 --- a/pkg/yqlib/operator_select_test.go +++ b/pkg/yqlib/operator_select_test.go @@ -66,7 +66,8 @@ var selectOperatorScenarios = []expressionScenario{ expression: `.a.[] | select(. == "*at")`, expected: []string{ "D0, P[a 0], (!!str)::cat\n", - "D0, P[a 1], (!!str)::goat\n"}, + "D0, P[a 1], (!!str)::goat\n", + }, }, { description: "Select and update matching values in map", diff --git a/pkg/yqlib/operator_sort_keys.go b/pkg/yqlib/operator_sort_keys.go index f977a9fb..a8f5e9e8 100644 --- a/pkg/yqlib/operator_sort_keys.go +++ b/pkg/yqlib/operator_sort_keys.go @@ -7,7 +7,6 @@ import ( ) func sortKeysOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(candidate), expressionNode.Rhs) @@ -33,7 +32,7 @@ func sortKeys(node *yaml.Node) { keys := make([]string, len(node.Content)/2) keyBucket := map[string]*yaml.Node{} valueBucket := map[string]*yaml.Node{} - var contents = node.Content + contents := node.Content for index := 0; index < len(contents); index = index + 2 { key := contents[index] value := contents[index+1] diff --git a/pkg/yqlib/operator_strings.go b/pkg/yqlib/operator_strings.go index 59e18e48..727abdda 100644 --- a/pkg/yqlib/operator_strings.go +++ b/pkg/yqlib/operator_strings.go @@ -40,13 +40,12 @@ func substitute(original string, regex *regexp.Regexp, replacement string) *yaml } func substituteStringOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - //rhs block operator - //lhs of block = regex - //rhs of block = replacement expression + // rhs block operator + // lhs of block = regex + // rhs of block = replacement expression block := expressionNode.Rhs regExStr, replacementText, err := getSubstituteParameters(d, block, context) - if err != nil { return Context{}, err } @@ -56,7 +55,7 @@ func substituteStringOperator(d *dataTreeNavigator, context Context, expressionN return Context{}, err } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -71,11 +70,9 @@ func substituteStringOperator(d *dataTreeNavigator, context Context, expressionN } return context.ChildContext(results), nil - } func addMatch(original []*yaml.Node, match string, offset int, name string) []*yaml.Node { - newContent := append(original, createScalarNode("string", "string")) @@ -153,7 +150,6 @@ func match(matchPrefs matchPreferences, regEx *regexp.Regexp, candidate *Candida results.PushBack(candidate.CreateReplacement(node)) } - } func capture(matchPrefs matchPreferences, regEx *regexp.Regexp, candidate *CandidateNode, value string, results *list.List) { @@ -190,7 +186,6 @@ func capture(matchPrefs matchPreferences, regEx *regexp.Regexp, candidate *Candi results.PushBack(candidate.CreateReplacement(capturesNode)) } - } func extractMatchArguments(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (*regexp.Regexp, matchPreferences, error) { @@ -242,7 +237,7 @@ func matchOperator(d *dataTreeNavigator, context Context, expressionNode *Expres return Context{}, err } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -263,7 +258,7 @@ func captureOperator(d *dataTreeNavigator, context Context, expressionNode *Expr return Context{}, err } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -284,7 +279,7 @@ func testOperator(d *dataTreeNavigator, context Context, expressionNode *Express return Context{}, err } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -312,7 +307,7 @@ func joinStringOperator(d *dataTreeNavigator, context Context, expressionNode *E joinStr = rhs.MatchingNodes.Front().Value.(*CandidateNode).Node.Value } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -353,7 +348,7 @@ func splitStringOperator(d *dataTreeNavigator, context Context, expressionNode * splitStr = rhs.MatchingNodes.Front().Value.(*CandidateNode).Node.Value } - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -376,7 +371,7 @@ func split(value string, spltStr string) *yaml.Node { var contents []*yaml.Node if value != "" { - var newStrings = strings.Split(value, spltStr) + newStrings := strings.Split(value, spltStr) contents = make([]*yaml.Node, len(newStrings)) for index, str := range newStrings { diff --git a/pkg/yqlib/operator_style.go b/pkg/yqlib/operator_style.go index 0df69c05..963a3484 100644 --- a/pkg/yqlib/operator_style.go +++ b/pkg/yqlib/operator_style.go @@ -27,7 +27,6 @@ func parseStyle(customStyle string) (yaml.Style, error) { } func assignStyleOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("AssignStyleOperator: %v") var style yaml.Style if !expressionNode.Operation.UpdateAssign { @@ -45,7 +44,6 @@ func assignStyleOperator(d *dataTreeNavigator, context Context, expressionNode * } lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) - if err != nil { return Context{}, err } @@ -76,7 +74,7 @@ func assignStyleOperator(d *dataTreeNavigator, context Context, expressionNode * func getStyleOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetStyleOperator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_subtract.go b/pkg/yqlib/operator_subtract.go index 6a74ab27..35504d2a 100644 --- a/pkg/yqlib/operator_subtract.go +++ b/pkg/yqlib/operator_subtract.go @@ -2,16 +2,17 @@ package yqlib import ( "fmt" - "strconv" "gopkg.in/yaml.v3" ) func createSubtractOp(lhs *ExpressionNode, rhs *ExpressionNode) *ExpressionNode { - return &ExpressionNode{Operation: &Operation{OperationType: subtractOpType}, - Lhs: lhs, - Rhs: rhs} + return &ExpressionNode{ + Operation: &Operation{OperationType: subtractOpType}, + Lhs: lhs, + Rhs: rhs, + } } func subtractAssignOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { @@ -75,7 +76,6 @@ func subtract(d *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *Ca } func subtractScalars(target *CandidateNode, lhs *yaml.Node, rhs *yaml.Node) (*CandidateNode, error) { - if lhs.Tag == "!!str" { return nil, fmt.Errorf("strings cannot be subtracted") } else if lhs.Tag == "!!int" && rhs.Tag == "!!int" { diff --git a/pkg/yqlib/operator_tag.go b/pkg/yqlib/operator_tag.go index de45842e..a626241b 100644 --- a/pkg/yqlib/operator_tag.go +++ b/pkg/yqlib/operator_tag.go @@ -7,7 +7,6 @@ import ( ) func assignTagOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("AssignTagOperator: %v") tag := "" @@ -23,7 +22,6 @@ func assignTagOperator(d *dataTreeNavigator, context Context, expressionNode *Ex } lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) - if err != nil { return Context{}, err } @@ -50,7 +48,7 @@ func assignTagOperator(d *dataTreeNavigator, context Context, expressionNode *Ex func getTagOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("GetTagOperator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) diff --git a/pkg/yqlib/operator_traverse_path.go b/pkg/yqlib/operator_traverse_path.go index 08c36e5b..4e71912c 100644 --- a/pkg/yqlib/operator_traverse_path.go +++ b/pkg/yqlib/operator_traverse_path.go @@ -23,7 +23,7 @@ func splat(d *dataTreeNavigator, context Context, prefs traversePreferences) (Co func traversePathOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- traversePathOperator") - var matches = list.New() + matches := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { newNodes, err := traverse(d, context, el.Value.(*CandidateNode), expressionNode.Operation) @@ -77,8 +77,7 @@ func traverse(d *dataTreeNavigator, context Context, matchingNode *CandidateNode } func traverseArrayOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - - //lhs may update the variable context, we should pass that into the RHS + // lhs may update the variable context, we should pass that into the RHS // BUT we still return the original context back (see jq) // https://stedolan.github.io/jq/manual/#Variable/SymbolicBindingOperator:...as$identifier|... @@ -90,7 +89,6 @@ func traverseArrayOperator(d *dataTreeNavigator, context Context, expressionNode // rhs is a collect expression that will yield indexes to retrieve of the arrays rhs, err := d.GetMatchingNodes(context.ReadOnlyClone(), expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -99,9 +97,9 @@ func traverseArrayOperator(d *dataTreeNavigator, context Context, expressionNode if expressionNode.Rhs.Rhs != nil && expressionNode.Rhs.Rhs.Operation.Preferences != nil { prefs = expressionNode.Rhs.Rhs.Operation.Preferences.(traversePreferences) } - var indicesToTraverse = rhs.MatchingNodes.Front().Value.(*CandidateNode).Node.Content + indicesToTraverse := rhs.MatchingNodes.Front().Value.(*CandidateNode).Node.Content - //now we traverse the result of the lhs against the indices we found + // now we traverse the result of the lhs against the indices we found result, err := traverseNodesWithArrayIndices(lhs, indicesToTraverse, prefs) if err != nil { return Context{}, err @@ -110,7 +108,7 @@ func traverseArrayOperator(d *dataTreeNavigator, context Context, expressionNode } func traverseNodesWithArrayIndices(context Context, indicesToTraverse []*yaml.Node, prefs traversePreferences) (Context, error) { - var matchingNodeMap = list.New() + matchingNodeMap := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) newNodes, err := traverseArrayIndices(context, candidate, indicesToTraverse, prefs) @@ -130,7 +128,7 @@ func traverseArrayIndices(context Context, matchingNode *CandidateNode, indicesT // auto vivification node.Tag = "" node.Kind = yaml.SequenceNode - //check that the indices are numeric, if not, then we should create an object + // check that the indices are numeric, if not, then we should create an object if len(indicesToTraverse) != 0 { _, err := strconv.ParseInt(indicesToTraverse[0].Value, 10, 64) if err != nil { @@ -158,7 +156,7 @@ func traverseMapWithIndices(context Context, candidate *CandidateNode, indices [ return traverseMap(context, candidate, "", prefs, true) } - var matchingNodeMap = list.New() + matchingNodeMap := list.New() for _, indexNode := range indices { log.Debug("traverseMapWithIndices: %v", indexNode.Value) @@ -174,7 +172,7 @@ func traverseMapWithIndices(context Context, candidate *CandidateNode, indices [ func traverseArrayWithIndices(candidate *CandidateNode, indices []*yaml.Node, prefs traversePreferences) (*list.List, error) { log.Debug("traverseArrayWithIndices") - var newMatches = list.New() + newMatches := list.New() node := unwrapDoc(candidate.Node) if len(indices) == 0 { log.Debug("splatting") @@ -220,15 +218,14 @@ func keyMatches(key *yaml.Node, wantedKey string) bool { } func traverseMap(context Context, matchingNode *CandidateNode, key string, prefs traversePreferences, splat bool) (*list.List, error) { - var newMatches = orderedmap.NewOrderedMap() + newMatches := orderedmap.NewOrderedMap() err := doTraverseMap(newMatches, matchingNode, key, prefs, splat) - if err != nil { return nil, err } if !prefs.DontAutoCreate && !context.DontAutoCreate && newMatches.Len() == 0 { - //no matches, create one automagically + // no matches, create one automagically valueNode := &yaml.Node{Tag: "!!null", Kind: yaml.ScalarNode, Value: "null"} keyNode := &yaml.Node{Kind: yaml.ScalarNode, Value: key} node := matchingNode.Node @@ -264,13 +261,13 @@ func doTraverseMap(newMatches *orderedmap.OrderedMap, candidate *CandidateNode, node := candidate.Node - var contents = node.Content + contents := node.Content for index := 0; index < len(contents); index = index + 2 { key := contents[index] value := contents[index+1] log.Debug("checking %v (%v)", key.Value, key.Tag) - //skip the 'merge' tag, find a direct match first + // skip the 'merge' tag, find a direct match first if key.Tag == "!!merge" && !prefs.DontFollowAlias { log.Debug("Merge anchor") err := traverseMergeAnchor(newMatches, candidate, value, wantedKey, prefs, splat) diff --git a/pkg/yqlib/operator_union.go b/pkg/yqlib/operator_union.go index e1d54e3a..41e15998 100644 --- a/pkg/yqlib/operator_union.go +++ b/pkg/yqlib/operator_union.go @@ -11,7 +11,6 @@ func unionOperator(d *dataTreeNavigator, context Context, expressionNode *Expres log.Debug("rhs input: %v", NodesToString(context.MatchingNodes)) log.Debug("rhs: %v", expressionNode.Rhs.Operation.toString()) rhs, err := d.GetMatchingNodes(context, expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -23,7 +22,6 @@ func unionOperator(d *dataTreeNavigator, context Context, expressionNode *Expres /// (.foo = "bar"), (.thing = "cat") if rhs.MatchingNodes != lhs.MatchingNodes { - for el := rhs.MatchingNodes.Front(); el != nil; el = el.Next() { node := el.Value.(*CandidateNode) log.Debug("processing %v", NodeToString(node)) diff --git a/pkg/yqlib/operator_unique.go b/pkg/yqlib/operator_unique.go index 23f29622..626dd173 100644 --- a/pkg/yqlib/operator_unique.go +++ b/pkg/yqlib/operator_unique.go @@ -12,13 +12,11 @@ func unique(d *dataTreeNavigator, context Context, expressionNode *ExpressionNod selfExpression := &ExpressionNode{Operation: &Operation{OperationType: selfReferenceOpType}} uniqueByExpression := &ExpressionNode{Operation: &Operation{OperationType: uniqueByOpType}, Rhs: selfExpression} return uniqueBy(d, context, uniqueByExpression) - } func uniqueBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- uniqueBy Operator") - var results = list.New() + results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) @@ -28,11 +26,10 @@ func uniqueBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionN return Context{}, fmt.Errorf("Only arrays are supported for unique") } - var newMatches = orderedmap.NewOrderedMap() + newMatches := orderedmap.NewOrderedMap() for _, node := range candidateNode.Content { child := &CandidateNode{Node: node} rhs, err := d.GetMatchingNodes(context.SingleReadonlyChildContext(child), expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -60,5 +57,4 @@ func uniqueBy(d *dataTreeNavigator, context Context, expressionNode *ExpressionN } return context.ChildContext(results), nil - } diff --git a/pkg/yqlib/operator_value_test.go b/pkg/yqlib/operator_value_test.go index 81534804..b1ea8129 100644 --- a/pkg/yqlib/operator_value_test.go +++ b/pkg/yqlib/operator_value_test.go @@ -88,19 +88,22 @@ var valueOperatorScenarios = []expressionScenario{ expected: []string{ "D0, P[], (!!int)::-1\n", }, - }, { + }, + { document: ``, expression: `1.2`, expected: []string{ "D0, P[], (!!float)::1.2\n", }, - }, { + }, + { document: ``, expression: `-5.2e11`, expected: []string{ "D0, P[], (!!float)::-5.2e11\n", }, - }, { + }, + { document: ``, expression: `5e-10`, expected: []string{ @@ -127,19 +130,22 @@ var valueOperatorScenarios = []expressionScenario{ expected: []string{ "D0, P[], (!!str)::1.3\n", }, - }, { + }, + { document: ``, expression: `"true"`, expected: []string{ "D0, P[], (!!str)::true\n", }, - }, { + }, + { document: ``, expression: `true`, expected: []string{ "D0, P[], (!!bool)::true\n", }, - }, { + }, + { document: ``, expression: `false`, expected: []string{ diff --git a/pkg/yqlib/operator_with.go b/pkg/yqlib/operator_with.go index fd277f30..856a9e79 100644 --- a/pkg/yqlib/operator_with.go +++ b/pkg/yqlib/operator_with.go @@ -13,7 +13,6 @@ func withOperator(d *dataTreeNavigator, context Context, expressionNode *Express pathExp := expressionNode.Rhs.Lhs updateContext, err := d.GetMatchingNodes(context, pathExp) - if err != nil { return Context{}, err } @@ -26,5 +25,4 @@ func withOperator(d *dataTreeNavigator, context Context, expressionNode *Express } return context, nil - } diff --git a/pkg/yqlib/operators.go b/pkg/yqlib/operators.go index a88d9872..3ff0fe65 100644 --- a/pkg/yqlib/operators.go +++ b/pkg/yqlib/operators.go @@ -51,7 +51,6 @@ func emptyOperator(d *dataTreeNavigator, context Context, expressionNode *Expres type crossFunctionCalculation func(d *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *CandidateNode) (*CandidateNode, error) func resultsForRhs(d *dataTreeNavigator, context Context, lhsCandidate *CandidateNode, rhs Context, calculation crossFunctionCalculation, results *list.List, calcWhenEmpty bool) error { - if calcWhenEmpty && rhs.MatchingNodes.Len() == 0 { resultCandidate, err := calculation(d, context, lhsCandidate, nil) if err != nil { @@ -78,7 +77,7 @@ func resultsForRhs(d *dataTreeNavigator, context Context, lhsCandidate *Candidat } func doCrossFunc(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode, calculation crossFunctionCalculation, calcWhenEmpty bool) (Context, error) { - var results = list.New() + results := list.New() lhs, err := d.GetMatchingNodes(context, expressionNode.Lhs) if err != nil { return Context{}, err @@ -86,7 +85,6 @@ func doCrossFunc(d *dataTreeNavigator, context Context, expressionNode *Expressi log.Debugf("crossFunction LHS len: %v", lhs.MatchingNodes.Len()) rhs, err := d.GetMatchingNodes(context, expressionNode.Rhs) - if err != nil { return Context{}, err } @@ -111,9 +109,9 @@ func doCrossFunc(d *dataTreeNavigator, context Context, expressionNode *Expressi } func crossFunction(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode, calculation crossFunctionCalculation, calcWhenEmpty bool) (Context, error) { - var results = list.New() + results := list.New() - var evaluateAllTogether = true + evaluateAllTogether := true for matchEl := context.MatchingNodes.Front(); matchEl != nil; matchEl = matchEl.Next() { evaluateAllTogether = evaluateAllTogether && matchEl.Value.(*CandidateNode).EvaluateTogether if !evaluateAllTogether { diff --git a/pkg/yqlib/operators_test.go b/pkg/yqlib/operators_test.go index 197e1755..6eb64d5a 100644 --- a/pkg/yqlib/operators_test.go +++ b/pkg/yqlib/operators_test.go @@ -82,7 +82,6 @@ func testScenario(t *testing.T, s *expressionScenario) { } context, err := NewDataTreeNavigator().GetMatchingNodes(Context{MatchingNodes: inputs}, node) - if err != nil { t.Error(fmt.Errorf("%w: %v", err, s.expression)) return @@ -156,7 +155,6 @@ func formatYaml(yaml string, filename string) string { func documentScenarios(t *testing.T, title string, scenarios []expressionScenario) { f, err := os.Create(fmt.Sprintf("doc/%v.md", title)) - if err != nil { t.Error(err) return diff --git a/pkg/yqlib/printer.go b/pkg/yqlib/printer.go index a264bd49..12285ea8 100644 --- a/pkg/yqlib/printer.go +++ b/pkg/yqlib/printer.go @@ -13,7 +13,7 @@ import ( type Printer interface { PrintResults(matchingNodes *list.List) error PrintedAnything() bool - //e.g. when given a front-matter doc, like jekyll + // e.g. when given a front-matter doc, like jekyll SetAppendix(reader io.Reader) } diff --git a/pkg/yqlib/printer_test.go b/pkg/yqlib/printer_test.go index 8c74af87..a30c62d2 100644 --- a/pkg/yqlib/printer_test.go +++ b/pkg/yqlib/printer_test.go @@ -35,7 +35,7 @@ func nodeToList(candidate *CandidateNode) *list.List { func TestPrinterMultipleDocsInSequence(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -73,7 +73,7 @@ func TestPrinterMultipleDocsInSequence(t *testing.T) { func TestPrinterMultipleDocsInSequenceWithLeadingContent(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -115,7 +115,7 @@ func TestPrinterMultipleDocsInSequenceWithLeadingContent(t *testing.T) { func TestPrinterMultipleFilesInSequence(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -162,7 +162,7 @@ func TestPrinterMultipleFilesInSequence(t *testing.T) { func TestPrinterMultipleFilesInSequenceWithLeadingContent(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -212,7 +212,7 @@ func TestPrinterMultipleFilesInSequenceWithLeadingContent(t *testing.T) { func TestPrinterMultipleDocsInSinglePrint(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -231,7 +231,7 @@ func TestPrinterMultipleDocsInSinglePrint(t *testing.T) { func TestPrinterMultipleDocsInSinglePrintWithLeadingDoc(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -260,7 +260,7 @@ a: coconut func TestPrinterMultipleDocsInSinglePrintWithLeadingDocTrailing(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) @@ -286,7 +286,7 @@ a: coconut func TestPrinterScalarWithLeadingCont(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) printer := NewPrinterWithSingleWriter(writer, YamlOutputFormat, true, false, 2, true) node, err := NewExpressionParser().ParseExpression(".a") @@ -311,7 +311,7 @@ coconut func TestPrinterMultipleDocsJson(t *testing.T) { var output bytes.Buffer - var writer = bufio.NewWriter(&output) + writer := bufio.NewWriter(&output) // note printDocSeparators is true, it should still not print document separators // when outputing JSON. printer := NewPrinterWithSingleWriter(writer, JsonOutputFormat, true, false, 0, true) diff --git a/pkg/yqlib/printer_writer.go b/pkg/yqlib/printer_writer.go index d4292323..ae8c1cc9 100644 --- a/pkg/yqlib/printer_writer.go +++ b/pkg/yqlib/printer_writer.go @@ -70,12 +70,10 @@ func (sp *multiPrintWriter) GetWriter(node *CandidateNode) (*bufio.Writer, error name = fmt.Sprintf("%v.%v", name, sp.extension) f, err := os.Create(name) - if err != nil { return nil, err } sp.index = sp.index + 1 return bufio.NewWriter(f), nil - } diff --git a/pkg/yqlib/stream_evaluator.go b/pkg/yqlib/stream_evaluator.go index b4cf2c6f..6cdddf7d 100644 --- a/pkg/yqlib/stream_evaluator.go +++ b/pkg/yqlib/stream_evaluator.go @@ -89,7 +89,6 @@ func (s *streamEvaluator) EvaluateFiles(expression string, filenames []string, p } func (s *streamEvaluator) Evaluate(filename string, reader io.Reader, node *ExpressionNode, printer Printer, leadingContent string) (uint, error) { - var currentIndex uint decoder := yaml.NewDecoder(reader) for { @@ -120,7 +119,6 @@ func (s *streamEvaluator) Evaluate(filename string, reader io.Reader, node *Expr return currentIndex, errorParsing } err := printer.PrintResults(result.MatchingNodes) - if err != nil { return currentIndex, err } diff --git a/pkg/yqlib/utils.go b/pkg/yqlib/utils.go index aa514770..41537c73 100644 --- a/pkg/yqlib/utils.go +++ b/pkg/yqlib/utils.go @@ -75,7 +75,7 @@ func processLeadingContent(mappedDoc *CandidateNode, writer io.Writer, printDocS } func processReadStream(reader *bufio.Reader) (io.Reader, string, error) { - var commentLineRegEx = regexp.MustCompile(`^\s*#`) + commentLineRegEx := regexp.MustCompile(`^\s*#`) var sb strings.Builder for { peekBytes, err := reader.Peek(3) diff --git a/pkg/yqlib/write_in_place_handler.go b/pkg/yqlib/write_in_place_handler.go index 533854cc..76c2a815 100644 --- a/pkg/yqlib/write_in_place_handler.go +++ b/pkg/yqlib/write_in_place_handler.go @@ -15,13 +15,11 @@ type writeInPlaceHandlerImpl struct { } func NewWriteInPlaceHandler(inputFile string) writeInPlaceHandler { - return &writeInPlaceHandlerImpl{inputFile, nil} } func (w *writeInPlaceHandlerImpl) CreateTempFile() (*os.File, error) { file, err := createTempFile() - if err != nil { return nil, err }