version: "2" run: timeout: 5m tests: true build-tags: - sqlite_cgo linters: default: none enable: - asasalint - bodyclose - copyloopvar - depguard - dogsled - durationcheck - errcheck - errorlint - exhaustive - forbidigo - gocheckcompilerdirectives - gocritic - gosec - govet - ineffassign - loggercheck - misspell - nilerr - noctx - nolintlint - prealloc - predeclared - revive - rowserrcheck - sloglint - sqlclosecheck - staticcheck - unconvert - unparam - unused - usestdlibvars - whitespace settings: depguard: rules: permissions: files: - "**/internal/permissions/**" deny: - pkg: "glchat/internal/(auth|guilds|roles|channels|messages|files|invites|voice|search|gateway|emojis|sounds|webhooks|moderation|audit|friends|dm)/" desc: "permissions must stay a leaf package without domain dependencies" database: files: - "**/internal/database/**" deny: - pkg: "glchat/internal/(server|gateway|auth|guilds|roles|channels|messages)/" desc: "the database package must not import domain packages" forbidigo: forbid: - pattern: 'panic\(' msg: "no panics in handlers or services; return errors instead" - pattern: 'fmt\.Print.*' msg: "use log/slog instead of fmt printing" analyze-types: false gocritic: enabled-tags: - diagnostic - performance disabled-checks: - hugeParam - rangeValCopy gosec: excludes: - G404 misspell: locale: US revive: rules: - name: blank-imports - name: context-as-argument - name: context-keys-type - name: error-return - name: error-strings - name: error-naming - name: exported disabled: true - name: indent-error-flow - name: var-naming - name: unreachable-code sloglint: attr-only: true context: "scope" staticcheck: checks: - all - -ST1000 - -ST1003 exclusions: generated: lax presets: - comments - std-error-handling rules: - path: "_test\\.go" linters: - gosec - errcheck - forbidigo # store: идентификаторы Snowflake заведомо < MaxInt64 (преобразования # документированы в idToInt/intToID), SQL собирается из константных # фрагментов шаблона, а значения всегда передаются параметрами. - path: "internal/store/" linters: - gosec - path: "(^|/)internal/database/sqlc/" linters: - revive - gocritic - unused - staticcheck # gofumpt намеренно не включён в formatters golangci-lint: в v2.13 он сообщает # о расхождениях, которых `golangci-lint fmt` не устраняет (проверено на v2.13.2). # gofumpt применяется отдельным инструментом в целях make fmt / make go-lint. formatters: enable: - goimports settings: goimports: local-prefixes: - glchat exclusions: generated: lax