From 5beb56d77b80dba70eba832e299d0203ca2be968 Mon Sep 17 00:00:00 2001 From: Abhijeet V Date: Mon, 14 Apr 2025 17:50:57 +0530 Subject: [PATCH] add ci linting and fix existing lint errors --- .github/workflows/go.yml | 15 ++++++++++----- expr.go | 4 ++-- lex.go | 17 ++++++++--------- parser.go | 6 +++--- validate.go | 2 +- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index d0bbabe..3850d58 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -40,11 +40,16 @@ jobs: - name: Test run: | go test ./... -race - + - name: Coverage run: | make coverage-diff - + + - name: Lint + uses: golangci/golangci-lint-action@08e2f20817b15149a52b5b3ebe7de50aff2ba8c5 + with: + args: --timeout=5m + vulncheck: name: Vulnerability Check runs-on: ubuntu-latest @@ -56,12 +61,12 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - + - name: go mod package cache uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-122-${{ hashFiles('tests/go.mod') }} - - name: govulncheck - uses: golang/govulncheck-action@7da72f730e37eeaad891fcff0a532d27ed737cd4 # v1 \ No newline at end of file + - name: govulncheck + uses: golang/govulncheck-action@7da72f730e37eeaad891fcff0a532d27ed737cd4 # v1 diff --git a/expr.go b/expr.go index f5e7a86..0c8ed19 100644 --- a/expr.go +++ b/expr.go @@ -166,9 +166,9 @@ func (l *logicalExpr) String() string { // root will return the root of the expr tree func root(lExpr *logicalExpr, raw string) (expr, error) { const op = "mql.root" - switch { + switch lExpr { // intentionally not checking raw, since can be an empty string - case lExpr == nil: + case nil: return nil, fmt.Errorf("%s: %w (missing expression)", op, ErrInvalidParameter) } logicalOp := lExpr.logicalOp diff --git a/lex.go b/lex.go index 22e6cd5..e94b074 100644 --- a/lex.go +++ b/lex.go @@ -123,24 +123,24 @@ WriteToBuf: // keep reading runes into the buffer until we encounter eof or the final delimiter. for { r = l.read() - switch { - case r == eof: + switch r { + case eof: break WriteToBuf - case r == backslash: + case backslash: nextR := l.read() - switch { - case nextR == eof: + switch nextR { + case eof: tokenBuf.WriteRune(r) return nil, fmt.Errorf("%s: %w in %q", op, ErrInvalidTrailingBackslash, tokenBuf.String()) - case nextR == backslash: + case backslash: tokenBuf.WriteRune(nextR) - case nextR == delimiter: + case delimiter: tokenBuf.WriteRune(nextR) default: tokenBuf.WriteRune(r) tokenBuf.WriteRune(nextR) } - case r == delimiter: // end of the quoted string we're scanning + case delimiter: // end of the quoted string we're scanning finalDelimiter = true break WriteToBuf default: // otherwise, write the rune into the keyword buffer @@ -159,7 +159,6 @@ WriteToBuf: // lexSymbolState scans for strings and can emit the following tokens: // orToken, andToken, containsToken func lexSymbolState(l *lexer) (lexStateFunc, error) { - const op = "mql.lexSymbolState" panicIfNil(l, "lexSymbolState", "lexer") defer l.current.clear() diff --git a/parser.go b/parser.go index 28e754b..3625c5e 100644 --- a/parser.go +++ b/parser.go @@ -184,10 +184,10 @@ func (p *parser) parseComparisonExpr() (expr, error) { case cmpExpr.value == nil && (p.currentToken.Type != stringToken && p.currentToken.Type != numberToken && p.currentToken.Type != symbolToken): return nil, fmt.Errorf("%s: %w %q in: %q", op, ErrUnexpectedToken, p.currentToken.Value, p.raw) case cmpExpr.value == nil: - switch { - case p.currentToken.Type == symbolToken: + switch p.currentToken.Type { + case symbolToken: return nil, fmt.Errorf("%s: %w %s == %s (expected: %s or %s) in %q", op, ErrInvalidComparisonValueType, p.currentToken.Type, p.currentToken.Value, stringToken, numberToken, p.raw) - case p.currentToken.Type == stringToken, p.currentToken.Type == numberToken: + case stringToken, numberToken: s := p.currentToken.Value cmpExpr.value = &s default: diff --git a/validate.go b/validate.go index ba37334..01b7ccc 100644 --- a/validate.go +++ b/validate.go @@ -32,7 +32,7 @@ func fieldValidators(model reflect.Value, opt ...Option) (map[string]validator, model.Kind() == reflect.Pointer && model.Elem().Kind() != reflect.Struct: return nil, fmt.Errorf("%s: model must be a struct or a pointer to a struct: %w", op, ErrInvalidParameter) } - var m reflect.Value = model + m := model if m.Kind() != reflect.Struct { m = model.Elem() }