From c725b526dc8301716a3e827757a0831a19e22071 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 10:04:38 +0000 Subject: [PATCH 1/2] [chore] : Bump golangci/golangci-lint-action from 3.4.0 to 9.2.0 Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 3.4.0 to 9.2.0. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/08e2f20817b15149a52b5b3ebe7de50aff2ba8c5...1e7e51e771db61008b38414a730f564565cf7c20) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-version: 9.2.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test-and-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index bc5bf62..cb4e8ca 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -48,7 +48,7 @@ jobs: go-version: ${{ matrix.go-version }} cache: true - name: Run golangci-lint - uses: golangci/golangci-lint-action@08e2f20817b15149a52b5b3ebe7de50aff2ba8c5 + uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 - uses: autero1/action-gotestsum@7263b9d73912eec65f46337689e59fac865c425f # v2.0.0 with: gotestsum_version: 1.9.0 From d835663f559430ee80a0194a4ebb2243ade9cd7e Mon Sep 17 00:00:00 2001 From: Tim Gross Date: Mon, 26 Jan 2026 09:56:59 -0500 Subject: [PATCH 2/2] upgrade linter and fix complaints about error message capitalization --- .github/workflows/test-and-build.yml | 2 -- .go-version | 2 +- .golangci.yml | 22 +++++++++++++++++++--- evaluate.go | 10 +++++----- evaluate_test.go | 4 +--- examples/expr-eval/expr-eval.go | 2 +- filter.go | 6 +++--- 7 files changed, 30 insertions(+), 18 deletions(-) diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index cb4e8ca..ec270a3 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -34,7 +34,6 @@ jobs: strategy: matrix: go-version: - - '1.23' # named in go.mod - 'oldstable' - 'stable' env: @@ -65,4 +64,3 @@ jobs: run: go tool cover -func=/tmp/coverage.out - name: Build go run: go build ./... - \ No newline at end of file diff --git a/.go-version b/.go-version index 193d140..3900bcd 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.23 \ No newline at end of file +1.24 diff --git a/.golangci.yml b/.golangci.yml index 80c70fa..85ba7c9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,7 +1,23 @@ # Copyright IBM Corp. 2019, 2025 # SPDX-License-Identifier: MPL-2.0 +version: "2" linters: - enable: - - errcheck -output_format: colored-line-number \ No newline at end of file + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/evaluate.go b/evaluate.go index 33e1978..9c3dfd5 100644 --- a/evaluate.go +++ b/evaluate.go @@ -71,7 +71,7 @@ func derefType(rtype reflect.Type) reflect.Type { func doMatchMatches(expression *grammar.MatchExpression, value reflect.Value) (bool, error) { if !value.Type().ConvertibleTo(byteSliceTyp) { - return false, fmt.Errorf("Value of type %s is not convertible to []byte", value.Type()) + return false, fmt.Errorf("value of type %s is not convertible to []byte", value.Type()) } var re *regexp.Regexp @@ -83,7 +83,7 @@ func doMatchMatches(expression *grammar.MatchExpression, value reflect.Value) (b var err error re, err = regexp.Compile(expression.Value.Raw) if err != nil { - return false, fmt.Errorf("Failed to compile regular expression %q: %v", expression.Value.Raw, err) + return false, fmt.Errorf("failed to compile regular expression %q: %v", expression.Value.Raw, err) } expression.Value.Converted = re } @@ -181,7 +181,7 @@ func doMatchIn(expression *grammar.MatchExpression, value reflect.Value) (bool, return strings.Contains(value.String(), matchValue.(string)), nil default: - return false, fmt.Errorf("Cannot perform in/contains operations on type %s for selector: %q", kind, expression.Selector) + return false, fmt.Errorf("cannot perform in/contains operations on type %s for selector: %q", kind, expression.Selector) } } @@ -370,7 +370,7 @@ func evaluateMatchExpression(expression *grammar.MatchExpression, datum interfac } return false, err default: - return false, fmt.Errorf("Invalid match operation: %d", expression.Operator) + return false, fmt.Errorf("invalid match operation: %d", expression.Operator) } } @@ -484,5 +484,5 @@ func evaluate(ast grammar.Expression, datum interface{}, opt ...Option) (bool, e case *grammar.CollectionExpression: return evaluateCollectionExpression(node, datum, opt...) } - return false, fmt.Errorf("Invalid AST node") + return false, fmt.Errorf("invalid AST node") } diff --git a/evaluate_test.go b/evaluate_test.go index e4c0feb..bcc2f9a 100644 --- a/evaluate_test.go +++ b/evaluate_test.go @@ -313,7 +313,7 @@ var evaluateTests map[string]expressionTest = map[string]expressionTest{ {expression: "Nested.MapOfStructs is empty or (Nested.SliceOfInts contains 7 and 9 in Nested.SliceOfInts)", result: true, benchQuick: true}, {expression: "Nested.SliceOfStructs.0.X == 1", result: true}, {expression: "Nested.SliceOfStructs.0.Y == 4", result: false}, - {expression: "Map in Nested", result: false, err: "Cannot perform in/contains operations on type struct for selector: \"Nested\""}, + {expression: "Map in Nested", result: false, err: "cannot perform in/contains operations on type struct for selector: \"Nested\""}, {expression: `"foobar" in "/Nested/SliceOfInfs"`, result: true}, {expression: `"1" in "/Nested/SliceOfInfs"`, result: true}, {expression: `"2" in "/Nested/SliceOfInfs"`, result: false}, @@ -365,14 +365,12 @@ func TestEvaluate(t *testing.T) { t.Parallel() for name, tcase := range evaluateTests { // capture these values in the closure - name := name tcase := tcase t.Run(name, func(t *testing.T) { t.Parallel() for i, expTest := range tcase.expressions { // capture these values in the closure - expTest := expTest t.Run(fmt.Sprintf("#%d - %s", i, expTest.expression), func(t *testing.T) { t.Parallel() diff --git a/examples/expr-eval/expr-eval.go b/examples/expr-eval/expr-eval.go index 15ed14d..de1c4ea 100644 --- a/examples/expr-eval/expr-eval.go +++ b/examples/expr-eval/expr-eval.go @@ -19,7 +19,7 @@ type Internal struct { Hidden int `bexpr:"-"` // Unexported fields are not available for use by the evaluator - unexported int + unexported int //nolint:unused } type Matchable struct { diff --git a/filter.go b/filter.go index 242b0c9..d5d60f5 100644 --- a/filter.go +++ b/filter.go @@ -25,7 +25,7 @@ func CreateFilter(expression string) (*Filter, error) { } exp, err := CreateEvaluator(expression) if err != nil { - return nil, fmt.Errorf("Failed to create boolean expression evaluator: %v", err) + return nil, fmt.Errorf("failed to create boolean expression evaluator: %v", err) } return &Filter{ @@ -76,7 +76,7 @@ func (f *Filter) Execute(data interface{}) (interface{}, error) { item := rvalue.MapIndex(mapKey) if !item.CanInterface() { - return nil, fmt.Errorf("Map value cannot be used") + return nil, fmt.Errorf("map value cannot be used") } result, err := f.evaluator.Evaluate(item.Interface()) @@ -91,6 +91,6 @@ func (f *Filter) Execute(data interface{}) (interface{}, error) { return newMap.Interface(), nil default: - return nil, fmt.Errorf("Only slices, arrays and maps are filterable") + return nil, fmt.Errorf("only slices, arrays and maps are filterable") } }