version: "2" output: sort-order: - file linters: default: none enable: - bidichk - bodyclose - depguard - dupl - errcheck - forbidigo - gocheckcompilerdirectives - gocritic - goheader - govet - ineffassign - mirror - modernize - nakedret - nilnil - nolintlint - perfsprint - revive - staticcheck - testifylint - unconvert - unparam - unused - usestdlibvars - usetesting - wastedassign settings: depguard: rules: main: deny: - pkg: encoding/json desc: use gitea's modules/json instead of encoding/json - pkg: github.com/unknwon/com desc: use gitea's util and replacements - pkg: io/ioutil desc: use os or io instead - pkg: golang.org/x/exp desc: it's experimental and unreliable - pkg: code.gitea.io/gitea/modules/git/internal desc: do not use the internal package, use AddXxx function instead - pkg: gopkg.in/ini.v1 desc: do not use the ini package, use gitea's config system instead - pkg: gitea.com/go-chi/cache desc: do not use the go-chi cache package, use gitea's cache system - pkg: github.com/pkg/errors desc: use builtin errors package instead migrations: files: - '**/models/migrations/**/*.go' deny: - pkg: code.gitea.io/gitea/models$ desc: migrations must not depend on the models package - pkg: code.gitea.io/gitea/modules/structs desc: migrations must not depend on modules/structs (API structures change over time) nolintlint: allow-unused: false require-explanation: true require-specific: true gocritic: enabled-checks: - equalFold disabled-checks: - ifElseChain - singleCaseSwitch # Every time this occurred in the code, there was no other way. - deprecatedComment # conflicts with go-swagger comments revive: severity: error rules: - name: blank-imports - name: constant-logical-expr - name: context-as-argument - name: context-keys-type - name: dot-imports - name: empty-lines - name: error-return - name: error-strings - name: exported - name: identical-branches - name: if-return - name: increment-decrement - name: modifies-value-receiver - name: package-comments - name: redefines-builtin-id - name: superfluous-else - name: time-naming - name: unexported-return - name: var-declaration - name: var-naming arguments: - [] # AllowList - do not remove as args for the rule are positional and won't work without lists first - [] # DenyList - - skip-package-name-checks: true # supress errors from underscore in migration packages staticcheck: checks: - all - -ST1003 - -ST1005 - -QF1001 - -QF1006 - -QF1008 testifylint: disable: - go-require - require-error usetesting: os-temp-dir: true perfsprint: concat-loop: false govet: enable: - nilness - unusedwrite goheader: values: regexp: HEADER: '((Copyright [^\n]+|All rights reserved\.)\n)*Copyright \d{4} (The (Gogs|Gitea) Authors|Gitea Authors|Gitea)\.( All rights reserved\.)?(\n(Copyright [^\n]+|All rights reserved\.))*\nSPDX-License-Identifier: [\w.-]+' template: '{{ HEADER }}' exclusions: generated: lax presets: - comments - common-false-positives - legacy - std-error-handling rules: - linters: - dupl - errcheck - staticcheck - unparam path: _test\.go - linters: - dupl - errcheck path: models/migrations/v - linters: - forbidigo path: cmd - linters: - dupl text: (?i)webhook - linters: - gocritic text: (?i)`ID' should not be capitalized - linters: - unused text: (?i)swagger - linters: - gocritic text: '(?i)commentFormatting: put a space between `//` and comment text' - linters: - gocritic text: '(?i)exitAfterDefer:' paths: - node_modules - .venv - public - web_src - third_party$ - builtin$ - examples$ issues: max-issues-per-linter: 0 max-same-issues: 0 formatters: enable: - gci - gofumpt settings: gci: custom-order: true sections: - standard - prefix(code.gitea.io/gitea) - blank - default gofumpt: extra-rules: true exclusions: generated: lax paths: - node_modules - .venv - public - web_src run: timeout: 10m