# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

linters:
  disable-all: true
  enable:
  - asasalint
  - asciicheck
  # - containedctx
  - contextcheck
  - decorder
  - dogsled
  - errname
  - errcheck
  - errchkjson
  - errorlint
  - exhaustive
  # TODO:// enable this lint
  # - exhaustruct
  - gci
  - goconst
  - gocritic
  - gocyclo
  - godot
  - gofumpt
  - goprintffuncname
  - gosec
  - gosimple
  - govet
  - importas
  - ineffassign
  - lll
  - misspell
  - staticcheck
  - stylecheck
  - typecheck
  - unconvert
  - unparam
  - unused
  - usestdlibvars
  - whitespace
linters-settings:
  importas:
    no-unaliased: true
    alias:
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1
      alias: commonv1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1
      alias: databasev1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1
      alias: modelv1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/property/v1
      alias: propertyv1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/measure/v1
      alias: measurev1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1
      alias: streamv1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/cluster/v1
      alias: clusterv1
    - pkg: github.com/apache/skywalking-banyandb/api/proto/banyandb/trace/v1
      alias: tracev1
    - pkg: github.com/apache/skywalking-banyandb/pkg/pb/v1
      alias: pbv1
  lll:
    line-length: 170
  goconst:
    min-occurrences: 4
  govet:
    enable:
    - fieldalignment
    - shadow
  misspell:
    locale: US
  unparam:
    check-exported: false
  gci:
    sections:
    - standard
    - default
    - prefix(github.com/apache/skywalking-banyandb/)
  gocritic:
    enabled-checks:
    - appendCombine
    - boolExprSimplify
    - builtinShadow
    - commentedOutCode
    - commentedOutImport
    - docStub
    - emptyFallthrough
    - equalFold
    - hexLiteral
    - indexAlloc
    - initClause
    - methodExprCall
    - nilValReturn
    - octalLiteral
    - rangeExprCopy
    - stringXbytes
    - typeAssertChain
    - typeUnparen
    - unnecessaryBlock
    - weakCond
  godot:
    #   declarations - for top level declaration comments (default);
    #   toplevel     - for top level comments;
    #   all          - for all comments.
    scope: toplevel
  gosec:
    excludes:
    - G115 # integer overflow conversion (TODO: verify these)
  staticcheck:
    checks: [ "all", "-ST1000", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ]
  exhaustive:
    check:
    - switch
    - map
    default-signifies-exhaustive: true
    ignore-enum-members: ".+UNSPECIFIED$"
  exhaustruct:
    exclude:
    - 'cobra\.Command$'

run:
  go: "1.25"
issues:
  exclude-rules:
  - path: ".*\\.pb\\.go"
    linters:
    - "*"
  - path: ".*\\.pb\\.validate\\.go"
    linters:
    - "*"
  - path: ".*\\.gen\\.go"
    linters:
    - "*"
  - path: _test\.go$|^tests/|^samples/
    linters:
    - errcheck
    - maligned
  - linters:
    - staticcheck
    text: "SA1019: package github.com/golang/protobuf"
  max-same-issues: 0
