Files
docdb/.golangci.yml

285 lines
8.2 KiB
YAML

---
# Linters that should pass for all DocDB 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/hanzoai/docdb/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/hanzoai/docdb/v2/internal/util/scram` package instead
docdb-in-tools:
files:
- "**/tools/**/*.go"
deny:
- pkg: github.com/hanzoai/docdb/v2/internal/
desc: tools should not import DocDB 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/hanzoai/docdb-wire/wirebson
documentdb:
files:
- "**/internal/documentdb/genwrap/*.go"
deny:
- pkg: github.com/hanzoai/docdb/v2/internal/documentdb
cursor:
files:
- $all
- "!**/internal/documentdb/**.go"
deny:
- pkg: github.com/hanzoai/docdb/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/hanzoai/docdb/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/hanzoai/docdb/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 DocDB 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/hanzoai/docdb/v2
gomodguard:
blocked:
modules:
- github.com/hanzoai/docdb:
reason: "Use `github.com/hanzoai/docdb/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/hanzoai/docdb/issues/3421
no-raw-keys: false # TODO https://github.com/hanzoai/docdb/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/hanzoai/docdb-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: "\\Qhanzoai/docdb_test.go"
text: "\\Quse of `bson.D` forbidden"