corso/src/.golangci.yml
Keepers c58cd9302f
move /cli/config to /pkg (#4858)
Part 1 of two changes I've been carting around since the hackathon.
This PR moves the /cli/config package into /pkg/config.  This allows
sdk consumers to access corso configuration handling, intead of
requiring the CLI package to access it.

---

#### Does this PR need a docs update or release note?

- [x]  No

#### Type of change

- [x] 🤖 Supportability/Tests


#### Test Plan

- [x] 💪 Manual
- [x]  Unit test
- [x] 💚 E2E
2023-12-18 18:24:33 +00:00

167 lines
5.4 KiB
YAML

run:
timeout: 20m
linters:
enable:
- errcheck
- forbidigo
- gci
- gofmt
- gofumpt
- gosimple
- govet
- ineffassign
- lll
- loggercheck
- misspell
- revive
- unused
- usestdlibvars
- wsl
disable:
# Consumes a large amount of memory when running with Graph SDK in the
# project causing OOM failures in Github actions.
- staticcheck
linters-settings:
gci:
sections:
- standard
- default
- prefix(github.com/alcionai/corso)
skip-generated: true
forbidigo:
forbid:
# Don't allow creating contexts without logging in tests. Use an ignore
# lower down to ensure usages of this outside of tests aren't reported.
- 'context\.(Background|TODO)(# tests should use tester\.NewContext)?'
# Don't allow use of path as it hardcodes separator to `/`.
# Use filepath instead.
- '\bpath\.(Ext|Base|Dir|Join)'
# Don't allow the typo m356 to be used in place of m365.
- '[Mm]356(# typo: should be 365)?'
# Don't allow use of testify suite directly. Use one of the wrappers from
# tester/suite.go instead. Use an ignore lower down to exclude packages
# that result in import cycles if they try to use the wrapper.
- 'suite\.Suite(# tests should use one of the Suite wrappers in tester package)?'
# All errors should be constructed and wrapped with the clues package.
# String formatting should be avoided in favor of structured errors (ie: err.With(k, v)).
- '(errors|fmt)\.(New|Stack|Wrap|Error)f?\((# error handling should use clues pkg)?'
# Avoid Warn-level logging in favor of Info or Error.
- 'Warnw?f?\((# logging should use Info or Error)?'
# Prefer suite.Run(name, func() {}) for subtests as testify has it instead
# of suite.T().Run(name, func(t *testing.T) {}).
- '(T\(\)|\st[a-zA-Z0-9]*)\.Run(# prefer testify suite.Run(name, func()) )?'
# Prefer packing ctx values into the error using NewWC, WrapWC, or StackWC
# instead of New|Stack|Wrap().WithClues(ctx)
- 'WithClues(# prefer the builderWC variant - ex: StackWC(ctx, ...))?'
lll:
line-length: 120
revive:
max-open-files: 2048
# Don't know why, but false means ignore generated files.
ignore-generated-header: false
rules:
- name: blank-imports
- name: bool-literal-in-expr
- name: constant-logical-expr
- name: context-as-argument
- name: context-keys-type
- name: duplicated-imports
- name: early-return
- name: empty-block
- name: errorf
- name: error-naming
- name: error-return
- name: error-strings
- name: exported
- name: identical-branches
- name: if-return
- name: import-shadowing
- name: increment-decrement
- name: indent-error-flow
- name: modifies-value-receiver
- name: package-comments
- name: range
- name: receiver-naming
- name: redefines-builtin-id
- name: superfluous-else
- name: time-equal
- name: time-naming
- name: unreachable-code
- name: use-any
- name: useless-break
- name: var-declaration
- name: var-naming
issues:
# Limit on number of errors with identical text reported.
max-same-issues: 50
exclude-rules:
- linters:
- revive
text: "exported:.*details.DetailsModel by other packages, and that stutters"
- linters:
- revive
text: "exported:.*details.DetailsEntry by other packages, and that stutters"
- linters:
- revive
text: "exported:.*mock.MockModelStore by other packages, and that stutters"
- linters:
- revive
text: "unexported-return:.*unexported type selectors.exchangeCategory"
- linters:
- revive
text: "unexported-return:.*unexported type.*kopia.conn"
- path: _test\.go
linters:
- revive
text: "import-shadowing:.*'suite' shadows"
# Don't output about context.Background or context.TODO in non-test files.
# Need complicated multi-part regex because golang doesn't support not regex
# operators for sequences of characters (only character sets). The below
# basically boils down to:
# 1. anything 4 characters long with .go suffix
# 2. anything >= 5 characters long that doesn't end in _test.go
- path: ^.{4}\.go|.*([^_].{4}|_[^t].{3}|_t[^e].{2}|_te[^s].{1}|_tes[^t])\.go
linters:
- forbidigo
text: "context.(Background|TODO)"
- path: internal/m365/collection/drive/collections_test.go
linters:
- lll
- path: internal/m365/collection/drive/collections_tree_test.go
linters:
- lll
- path: pkg/services/m365/api/graph/betasdk
linters:
- wsl
- revive
- gci
- lll
- gofmt
- gofumpt
- misspell
- errcheck
- forbidigo
- path: internal/tester/suite.go
linters:
- forbidigo
text: "suite.Suite"
# account package creates an import cycle with tester package.
- path: pkg/account
linters:
- forbidigo
text: "suite.Suite"
# storage package creates an import cycle with tester package.
- path: pkg/storage
linters:
- forbidigo
text: "suite.Suite"
# Not yet updated. Unclear if it should be updated.
- path: pkg/repository/loadtest
linters:
- forbidigo
text: "suite.Suite"