--- # Linters that should pass for all FerretDB and tools code. run: timeout: 3m linters-settings: # asciicheck depguard: rules: old-packages: files: - $all deny: - pkg: golang.org/x/net/context desc: use `context` package instead - pkg: golang.org/x/exp/slices desc: use `slices` package instead - pkg: golang.org/x/exp/maps desc: use `maps` package instead - pkg: github.com/jackc/pgconn desc: use `github.com/jackc/pgx/v5/pgconn` package instead - pkg: github.com/jackc/pgproto3 desc: use `github.com/jackc/pgx/v5/pgproto3` package instead - pkg: github.com/jackc/pgtype desc: use `github.com/jackc/pgx/v5/pgtype` package instead - pkg: github.com/jackc/pgx$ desc: use `github.com/jackc/pgx/v5` package instead - pkg: github.com/jackc/pgx/v4 desc: use `github.com/jackc/pgx/v5` package instead # TODO https://github.com/FerretDB/FerretDB/issues/4798 # - pkg: go.mongodb.org/mongo-driver/bson # desc: use `go.mongodb.org/mongo-driver/v2/bson` package instead # - pkg: go.mongodb.org/mongo-driver/mongo # desc: use `go.mongodb.org/mongo-driver/v2/mongo` package instead # - pkg: github.com/xdg-go/scram # desc: use `github.com/FerretDB/FerretDB/v2/internal/util/scram` package instead ferretdb-in-tools: files: - "**/tools/**/*.go" deny: - pkg: github.com/FerretDB/FerretDB/v2/internal/ desc: tools should not import FerretDB code wirebson: files: - $all - "!**/cmd/envtool/*.go" - "!**/internal/clientconn/*.go" - "!**/internal/dataapi/server/*.go" - "!**/internal/documentdb/**.go" - "!**/internal/driver/*.go" - "!**/internal/handler/**.go" - "!**/internal/mcp/*.go" - "!**/internal/mongoerrors/*.go" - "!**/internal/util/logging/*.go" - "!**/internal/util/scram/*.go" - "!**/internal/util/testutil/*.go" deny: - pkg: github.com/FerretDB/wire/wirebson documentdb: files: - "**/internal/documentdb/genwrap/*.go" deny: - pkg: github.com/FerretDB/FerretDB/v2/internal/documentdb cursor: files: - $all - "!**/internal/documentdb/**.go" deny: - pkg: github.com/FerretDB/FerretDB/v2/internal/documentdb/cursor exhaustive: default-signifies-exhaustive: false exhaustruct: include: - TODO forbidigo: forbid: - p: ^\Qpgxpool.Pool.AcquireFunc\E$ pkg: ^\Qgithub.com/jackc/pgx/v5/pgxpool\E$ msg: Use `Acquire` with `defer Release()` instead. # TODO https://github.com/FerretDB/FerretDB/issues/4798 - p: ^\Qbson.E\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/bson\E$ msg: Use `*wirebson.Document` or `*wirebson.Array` instead. - p: ^\Qbson.D\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/bson\E$ msg: Use `*wirebson.Document` instead. - p: ^\Qbson.M\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/bson\E$ msg: Use `*wirebson.Document` instead. - p: ^\Qbson.A\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/bson\E$ msg: Use `*wirebson.Array` instead. - p: ^\Qbson.E\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/v2/bson\E$ msg: Use `*wirebson.Document` or `*wirebson.Array` instead. - p: ^\Qbson.D\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/v2/bson\E$ msg: Use `*wirebson.Document` instead. - p: ^\Qbson.M\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/v2/bson\E$ msg: Use `*wirebson.Document` instead. - p: ^\Qbson.A\E$ pkg: ^\Qgo.mongodb.org/mongo-driver/v2/bson\E$ msg: Use `*wirebson.Array` instead. exclude-godoc-examples: true analyze-types: true gci: sections: - standard - default - prefix(github.com/FerretDB/FerretDB/v2/) goconst: min-occurrences: 5 ignore-tests: true godot: scope: toplevel exclude: - check interfaces capital: true godox: keywords: - BUG - FIXME - HACK - lala - lalala goheader: # Please do not update it, including bumping a year. template: |- Copyright 2021 FerretDB Inc. Licensed 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. goimports: local-prefixes: github.com/FerretDB/FerretDB/v2 gomodguard: blocked: modules: - github.com/FerretDB/FerretDB: reason: "Use `github.com/FerretDB/FerretDB/v2/...` instead." gosimple: checks: ["all"] govet: enable-all: true disable: - fieldalignment - nilness - shadow importas: # https://github.com/julz/importas/issues/15 no-unaliased: true no-extra-aliases: false alias: - pkg: runtime/debug alias: runtimedebug - pkg: github.com/prometheus/client_model/go alias: dto - pkg: go.opentelemetry.io/otel/attribute alias: otelattribute - pkg: go.opentelemetry.io/otel/codes alias: otelcodes - pkg: go.opentelemetry.io/otel/trace alias: oteltrace - pkg: go.opentelemetry.io/otel/sdk/resource alias: otelsdkresource - pkg: go.opentelemetry.io/otel/sdk/trace alias: otelsdktrace - pkg: go.opentelemetry.io/otel/semconv/v1.34.0 alias: otelsemconv # ineffassign lll: line-length: 130 tab-width: 4 misspell: ignore-words: - guiness # present in the test dataset extra-words: # https://go.dev/wiki/Spelling, https://github.com/golangci/misspell/issues/11 - typo: "iff" correction: "if" - typo: "cancelation" correction: "cancellation" nolintlint: allow-unused: false allow-no-explanation: [] require-explanation: true require-specific: true revive: ignore-generated-header: true severity: error rules: [] sloglint: no-mixed-args: true kv-only: false attr-only: true no-global: "all" context: "scope" static-msg: false # TODO https://github.com/FerretDB/FerretDB/issues/3421 no-raw-keys: false # TODO https://github.com/FerretDB/FerretDB/issues/3421 key-naming-case: snake args-on-sep-lines: false staticcheck: checks: - all - -SA1019 # ignore deprecation errors in existing code; new code is checked by the other configuration tagalign: sort: true order: - name - cmd - arg - default - help unparam: check-exported: false unused: field-writes-are-uses: false post-statements-are-reads: false exported-fields-are-used: false parameters-are-used: true # it should be false, TODO https://github.com/FerretDB/FerretDB-DocumentDB/issues/823 local-variables-are-used: false generated-is-used: false whitespace: multi-if: false multi-func: false linters: disable-all: true enable: - asciicheck - depguard - exhaustive - exhaustruct - forbidigo - gci - gochecksumtype - goconst - godot - godox - goheader - goimports - gomodguard - gosimple - govet - importas - ineffassign - lll - misspell - nolintlint - revive - sloglint - staticcheck - tagalign - unparam - unused - whitespace issues: max-issues-per-linter: 0 max-same-issues: 0 exclude-use-default: false exclude-rules: # we don't want to introduce that constant - linters: [goconst] text: "^string `_id` has \\d+ occurrences, make it a constant" - linters: [forbidigo] path: "\\Qferretdb/ferretdb_test.go" text: "\\Quse of `bson.D` forbidden"