一、介绍
golangci-lint
是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golint
、go vet
等。
优点:
- 运行速度快
- 可以集成到 vscode、goland 等开发工具中
- 包含了非常多种代码检查器
- 可以集成到 CI 中
- 这是包含的代码检查器列表:Linters
二、安装
golangci-lint
官方不建议使用 go get
方式安装,推荐使用二进制安装。
MacOS
直接使用 homebrew 安装:
brew install golangci-lint
brew upgrade golangci-lint
Linux 和 Windows
# binary will be $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/Goci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.42.1golangci-lint --version
golangci-lint
将会被安装到 GOPATH/bin 目录中,如果此目录不在环境变量路径中需要加上。
三、使用方式
命令行
在项目根目录下执行以下命令检查整个项目的代码:
golangci-lint run
其等价于:
golangci-lint run ./...
或者可以指定检查某个目录下的代码文件,指定目录时不会递归分析其子目录,要递归分析其子目录需要加上 /…:
golangci-lint run dir1 dir2/... dir3/file1.go
在没有配置文件时,golangci-lint 会使用默认的代码检查器进行检查。
使用以下命令,可以查看默认启用和关闭了哪些检查器:
golangci-lint help linters
四、集成 IDE
1. Visual Studio Code
在 vscode 配置文件中新增以下内容:
"go.lintTool":"golangci-lint",
"go.lintFlags": ["--fast"
golangci-lint 会自动查找项目中的 .golangci.yml 配置文件,不用额外配置。
2. Goland
- 安装插件 Go Linter
可以在 Goland 内插件市场搜索 Go Linter 直接安装。
- 配置 File Watchers
在 Goland 配置页面的 工具 -> File Watchers 进行配置。
点 + 按钮,选择 golangci-lint 创建。
五、排除代码检查
-
有时候有部分代码因为各种原因不能通过代码检查,也不能修改,可以使用注释跳过代码检查。如下所示:
var bad_name int //nolint var bad_name int //nolint:golint,unused
-
可以排除一整块代码:
//nolint func allIssuesInThisFunctionAreExcluded() *string {// ... }//nolint:govet var (a intb int )
-
一整个文件:
//nolint:unparam package pkg
六、配置文件
golangci-lint 会自动在当前目录下查找以下名称的配置文件:
.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json
配置启用的代码选择器
linters:disable-all: trueenable:- megacheck- govetenable-all: truedisable:- maligned- preallocpresets:- bugs- unusedfast: false
示例配置
以下是官方给出的配置文件示例,包含了可以设置的选项和选项的默认值:
# This file contains all available configuration options
# with their default values.# options for analysis running
run:# default concurrency is a available CPU numberconcurrency: 4# timeout for analysis, e.g. 30s, 5m, default is 1mtimeout: 1m# exit code when at least one issue was found, default is 1issues-exit-code: 1# include test files or not, default is truetests: true# list of build tags, all linters use it. Default is empty list.build-tags:- mytag# which dirs to skip: issues from them won't be reported;# can use regexp here: generated.*, regexp is applied on full path;# default value is empty list, but default dirs are skipped independently# from this option's value (see skip-dirs-use-default).# "/" will be replaced by current OS file path separator to properly work# on Windows.skip-dirs:- src/external_libs- autogenerated_by_my_lib# default is true. Enables skipping of directories:# vendor$, third_party$, testdata$, examples$, Godeps$, builtin$skip-dirs-use-default: true# which files to skip: they will be analyzed, but issues from them# won't be reported. Default value is empty list, but there is# no need to include all autogenerated files, we confidently recognize# autogenerated files. If it's not please let us know.# "/" will be replaced by current OS file path separator to properly work# on Windows.skip-files:- ".*\\.my\\.go$"- lib/bad.go# by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":# If invoked with -mod=readonly, the go command is disallowed from the implicit# automatic updating of go.mod described above. Instead, it fails when any changes# to go.mod are needed. This setting is most useful to check that go.mod does# not need updates, such as in a continuous integration and testing system.# If invoked with -mod=vendor, the go command assumes that the vendor# directory holds the correct copies of dependencies and ignores# the dependency descriptions in go.mod.modules-download-mode: readonly|vendor|mod# Allow multiple parallel golangci-lint instances running.# If false (default) - golangci-lint acquires file lock on start.allow-parallel-runners: false# output configuration options
output:# colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions# default is "colored-line-number"format: colored-line-number# print lines of code with issue, default is trueprint-issued-lines: true# print linter name in the end of issue text, default is trueprint-linter-name: true# make issues output unique by line, default is trueuniq-by-line: true# add a prefix to the output file references; default is no prefixpath-prefix: ""# sorts results by: filepath, line and columnsort-results: false# all available settings of specific linters
linters-settings:cyclop:# the maximal code complexity to reportmax-complexity: 10# the maximal average package complexity. If it's higher than 0.0 (float) the check is enabled (default 0.0)package-average: 0.0# should ignore tests (default false)skip-tests: falsedogsled:# checks assignments with too many blank identifiers; default is 2max-blank-identifiers: 2dupl:# tokens count to trigger issue, 150 by defaultthreshold: 100errcheck:# report about not checking of errors in type assertions: `a := b.(MyStruct)`;# default is false: such cases aren't reported by default.check-type-assertions: false# report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;# default is false: such cases aren't reported by default.check-blank: false# [deprecated] comma-separated list of pairs of the form pkg:regex# the regex is used to ignore names within pkg. (default "fmt:.*").# see https://github.com/kisielk/errcheck#the-deprecated-method for detailsignore: fmt:.*,io/ioutil:^Read.*# [deprecated] use exclude-functions instead.# path to a file containing a list of functions to exclude from checking# see https://github.com/kisielk/errcheck#excluding-functions for detailsexclude: /path/to/file.txt# list of functions to exclude from checking, where each entry is a single function to exclude.# see https://github.com/kisielk/errcheck#excluding-functions for detailsexclude-functions:- io/ioutil.ReadFile- io.Copy(*bytes.Buffer)- io.Copy(os.Stdout)errorlint:# Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveatserrorf: true# Check for plain type assertions and type switchesasserts: true# Check for plain error comparisonscomparison: trueexhaustive:# check switch statements in generated files alsocheck-generated: false# indicates that switch statements are to be considered exhaustive if a# 'default' case is present, even if all enum members aren't listed in the# switchdefault-signifies-exhaustive: falseexhaustivestruct:# Struct Patterns is list of expressions to match struct packages and names# The struct packages have the form example.com/package.ExampleStruct# The matching patterns can use matching syntax from https://pkg.go.dev/path#Match# If this list is empty, all structs are tested.struct-patterns:- '*.Test'- 'example.com/package.ExampleStruct'forbidigo:# Forbid the following identifiers (identifiers are written using regexp):forbid:- ^print.*$- 'fmt\.Print.*'# Exclude godoc examples from forbidigo checks. Default is true.exclude_godoc_examples: falsefunlen:lines: 60statements: 40gci:# put imports beginning with prefix after 3rd-party packages;# only support one prefix# if not set, use goimports.local-prefixeslocal-prefixes: github.com/org/projectgocognit:# minimal code complexity to report, 30 by default (but we recommend 10-20)min-complexity: 10goconst:# minimal length of string constant, 3 by defaultmin-len: 3# minimum occurrences of constant string count to trigger issue, 3 by defaultmin-occurrences: 3# ignore test files, false by defaultignore-tests: false# look for existing constants matching the values, true by defaultmatch-constant: true# search also for duplicated numbers, false by defaultnumbers: false# minimum value, only works with goconst.numbers, 3 by defaultmin: 3# maximum value, only works with goconst.numbers, 3 by defaultmax: 3# ignore when constant is not used as function argument, true by defaultignore-calls: truegocritic:# Which checks should be enabled; can't be combined with 'disabled-checks';# See https://go-critic.github.io/overview#checks-overview# To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`# By default list of stable checks is used.enabled-checks:- rangeValCopy# Which checks should be disabled; can't be combined with 'enabled-checks'; default is emptydisabled-checks:- regexpMust# Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.# Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".enabled-tags:- performancedisabled-tags:- experimental# Settings passed to gocritic.# The settings key is the name of a supported gocritic checker.# The list of supported checkers can be find in https://go-critic.github.io/overview.settings:captLocal: # must be valid enabled check name# whether to restrict checker to params only (default true)paramsOnly: trueelseif:# whether to skip balanced if-else pairs (default true)skipBalanced: truehugeParam:# size in bytes that makes the warning trigger (default 80)sizeThreshold: 80nestingReduce:# min number of statements inside a branch to trigger a warning (default 5)bodyWidth: 5rangeExprCopy:# size in bytes that makes the warning trigger (default 512)sizeThreshold: 512# whether to check test functions (default true)skipTestFuncs: truerangeValCopy:# size in bytes that makes the warning trigger (default 128)sizeThreshold: 32# whether to check test functions (default true)skipTestFuncs: trueruleguard:# path to a gorules file for the ruleguard checkerrules: ''truncateCmp:# whether to skip int/uint/uintptr types (default true)skipArchDependent: trueunderef:# whether to skip (*x).method() calls where x is a pointer receiver (default true)skipRecvDeref: trueunnamedResult:# whether to check exported functionscheckExported: truegocyclo:# minimal code complexity to report, 30 by default (but we recommend 10-20)min-complexity: 10godot:# comments to be checked: `declarations`, `toplevel`, or `all`scope: declarations# list of regexps for excluding particular comment lines from checkexclude:# example: exclude comments which contain numbers# - '[0-9]+'# check that each sentence starts with a capital lettercapital: falsegodox:# report any comments starting with keywords, this is useful for TODO or FIXME comments that# might be left in the code accidentally and should be resolved before mergingkeywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting- NOTE- OPTIMIZE # marks code that should be optimized before merging- HACK # marks hack-arounds that should be removed before merginggofmt:# simplify code: gofmt with `-s` option, true by defaultsimplify: truegofumpt:# Select the Go version to target. The default is `1.15`.lang-version: "1.15"# Choose whether or not to use the extra rules that are disabled# by defaultextra-rules: falsegoheader:values:const:# define here const type values in format k:v, for example:# COMPANY: MY COMPANYregexp:# define here regexp type values, for example# AUTHOR: .*@mycompany\.comtemplate: # |-# put here copyright header template for source code files, for example:# Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time.## {{ AUTHOR }} {{ COMPANY }} {{ YEAR }}# SPDX-License-Identifier: Apache-2.0# 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.template-path:# also as alternative of directive 'template' you may put the path to file with the template sourcegoimports:# put imports beginning with prefix after 3rd-party packages;# it's a comma-separated list of prefixeslocal-prefixes: github.com/org/projectgolint:# minimal confidence for issues, default is 0.8min-confidence: 0.8gomnd:settings:mnd:# the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.checks: argument,case,condition,operation,return,assign# ignored-numbers: 1000# ignored-files: magic_.*.go# ignored-functions: math.*gomoddirectives:# Allow local `replace` directives. Default is false.replace-local: false# List of allowed `replace` directives. Default is empty.replace-allow-list:- launchpad.net/gocheck# Allow to not explain why the version has been retracted in the `retract` directives. Default is false.retract-allow-no-explanation: false# Forbid the use of the `exclude` directives. Default is false.exclude-forbidden: falsegomodguard:allowed:modules: # List of allowed modules# - gopkg.in/yaml.v2domains: # List of allowed module domains# - golang.orgblocked:modules: # List of blocked modules# - github.com/uudashr/go-module: # Blocked module# recommendations: # Recommended modules that should be used instead (Optional)# - golang.org/x/mod# reason: "`mod` is the official go.mod parser library." # Reason why the recommended module should be used (Optional)versions: # List of blocked module version constraints# - github.com/mitchellh/go-homedir: # Blocked module with version constraint# version: "< 1.1.0" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons# reason: "testing if blocked version constraint works." # Reason why the version constraint exists. (Optional)local_replace_directives: false # Set to true to raise lint issues for packages that are loaded from a local path via replace directivegosec:# To select a subset of rules to run.# Available rules: https://github.com/securego/gosec#available-rulesincludes:- G401- G306- G101# To specify a set of rules to explicitly exclude.# Available rules: https://github.com/securego/gosec#available-rulesexcludes:- G204# Exclude generated filesexclude-generated: true# To specify the configuration of rules.# The configuration of rules is not fully documented by gosec:# https://github.com/securego/gosec#configuration# https://github.com/securego/gosec/blob/569328eade2ccbad4ce2d0f21ee158ab5356a5cf/rules/rulelist.go#L60-L102config:G306: "0600"G101:pattern: "(?i)example"ignore_entropy: falseentropy_threshold: "80.0"per_char_threshold: "3.0"truncate: "32"gosimple:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all" ]govet:# report about shadowed variablescheck-shadowing: true# settings per analyzersettings:printf: # analyzer name, run `go tool vet help` to see all analyzersfuncs: # run `go tool vet help printf` to see available settings for `printf` analyzer- (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof- (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf- (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf- (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf# enable or disable analyzers by name# run `go tool vet help` to see all analyzersenable:- atomicalignenable-all: falsedisable:- shadowdisable-all: falsedepguard:list-type: blacklistinclude-go-root: falsepackages:- github.com/sirupsen/logruspackages-with-error-message:# specify an error message to output when a blacklisted package is used- github.com/sirupsen/logrus: "logging is allowed only by logutils.Log"ifshort:# Maximum length of variable declaration measured in number of lines, after which linter won't suggest using short syntax.# Has higher priority than max-decl-chars.max-decl-lines: 1# Maximum length of variable declaration measured in number of characters, after which linter won't suggest using short syntax.max-decl-chars: 30importas:# if set to `true`, force to use alias.no-unaliased: true# List of aliasesalias:# using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package- pkg: knative.dev/serving/pkg/apis/serving/v1alias: servingv1# using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1alias: autoscalingv1alpha1# You can specify the package path by regular expression,# and alias by regular expression expansion syntax like below.# see https://github.com/julz/importas#use-regular-expression for details- pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+)alias: $1$2ireturn:# ireturn allows using `allow` and `reject` settings at the same time.# Both settings are lists of the keywords and regular expressions matched to interface or package names.# keywords:# - `empty` for `interface{}`# - `error` for errors# - `stdlib` for standard library# - `anon` for anonymous interfaces# By default, it allows using errors, empty interfaces, anonymous interfaces,# and interfaces provided by the standard library.allow:- anon- error- empty- stdlib# You can specify idiomatic endings for interface- (or|er)$# Reject patternsreject:- github.com\/user\/package\/v4\.Typelll:# max line length, lines longer will be reported. Default is 120.# '\t' is counted as 1 character by default, and can be changed with the tab-width optionline-length: 120# tab width in spaces. Default to 1.tab-width: 1makezero:# Allow only slices initialized with a length of zero. Default is false.always: falsemaligned:# print struct with more effective memory layout or not, false by defaultsuggest-new: truemisspell:# Correct spellings using locale preferences for US or UK.# Default is to use a neutral variety of English.# Setting locale to US will correct the British spelling of 'colour' to 'color'.locale: USignore-words:- somewordnakedret:# make an issue if func has more lines of code than this setting and it has naked returns; default is 30max-func-lines: 30nestif:# minimal complexity of if statements to report, 5 by defaultmin-complexity: 4nilnil:# By default, nilnil checks all returned types below.checked-types:- ptr- func- iface- map- channlreturn:# size of the block (including return statement that is still "OK")# so no return split required.block-size: 1nolintlint:# Enable to ensure that nolint directives are all used. Default is true.allow-unused: false# Disable to ensure that nolint directives don't have a leading space. Default is true.allow-leading-space: true# Exclude following linters from requiring an explanation. Default is [].allow-no-explanation: [ ]# Enable to require an explanation of nonzero length after each nolint directive. Default is false.require-explanation: true# Enable to require nolint directives to mention the specific linter being suppressed. Default is false.require-specific: trueprealloc:# XXX: we don't recommend using this linter before doing performance profiling.# For most programs usage of prealloc will be a premature optimization.# Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.# True by default.simple: truerange-loops: true # Report preallocation suggestions on range loops, true by defaultfor-loops: false # Report preallocation suggestions on for loops, false by defaultpromlinter:# Promlinter cannot infer all metrics name in static analysis.# Enable strict mode will also include the errors caused by failing to parse the args.strict: false# Please refer to https://github.com/yeya24/promlinter#usage for detailed usage.disabled-linters:# - "Help"# - "MetricUnits"# - "Counter"# - "HistogramSummaryReserved"# - "MetricTypeInName"# - "ReservedChars"# - "CamelCase"# - "lintUnitAbbreviations"predeclared:# comma-separated list of predeclared identifiers to not report onignore: ""# include method names and field names (i.e., qualified names) in checksq: falserowserrcheck:packages:- github.com/jmoiron/sqlxrevive:# see https://github.com/mgechev/revive#available-rules for details.ignore-generated-header: trueseverity: warningrules:- name: indent-error-flowseverity: warning- name: add-constantseverity: warningarguments:- maxLitCount: "3"allowStrs: '""'allowInts: "0,1,2"allowFloats: "0.0,0.,1.0,1.,2.0,2."staticcheck:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all" ]stylecheck:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ]# https://staticcheck.io/docs/options#dot_import_whitelistdot-import-whitelist:- fmt# https://staticcheck.io/docs/options#initialismsinitialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS" ]# https://staticcheck.io/docs/options#http_status_code_whitelisthttp-status-code-whitelist: [ "200", "400", "404", "500" ]tagliatelle:# check the struck tag name casecase:# use the struct field name to check the name of the struct taguse-field-name: truerules:# any struct tag type can be used.# support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`json: camelyaml: camelxml: camelbson: camelavro: snakemapstructure: kebabtestpackage:# regexp pattern to skip filesskip-regexp: (export|internal)_test\.gothelper:# The following configurations enable all checks. It can be omitted because all checks are enabled by default.# You can enable only required checks deleting unnecessary checks.test:first: truename: truebegin: truebenchmark:first: truename: truebegin: truetb:first: truename: truebegin: truetenv:# The option `all` will run against whole test files (`_test.go`) regardless of method/function signatures.# By default, only methods that take `*testing.T`, `*testing.B`, and `testing.TB` as arguments are checked.all: falseunparam:# Inspect exported functions, default is false. Set to true if no external program/library imports your code.# XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:# if it's called for subdir of a project it can't find external interfaces. All text editor integrations# with golangci-lint call it on a directory with the changed file.check-exported: falseunused:# Select the Go version to target. The default is '1.13'.go: "1.15"whitespace:multi-if: false # Enforces newlines (or comments) after every multi-line if statementmulti-func: false # Enforces newlines (or comments) after every multi-line function signaturewrapcheck:# An array of strings that specify substrings of signatures to ignore.# If this set, it will override the default set of ignored signatures.# See https://github.com/tomarrell/wrapcheck#configuration for more information.ignoreSigs:- .Errorf(- errors.New(- errors.Unwrap(- .Wrap(- .Wrapf(- .WithMessage(- .WithMessagef(- .WithStack(ignorePackageGlobs:- encoding/*- github.com/pkg/*wsl:# See https://github.com/bombsimon/wsl/blob/master/doc/configuration.md for# documentation of available settings. These are the defaults for# `golangci-lint`.allow-assign-and-anything: falseallow-assign-and-call: trueallow-cuddle-declarations: falseallow-multiline-assign: trueallow-separated-leading-comment: falseallow-trailing-comment: falseforce-case-trailing-whitespace: 0force-err-cuddling: falseforce-short-decl-cuddling: falsestrict-append: true# The custom section can be used to define linter plugins to be loaded at runtime.# See README doc for more info.custom:# Each custom linter should have a unique name.example:# The path to the plugin *.so. Can be absolute or local. Required for each custom linterpath: /path/to/example.so# The description of the linter. Optional, just for documentation purposes.description: This is an example usage of a plugin linter.# Intended to point to the repo location of the linter. Optional, just for documentation purposes.original-url: github.com/golangci/example-linterlinters:disable-all: trueenable:- megacheck- govetenable-all: truedisable:- maligned- preallocpresets:- bugs- unusedfast: falseissues:# List of regexps of issue texts to exclude, empty list by default.# But independently from this option we use default exclude patterns,# it can be disabled by `exclude-use-default: false`. To list all# excluded by default patterns execute `golangci-lint run --help`exclude:- abcdef# Excluding configuration per-path, per-linter, per-text and per-sourceexclude-rules:# Exclude some linters from running on tests files.- path: _test\.golinters:- gocyclo- errcheck- dupl- gosec# Exclude known linters from partially hard-vendored code,# which is impossible to exclude via "nolint" comments.- path: internal/hmac/text: "weak cryptographic primitive"linters:- gosec# Exclude some staticcheck messages- linters:- staticchecktext: "SA9003:"# Exclude lll issues for long lines with go:generate- linters:- lllsource: "^//go:generate "# Independently from option `exclude` we use default exclude patterns,# it can be disabled by this option. To list all# excluded by default patterns execute `golangci-lint run --help`.# Default value for this option is true.exclude-use-default: false# The default value is false. If set to true exclude and exclude-rules# regular expressions become case sensitive.exclude-case-sensitive: false# The list of ids of default excludes to include or disable. By default it's empty.include:- EXC0002 # disable excluding of issues about comments from golint# Maximum issues count per one linter. Set to 0 to disable. Default is 50.max-issues-per-linter: 0# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.max-same-issues: 0# Show only new issues: if there are unstaged changes or untracked files,# only those changes are analyzed, else only changes in HEAD~ are analyzed.# It's a super-useful option for integration of golangci-lint into existing# large codebase. It's not practical to fix all existing issues at the moment# of integration: much better don't allow issues in new code.# Default is false.new: false# Show only new issues created after git revision `REV`new-from-rev: REV# Show only new issues created in git patch with set file path.new-from-patch: path/to/patch/file# Fix found issues (if it's supported by the linter)fix: trueseverity:# Default value is empty string.# Set the default severity for issues. If severity rules are defined and the issues# do not match or no severity is provided to the rule this will be the default# severity applied. Severities should match the supported severity names of the# selected out format.# - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity# - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity# - Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-messagedefault-severity: error# The default value is false.# If set to true severity-rules regular expressions become case sensitive.case-sensitive: false# Default value is empty list.# When a list of severity rules are provided, severity information will be added to lint# issues. Severity rules have the same filtering capability as exclude rules except you# are allowed to specify one matcher per severity rule.# Only affects out formats that support setting severity information.rules:- linters:- duplseverity: info