# Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: BUSL-1.1 linters: disable-all: true enable: - gofmt - govet - unconvert - staticcheck - ineffassign - unparam - forbidigo - gomodguard - depguard issues: # Disable the default exclude list so that all excludes are explicitly # defined in this file. exclude-use-default: false exclude-rules: # Temp Ignore SA9004: only the first constant in this group has an explicit type # https://staticcheck.io/docs/checks#SA9004 - linters: [staticcheck] text: "SA9004:" - linters: [staticcheck] text: 'SA1019: "io/ioutil" has been deprecated since Go 1.16' # An argument that always receives the same value is often not a problem. - linters: [unparam] text: "always receives" # Often functions will implement an interface that returns an error without # needing to return an error. Sometimes the error return value is unnecessary # but a linter can not tell the difference. - linters: [unparam] text: 'result \d+ \(error\) is always nil' # Allow unused parameters to start with an underscore. Arguments with a name # of '_' are already ignored. # Ignoring longer names that start with underscore allow for better # self-documentation than a single underscore by itself. Underscore arguments # should generally only be used when a function is implementing an interface. - linters: [unparam] text: "`_[^`]*` is unused" # Temp ignore some common unused parameters so that unparam can be added # incrementally. - linters: [unparam] text: "`(t|resp|req|entMeta)` is unused" # Temp ignore everything in _oss(_test).go and _ent(_test).go. Many of these # could use underscore to ignore the unused arguments, but the "always returns" # issue will likely remain in oss, and will need to be excluded. - linters: [unparam] path: "(_oss.go|_oss_test.go|_ent.go|_ent_test.go)" linters-settings: govet: check-shadowing: true enable-all: true disable: - fieldalignment - nilness - shadow - unusedwrite gofmt: simplify: true forbidigo: # Forbid the following identifiers (list of regexp). forbid: - '\bioutil\b(# Use io and os packages instead of ioutil)?' - '\brequire\.New\b(# Use package-level functions with explicit TestingT)?' - '\bassert\.New\b(# Use package-level functions with explicit TestingT)?' # Exclude godoc examples from forbidigo checks. # Default: true exclude_godoc_examples: false gomodguard: blocked: # List of blocked modules. modules: # Blocked module. - github.com/hashicorp/net-rpc-msgpackrpc: recommendations: - github.com/hashicorp/consul-net-rpc/net-rpc-msgpackrpc - github.com/hashicorp/go-msgpack: recommendations: - github.com/hashicorp/consul-net-rpc/go-msgpack - github.com/golang/protobuf: recommendations: - google.golang.org/protobuf depguard: list-type: denylist include-go-root: true # A list of packages for the list type specified. # Default: [] packages: - net/rpc # A list of packages for the list type specified. # Specify an error message to output when a denied package is used. # Default: [] packages-with-error-message: - net/rpc: "only use forked copy in github.com/hashicorp/consul-net-rpc/net/rpc" - github.com/golang/protobuf: "only use google.golang.org/protobuf" run: timeout: 10m concurrency: 4 skip-dirs-use-default: false