# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json # This file contains all available configuration options # with their default values (in comments). # # This file is not a configuration example, # it contains the exhaustive configuration with explanations of the options. # Defines the configuration version. # The only possible value is "2". version: "2" linters: # Default set of linters. # The value can be: `standard`, `all`, `none`, or `fast`. # Default: standard default: all # Disable specific linter. # https://golangci-lint.run/usage/linters/#disabled-by-default disable: - cyclop # Done by revive - decorder # too restrictive - depguard # gomodguard is better - exhaustruct # Too noisy - funlen # Done by revive - gocognit # Done by revive - goconst # Done by revive - gocyclo # Done by revive - goheader - grouper # not that useful - lll # Done by revive with better messages - mnd # Done by revive - tagalign # too noisy and useless # All available settings of specific linters. settings: asasalint: # To specify a set of function names to exclude. # The values are merged with the builtin exclusions. # The builtin exclusions can be disabled by setting `use-builtin-exclusions` to `false`. # Default: ["^(fmt|log|logger|t|)\.(Print|Fprint|Sprint|Fatal|Panic|Error|Warn|Warning|Info|Debug|Log)(|f|ln)$"] exclude: [] # To enable/disable the asasalint builtin exclusions of function names. # See the default value of `exclude` to get the builtin exclusions. # Default: true use-builtin-exclusions: true bidichk: # The following configurations check for all mentioned invisible Unicode runes. # All runes are enabled by default. left-to-right-embedding: true right-to-left-embedding: true pop-directional-formatting: true left-to-right-override: true right-to-left-override: true left-to-right-isolate: true right-to-left-isolate: true first-strong-isolate: true pop-directional-isolate: true copyloopvar: # Check all assigning the loop variable to another variable. # Default: false check-alias: true dogsled: # Checks assignments with too many blank identifiers. # Default: 2 max-blank-identifiers: 2 dupl: # Tokens count to trigger issue. # Default: 150 threshold: 100 dupword: # Keywords for detecting duplicate words. # If this list is not empty, only the words defined in this list will be detected. # Default: [] keywords: [] # Keywords used to ignore detection. # Default: [] ignore: [] errcheck: # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. # Such cases aren't reported by default. # Default: false check-type-assertions: true # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. # Such cases aren't reported by default. # Default: false check-blank: true # To disable the errcheck built-in exclude list. # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details. # Default: false disable-default-exclusions: false # 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 details. exclude-functions: - io.Copy(*bytes.Buffer) - io.Copy(os.Stdout) - encoding/json.Marshal - encoding/json.MarshalIndent errchkjson: # With check-error-free-encoding set to true, errchkjson does warn about errors # from json encoding functions that are safe to be ignored, # because they are not possible to happen. # # if check-error-free-encoding is set to true and errcheck linter is enabled, # it is recommended to add the following exceptions to prevent from false positives: # # linters: # settings: # errcheck: # exclude-functions: # - encoding/json.Marshal # - encoding/json.MarshalIndent # # Default: false check-error-free-encoding: true # Issue on struct encoding that doesn't have exported fields. # Default: false report-no-exported: true errorlint: # Check whether fmt.Errorf uses the %w verb for formatting errors. # See the https://github.com/polyfloyd/go-errorlint for caveats. # Default: true errorf: true # Permit more than 1 %w verb, valid per Go 1.20 (Requires errorf:true) # Default: true errorf-multi: true # Check for plain type assertions and type switches. # Default: true asserts: true # Check for plain error comparisons. # Default: true comparison: true # Allowed errors. # Default: [] allowed-errors: [] # - err: "io.EOF" # fun: "example.com/pkg.Read" # Allowed error "wildcards". # Default: [] allowed-errors-wildcard: [] # - err: "example.com/pkg.ErrMagic" # fun: "example.com/pkg.Magic" exhaustive: # Program elements to check for exhaustiveness. # Default: [ switch ] check: - switch - map # Presence of "default" case in switch statements satisfies exhaustiveness, # even if all enum members are not listed. # Default: false default-signifies-exhaustive: true # Enum members matching the supplied regex do not have to be listed in # switch statements to satisfy exhaustiveness. # Default: "" #ignore-enum-members: "Example.+" # Enum types matching the supplied regex do not have to be listed in # switch statements to satisfy exhaustiveness. # Default: "" #ignore-enum-types: "Example.+" # Consider enums only in package scopes, not in inner scopes. # Default: false package-scope-only: false # Only run exhaustive check on switches with "//exhaustive:enforce" comment. # Default: false explicit-exhaustive-switch: false # Only run exhaustive check on map literals with "//exhaustive:enforce" comment. # Default: false explicit-exhaustive-map: false # Switch statement requires default case even if exhaustive. # Default: false default-case-required: true exhaustruct: # List of regular expressions to match struct packages and their names. # Regular expressions must match complete canonical struct package/name/structname. # If this list is empty, all structs are tested. # Default: [] include: [] # List of regular expressions to exclude struct packages and their names from checks. # Regular expressions must match complete canonical struct package/name/structname. # Default: [] exclude: [] fatcontext: # Check for potential fat contexts in struct pointers. # May generate false positives. # Default: false check-struct-pointers: true forbidigo: # Forbid the following identifiers (list of regexp). # Default: ["^(fmt\\.Print(|f|ln)|print|println)$"] forbid: - pattern: ^(fmt\\.Print(|f|ln)|print|println)$ msg: Do not commit print statements. # Exclude godoc examples from forbidigo checks. # Default: true exclude-godoc-examples: true # Instead of matching the literal source code, # use type information to replace expressions with strings that contain the package name # and (for methods and fields) the type name. # This makes it possible to handle import renaming and forbid struct fields and methods. # Default: false analyze-types: true funcorder: # Checks that constructors are placed after the structure declaration. # Default: true constructor: true # Checks if the exported methods of a structure are placed before the non-exported ones. # Default: true struct-method: true gochecksumtype: # Presence of `default` case in switch statements satisfies exhaustiveness, if all members are not listed. # Default: true default-signifies-exhaustive: true # Include shared interfaces in the exhaustiveness check. # Default: false include-shared-interfaces: true gocritic: # Enable all checks. # Default: false enable-all: true # Which checks should be disabled; can't be combined with 'enabled-checks'. # Default: [] disabled-checks: [] # Settings passed to gocritic. # The settings key is the name of a supported gocritic checker. # The list of supported checkers can be found at https://go-critic.com/overview. settings: # Must be valid enabled check name. captLocal: # Whether to restrict checker to params only. # Default: true paramsOnly: false commentedOutCode: # Min length of the comment that triggers a warning. # Default: 15 minLength: 10 elseif: # Whether to skip balanced if-else pairs. # Default: true skipBalanced: true hugeParam: # Size in bytes that makes the warning trigger. # Default: 80 sizeThreshold: 70 ifElseChain: # Min number of if-else blocks that makes the warning trigger. # Default: 2 minThreshold: 2 nestingReduce: # Min number of statements inside a branch to trigger a warning. # Default: 5 bodyWidth: 5 rangeExprCopy: # Size in bytes that makes the warning trigger. # Default: 512 sizeThreshold: 512 # Whether to check test functions # Default: true skipTestFuncs: true rangeValCopy: # Size in bytes that makes the warning trigger. # Default: 128 sizeThreshold: 128 # Whether to check test functions. # Default: true skipTestFuncs: true ruleguard: # Enable debug to identify which 'Where' condition was rejected. # The value of the parameter is the name of a function in a ruleguard file. # # When a rule is evaluated: # If: # The Match() clause is accepted; and # One of the conditions in the Where() clause is rejected, # Then: # ruleguard prints the specific Where() condition that was rejected. # # The option is passed to the ruleguard 'debug-group' argument. # Default: "" debug: '' # Determines the behavior when an error occurs while parsing ruleguard files. # If flag is not set, log error and skip rule files that contain an error. # If flag is set, the value must be a comma-separated list of error conditions. # - 'all': fail on all errors. # - 'import': ruleguard rule imports a package that cannot be found. # - 'dsl': gorule file does not comply with the ruleguard DSL. # Default: "" failOn: "" # Comma-separated list of file paths containing ruleguard rules. # By default, if a path is relative, it is relative to the directory where the golangci-lint command is executed. # The placeholder '${base-path}' is substituted with a path relative to the mode defined with `run.relative-path-mode`. # The placeholder '${config-path}' is substituted with a path relative to the configuration file. # Glob patterns such as 'rules-*.go' may be specified. # Default: "" rules: '' # Comma-separated list of enabled groups or skip empty to enable everything. # Tags can be defined with # character prefix. # Default: "" enable: "" # Comma-separated list of disabled groups or skip empty to enable everything. # Tags can be defined with # character prefix. # Default: "" disable: "" tooManyResultsChecker: # Maximum number of results. # Default: 5 maxResults: 2 truncateCmp: # Whether to skip int/uint/uintptr types. # Default: true skipArchDependent: false underef: # Whether to skip (*x).method() calls where x is a pointer receiver. # Default: true skipRecvDeref: true unnamedResult: # Whether to check exported functions. # Default: false checkExported: true godot: # Comments to be checked: `declarations`, `toplevel`, or `all`. # Default: declarations scope: declarations # List of regexps for excluding particular comment lines from check. # Default: [] exclude: # Exclude todo and fixme comments. - "^fixme:|^FIXME:" - "^todo:|^TODO:" # Check that each sentence ends with a period. # Default: true period: true # Check that each sentence starts with a capital letter. # Default: false capital: true godox: # 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 merging. # Default: ["TODO", "BUG", "FIXME"] keywords: - BUG - FIXME - TODO - NOTE - OPTIMIZE # marks code that should be optimized before merging - HACK # marks hack-around that should be removed before merging goheader: # Supports two types 'const` and `regexp`. # Values can be used recursively. # Default: {} values: const: # Define here const type values in format k:v. # For example: AUTHOR: Bruno Carlin regexp: {} # Define here regexp type values. # for example: # The template used for checking. # Put here copyright header template for source code files. # Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. # Default: "" template: |- SPDX-FileCopyrightText: {{ YEAR }} {{ AUTHOR }} SPDX-License-Identifier: MIT # As alternative of directive 'template', you may put the path to file with the template source. # Useful if you need to load the template from a specific file. # By default, if a path is relative, it is relative to the directory where the golangci-lint command is executed. # The placeholder '${base-path}' is substituted with a path relative to the mode defined with `run.relative-path-mode`. # The placeholder '${config-path}' is substituted with a path relative to the configuration file. # Default: "" #template-path: /path/to/my/template.tmpl gomoddirectives: # Allow local `replace` directives. # Default: false replace-local: false # List of allowed `replace` directives. # Default: [] #replace-allow-list: # - launchpad.net/gocheck # Allow to not explain why the version has been retracted in the `retract` directives. # Default: false #retract-allow-no-explanation: false # Forbid the use of the `exclude` directives. # Default: false #exclude-forbidden: false # Forbid the use of the `toolchain` directive. # Default: false toolchain-forbidden: false # Defines a pattern to validate `toolchain` directive. # Default: '' (no match) #toolchain-pattern: 'go1\.23\.\d+$' # Forbid the use of the `tool` directives. # Default: false #tool-forbidden: true # Forbid the use of the `godebug` directive. # Default: false #go-debug-forbidden: true # Defines a pattern to validate `go` minimum version directive. # Default: '' (no match) #go-version-pattern: '\d\.\d+(\.0)?' gomodguard: allowed: # List of allowed modules. # Default: [] modules: - github.com/alexedwards/argon2id - github.com/google/uuid - github.com/hack-pad/hackpadfs - github.com/jessevdk/go-flags - github.com/pressly/goose/v3 - github.com/PuerkitoBio/goquery - github.com/stretchr/testify - gopkg.in/yaml.v3 - modernc.org/sqlite # List of allowed module domains. # Default: [] domains: - golang.org - code.bcarlin.xyz - code.bcarlin.net - code.waarp.fr blocked: {} # List of blocked modules. # Default: [] #modules: # Blocked module. # - github.com/uudashr/go-module: # # Recommended modules that should be used instead. (Optional) # recommendations: # - golang.org/x/mod # # Reason why the recommended module should be used. (Optional) # reason: "`mod` is the official go.mod parser library." # List of blocked module version constraints. # Default: [] #versions: # # Blocked module with version constraint. # - github.com/mitchellh/go-homedir: # # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons. # version: "< 1.1.0" # # Reason why the version constraint exists. (Optional) # reason: "testing if blocked version constraint works." # Set to true to raise lint issues for packages that are loaded from a local path via replace directive. # Default: false #local_replace_directives: false gosec: # To select a subset of rules to run. # Available rules: https://github.com/securego/gosec#available-rules # Default: [] - means include all rules includes: [] # To specify a set of rules to explicitly exclude. # Available rules: https://github.com/securego/gosec#available-rules excludes: [] # Filter out the issues with a lower severity than the given value. # Valid options are: low, medium, high. # Default: low severity: low # Filter out the issues with a lower confidence than the given value. # Valid options are: low, medium, high. # Default: low confidence: low # Concurrency value. # Default: the number of logical CPUs usable by the current process. #concurrency: 12 # To specify the configuration of rules. config: # Globals are applicable to all rules. global: # If true, ignore #nosec in comments (and an alternative as well). # Default: false nosec: false # Add an alternative comment prefix to #nosec (both will work at the same time). # Default: "" #"#nosec": "#my-custom-nosec" # Define whether nosec issues are counted as finding or not. # Default: false show-ignored: false # Audit mode enables addition checks that for normal code analysis might be too nosy. # Default: false audit: true G101: # Regexp pattern for variables and constants to find. # Default: "(?i)passwd|pass|password|pwd|secret|token|pw|apiKey|bearer|cred" #pattern: "(?i)passwd|pass|password|pwd|secret|token|pw|apiKey|bearer|cred" # If true, complain about all cases (even with low entropy). # Default: false ignore_entropy: true # Maximum allowed entropy of the string. # Default: "80.0" entropy_threshold: "80.0" # Maximum allowed value of entropy/string length. # Is taken into account if entropy >= entropy_threshold/2. # Default: "3.0" per_char_threshold: "3.0" # Calculate entropy for first N chars of the string. # Default: "16" truncate: "32" # Additional functions to ignore while checking unhandled errors. # Following functions always ignored: # bytes.Buffer: # - Write # - WriteByte # - WriteRune # - WriteString # fmt: # - Print # - Printf # - Println # - Fprint # - Fprintf # - Fprintln # strings.Builder: # - Write # - WriteByte # - WriteRune # - WriteString # io.PipeWriter: # - CloseWithError # hash.Hash: # - Write # os: # - Unsetenv # Default: {} G104: json: - Marshal - MarshalIndent G111: # Regexp pattern to find potential directory traversal. # Default: "http\\.Dir\\(\"\\/\"\\)|http\\.Dir\\('\\/'\\)" #pattern: "custom\\.Dir\\(\\)" # Maximum allowed permissions mode for os.Mkdir and os.MkdirAll # Default: "0750" G301: "0750" # Maximum allowed permissions mode for os.OpenFile and os.Chmod # Default: "0600" G302: "0600" # Maximum allowed permissions mode for os.WriteFile and ioutil.WriteFile # Default: "0600" G306: "0600" gosmopolitan: # Allow and ignore `time.Local` usages. # # Default: false allow-time-local: false # List of fully qualified names in the `full/pkg/path.name` form, to act as "i18n escape hatches". # String literals inside call-like expressions to, or struct literals of those names, # are exempt from the writing system check. # # Default: [] escape-hatches: [] # List of Unicode scripts to watch for any usage in string literals. # https://pkg.go.dev/unicode#pkg-variables # # Default: ["Han"] #watch-for-scripts: # - Devanagari # - Han # - Hangul # - Hiragana # - Katakana govet: # Disable all analyzers. # Default: false disable-all: false # Enable analyzers by name. # (In addition to default: # appends, asmdecl, assign, atomic, bools, buildtag, cgocall, composites, copylocks, defers, directive, errorsas, # framepointer, httpresponse, ifaceassert, loopclosure, lostcancel, nilfunc, printf, shift, sigchanyzer, slog, # stdmethods, stringintconv, structtag, testinggoroutine, tests, timeformat, unmarshal, unreachable, unsafeptr, # unusedresult # ). # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. # Default: [] enable: [] # Enable all analyzers. # Default: false enable-all: true # Disable analyzers by name. # (In addition to default # atomicalign, deepequalerrors, fieldalignment, findcall, nilness, reflectvaluecompare, shadow, sortslice, # timeformat, unusedwrite # ). # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. # Default: [] disable: - fieldalignment # Settings per analyzer. settings: # Analyzer name, run `go tool vet help` to see all analyzers. printf: {} # Comma-separated list of print function names to check (in addition to default, see `go tool vet help printf`). # Default: [] #funcs: # - (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 shadow: # Whether to be strict about shadowing; can be noisy. # Default: false strict: true unusedresult: # Comma-separated list of functions whose results must be used. # (In addition to default: # context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue, errors.New, fmt.Errorf, # fmt.Sprint, fmt.Sprintf, sort.Reverse # ). # Default: [] funcs: [] # - pkg.MyFunc # Comma-separated list of names of methods of type func() string whose results must be used # (in addition to default Error,String) # Default: [] #stringmethods: # - MyMethod iface: # List of analyzers. # Default: ["identical"] enable: - identical # Identifies interfaces in the same package that have identical method sets. - unused # Identifies interfaces that are not used anywhere in the same package where the interface is defined. - opaque # Identifies functions that return interfaces, but the actual returned value is always a single concrete implementation. settings: unused: # List of packages path to exclude from the check. # Default: [] exclude: - github.com/example/log importas: # Do not allow unaliased imports of aliased packages. # Default: false #no-unaliased: true # Do not allow non-required aliases. # Default: false no-extra-aliases: true # List of aliases # Default: [] alias: # Using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package. #- pkg: knative.dev/serving/pkg/apis/serving/v1 # alias: servingv1 # Using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package. #- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1 # alias: 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$2 inamedparam: # Skips check for interface methods with only a single parameter. # Default: false skip-single-param: false interfacebloat: # The maximum number of methods allowed for an interface. # Default: 10 max: 5 ireturn: # List of interfaces to allow. # Lists of the keywords and regular expressions matched to interface or package names can be used. # `allow` and `reject` settings cannot be used at the same time. # # Keywords: # - `empty` for `interface{}` # - `error` for errors # - `stdlib` for standard library # - `anon` for anonymous interfaces # - `generic` for generic interfaces added in go 1.18 # # Default: [anon, error, empty, stdlib] allow: - anon - error - empty - stdlib - generic # You can specify idiomatic endings for interface #- (or|er)$ # List of interfaces to reject. # Lists of the keywords and regular expressions matched to interface or package names can be used. # `allow` and `reject` settings cannot be used at the same time. # # Keywords: # - `empty` for `interface{}` # - `error` for errors # - `stdlib` for standard library # - `anon` for anonymous interfaces # - `generic` for generic interfaces added in go 1.18 # # Default: [] #reject: # - github.com\/user\/package\/v4\.Type loggercheck: # Allow check for the github.com/go-kit/log library. # Default: true kitlog: false # Allow check for the k8s.io/klog/v2 library. # Default: true klog: false # Allow check for the github.com/go-logr/logr library. # Default: true logr: false # Allow check for the log/slog library. # Default: true slog: true # Allow check for the "sugar logger" from go.uber.org/zap library. # Default: true zap: false # Require all logging keys to be inlined constant strings. # Default: false require-string-key: true # Require printf-like format specifier (%s, %d for example) not present. # Default: false #no-printf-like: true # List of custom rules to check against, where each rule is a single logger pattern, useful for wrapped loggers. # For example: https://github.com/timonwong/loggercheck/blob/7395ab86595781e33f7afba27ad7b55e6956ebcd/testdata/custom-rules.txt # Default: empty #rules: # - k8s.io/klog/v2.InfoS # package level exported functions # - (github.com/go-logr/logr.Logger).Error # "Methods" # - (*go.uber.org/zap.SugaredLogger).With # Also "Methods", but with a pointer receiver maintidx: # Show functions with maintainability index lower than N. # A high index indicates better maintainability (it's kind of the opposite of complexity). # Default: 20 under: 20 makezero: # Allow only slices initialized with a length of zero. # Default: false always: false misspell: # Correct spellings using locale preferences for US or UK. # Setting locale to US will correct the British spelling of 'colour' to 'color'. # Default is to use a neutral variety of English. locale: US # Typos to ignore. # Should be in lower case. # Default: [] ignore-rules: [] #- someword # Extra word corrections. # `typo` and `correction` should only contain letters. # The words are case-insensitive. # Default: [] extra-words: - typo: "iff" correction: "if" - typo: "cancelation" correction: "cancellation" # Mode of the analysis: # - default: checks all the file content. # - restricted: checks only comments. # Default: "" mode: restricted musttag: # A set of custom functions to check in addition to the builtin ones. # Default: json, xml, gopkg.in/yaml.v3, BurntSushi/toml, mitchellh/mapstructure, jmoiron/sqlx functions: [] # The full name of the function, including the package. #- name: github.com/jmoiron/sqlx.Get # # The struct tag whose presence should be ensured. # tag: db # # The position of the argument to check. # arg-pos: 1 nakedret: # Make an issue if func has more lines of code than this setting, and it has naked returns. # Default: 30 max-func-lines: 30 nestif: # Minimal complexity of if statements to report. # Default: 5 min-complexity: 5 nilnil: # To check functions with only two return values (`return nil, nil`). # If disabled then returns like `return nil, nil, ..., nil` are supported. # Default: true only-two: false # In addition, detect opposite situation (simultaneous return of non-nil error and valid value). # E.g, `return clone, fh.indexer.Update(clone)` will be considered as invalid. # Default: false detect-opposite: true # List of return types to check. # Default: ["chan", "func", "iface", "map", "ptr", "uintptr", "unsafeptr"] #checked-types: # - chan # - func # - iface # - map # - ptr # - uintptr # - unsafeptr nlreturn: # Size of the block (including return statement that is still "OK"), # so no return split required. # Default: 1 block-size: 2 nolintlint: # Disable to ensure that all nolint directives actually have an effect. # Default: false allow-unused: false # Exclude following linters from requiring an explanation. # Default: [] allow-no-explanation: [ ] # Enable to require an explanation of nonzero length after each nolint directive. # Default: false require-explanation: true # Enable to require nolint directives to mention the specific linter being suppressed. # Default: false require-specific: true nonamedreturns: # Report named error if it is assigned inside defer. # Default: false report-error-in-defer: true paralleltest: # Ignore missing calls to `t.Parallel()` and only report incorrect uses of it. # Default: false ignore-missing: false # Ignore missing calls to `t.Parallel()` in subtests. Top-level tests are # still required to have `t.Parallel`, but subtests are allowed to skip it. # Default: false ignore-missing-subtests: false perfsprint: # Enable/disable optimization of integer formatting. # Default: true integer-format: true # Optimizes even if it requires an int or uint type cast. # Default: true int-conversion: false # Enable/disable optimization of error formatting. # Default: true error-format: true # Optimizes into `err.Error()` even if it is only equivalent for non-nil errors. # Default: false err-error: true # Optimizes `fmt.Errorf`. # Default: true errorf: false # Enable/disable optimization of string formatting. # Default: true string-format: true # Optimizes `fmt.Sprintf` with only one argument. # Default: true sprintf1: true # Optimizes into strings concatenation. # Default: true strconcat: true # Enable/disable optimization of bool formatting. # Default: true bool-format: true # Enable/disable optimization of hex formatting. # Default: true hex-format: true prealloc: # IMPORTANT: we don't recommend using this linter before doing performance profiling. # For most programs usage of prealloc will be a premature optimization. # Report pre-allocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. # Default: true simple: true # Report pre-allocation suggestions on range loops. # Default: true range-loops: true # Report pre-allocation suggestions on for loops. # Default: false for-loops: true predeclared: # List of predeclared identifiers to not report on. # Default: [] ignore: [] #- new #- int # Include method names and field names in checks. # Default: false qualified-name: true promlinter: # Promlinter cannot infer all metrics name in static analysis. # Enable strict mode will also include the errors caused by failing to parse the args. # Default: false strict: true # Please refer to https://github.com/yeya24/promlinter#usage for detailed usage. # Default: [] disabled-linters: [] # Help detects issues related to the help text for a metric. #- Help # MetricUnits detects issues with metric unit names. #- MetricUnits # Counter detects issues specific to counters, as well as patterns that should only be used with counters. #- Counter # HistogramSummaryReserved detects when other types of metrics use names or labels reserved for use by histograms and/or summaries. #- HistogramSummaryReserved # MetricTypeInName detects when metric types are included in the metric name. #- MetricTypeInName # ReservedChars detects colons in metric names. #- ReservedChars # CamelCase detects metric names and label names written in camelCase. #- CamelCase # UnitAbbreviations detects abbreviated units in the metric name. #- UnitAbbreviations protogetter: # Skip files generated by specified generators from the checking. # Checks only the file's initial comment, which must follow the format: "// Code generated by ". # Files generated by protoc-gen-go, protoc-gen-go-grpc, and protoc-gen-grpc-gateway are always excluded automatically. # Default: [] skip-generated-by: ["protoc-gen-go-my-own-generator"] # Skip files matching the specified glob pattern from the checking. # Default: [] skip-files: - "*.pb.go" - "*/vendor/*" - "/full/path/to/file.go" # Skip any generated files from the checking. # Default: false skip-any-generated: true # Skip first argument of append function. # Default: false replace-first-arg-in-append: true reassign: # Patterns for global variable names that are checked for reassignment. # See https://github.com/curioswitch/go-reassign#usage # Default: ["EOF", "Err.*"] patterns: - ".*" recvcheck: # Disables the built-in method exclusions: # - `MarshalText` # - `MarshalJSON` # - `MarshalYAML` # - `MarshalXML` # - `MarshalBinary` # - `GobEncode` # Default: false disable-builtin: false # User-defined method exclusions. # The format is `struct_name.method_name` (ex: `Foo.MethodName`). # A wildcard `*` can use as a struct name (ex: `*.MethodName`). # Default: [] exclusions: - "*.Value" revive: # Maximum number of open files at the same time. # See https://github.com/mgechev/revive#command-line-flags # Defaults to unlimited. #max-open-files: 2048 # Sets the default severity. # See https://github.com/mgechev/revive#configuration # Default: warning #severity: error # Enable all available rules. # Default: false enable-all-rules: true # Enable validation of comment directives. # See https://github.com/mgechev/revive#comment-directives directives: - name: specify-disable-reason severity: error # Sets the default failure confidence. # This means that linting errors with less than 0.8 confidence will be ignored. # Default: 0.8 #confidence: 0.1 # Run `GL_DEBUG=revive golangci-lint run --enable-only=revive` to see default, all available rules, and enabled rules. rules: # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#add-constant - name: add-constant severity: warning disabled: false exclude: [""] arguments: - max-lit-count: "3" allow-strs: '"","\n"' allow-ints: "0,1,2,0o600,0o700" allow-floats: "0.0,0.,1.0,1.,2.0,2." # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#argument-limit - name: argument-limit severity: warning disabled: false exclude: [""] arguments: [ 4 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#atomic - name: atomic severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#banned-characters - name: banned-characters severity: warning disabled: false exclude: [""] arguments: [ "Ω","Σ","σ", "7" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#bare-return - name: bare-return severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#blank-imports - name: blank-imports severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#bool-literal-in-expr - name: bool-literal-in-expr severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#call-to-gc - name: call-to-gc severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#cognitive-complexity - name: cognitive-complexity severity: warning disabled: false exclude: [""] arguments: [ 7 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#comment-spacings - name: comment-spacings severity: warning disabled: false exclude: [""] arguments: - nolint #- otherpragma # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#comments-density - name: comments-density severity: warning disabled: true exclude: [""] arguments: [ 15 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#confusing-naming - name: confusing-naming severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#confusing-results - name: confusing-results severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#constant-logical-expr - name: constant-logical-expr severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#context-as-argument - name: context-as-argument severity: warning disabled: false exclude: [""] arguments: - allowTypesBefore: "*testing.T" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#context-keys-type - name: context-keys-type severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#cyclomatic - name: cyclomatic severity: warning disabled: false exclude: [""] arguments: [ 15 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#datarace - name: datarace severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#deep-exit - name: deep-exit severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#defer - name: defer severity: error disabled: false exclude: [""] arguments: - - "call-chain" - "loop" - "method-call" - "recover" - "immediate-recover" - "return" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#dot-imports - name: dot-imports severity: warning disabled: false exclude: [""] arguments: [ ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#duplicated-imports - name: duplicated-imports severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#early-return - name: early-return severity: warning disabled: false exclude: [""] arguments: - "preserve-scope" - "allow-jump" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#empty-block - name: empty-block severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#empty-lines - name: empty-lines severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-map-style - name: enforce-map-style severity: warning disabled: false exclude: [""] arguments: - "make" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-repeated-arg-type-style - name: enforce-repeated-arg-type-style severity: warning disabled: false exclude: [""] arguments: - "short" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-slice-style - name: enforce-slice-style severity: warning disabled: false exclude: [""] arguments: - "make" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-naming - name: error-naming severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-return - name: error-return severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-strings - name: error-strings severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#errorf - name: errorf severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#exported - name: exported severity: warning disabled: false exclude: [""] arguments: - "check-private-receivers" #- "disable-stuttering-check" - "say-repetitive-instead-of-stutters" - "check-public-interface" #- "disable-checks-on-constants" #- "disable-checks-on-functions" #- "disable-checks-on-methods" #- "disable-checks-on-types" #- "disable-checks-on-variables" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#file-header - name: file-header severity: warning disabled: true exclude: [""] arguments: - This is the text that must appear at the top of source files. # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#file-length-limit - name: file-length-limit severity: warning disabled: true exclude: [""] arguments: - max: 100 skipComments: true skipBlankLines: true - name: filename-format severity: warning disabled: false exclude: [""] arguments: - "^[_a-z][_a-z0-9]*\\.go$" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#flag-parameter - name: flag-parameter severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#function-length - name: function-length severity: warning disabled: false exclude: [""] arguments: [20, 0] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#function-result-limit - name: function-result-limit severity: warning disabled: false exclude: [""] arguments: [ 2 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#get-return - name: get-return severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#identical-branches - name: identical-branches severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#if-return - name: if-return severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#import-alias-naming - name: import-alias-naming severity: warning disabled: false exclude: [""] arguments: - "^[a-z][a-z0-9]{0,}$" # Or this parameter: #- allow-regex: "^[a-z][a-z0-9]{0,}$" # deny-regex: '^v\d+$' # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#import-shadowing - name: import-shadowing severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#imports-blocklist - name: imports-blocklist severity: warning disabled: false exclude: [""] arguments: - "crypto/md5" - "crypto/sha1" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#increment-decrement - name: increment-decrement severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#indent-error-flow - name: indent-error-flow severity: warning disabled: false exclude: [""] arguments: - "preserve-scope" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#line-length-limit - name: line-length-limit severity: warning disabled: false exclude: [""] arguments: [ 80 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#max-control-nesting - name: max-control-nesting severity: warning disabled: false exclude: [""] arguments: [ 5 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#max-public-structs - name: max-public-structs severity: warning disabled: true exclude: [""] arguments: [ 3 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#modifies-parameter - name: modifies-parameter severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#modifies-value-receiver - name: modifies-value-receiver severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#nested-structs - name: nested-structs severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#optimize-operands-order - name: optimize-operands-order severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#package-comments - name: package-comments severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range - name: range severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range-val-address - name: range-val-address severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range-val-in-closure - name: range-val-in-closure severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#receiver-naming - name: receiver-naming severity: warning disabled: false exclude: [""] arguments: - max-length: 2 # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redefines-builtin-id - name: redefines-builtin-id severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redundant-build-tag - name: redundant-build-tag severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redundant-import-alias - name: redundant-import-alias severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#redundant-test-main-exit - name: redundant-test-main-exit severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#string-format - name: string-format severity: warning disabled: false exclude: [""] arguments: - - 'core.WriteError[1].Message' - '/^([^A-Z]|$)/' - must not start with a capital letter - - 'fmt.Errorf[0]' - '/(^|[^\.!?])$/' - must not end in punctuation - - panic - '/^[^\n]*$/' - must not contain line breaks # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#string-of-int - name: string-of-int severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#struct-tag - name: struct-tag severity: warning disabled: false exclude: [""] arguments: - "json,inline" - "bson,outline,gnu" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#superfluous-else - name: superfluous-else severity: warning disabled: false exclude: [""] arguments: - "preserve-scope" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#time-equal - name: time-equal severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#time-naming - name: time-naming severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unchecked-type-assertion - name: unchecked-type-assertion severity: warning disabled: false exclude: [""] arguments: - accept-ignored-assertion-result: true # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unconditional-recursion - name: unconditional-recursion severity: error disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unexported-naming - name: unexported-naming severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unexported-return - name: unexported-return severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unhandled-error - name: unhandled-error severity: warning disabled: false exclude: [""] arguments: - "fmt.Print(f|ln)" - "myFunction" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unnecessary-stmt - name: unnecessary-stmt severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unreachable-code - name: unreachable-code severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-parameter - name: unused-parameter severity: warning disabled: false exclude: [""] arguments: - allow-regex: "^_" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-receiver - name: unused-receiver severity: warning disabled: false exclude: [""] arguments: - allow-regex: "^_" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#use-any - name: use-any severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#use-errors-new - name: use-errors-new severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#useless-break - name: useless-break severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#var-declaration - name: var-declaration severity: warning disabled: false exclude: [""] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#var-naming - name: var-naming severity: warning disabled: false exclude: [""] arguments: - [ "ID" ] # AllowList - [ "VM" ] # DenyList - - upper-case-const: true # Extra parameter (upper-case-const|skip-package-name-checks) # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#waitgroup-by-value - name: waitgroup-by-value severity: error disabled: false exclude: [""] rowserrcheck: # database/sql is always checked. # Default: [] packages: - github.com/jmoiron/sqlx sloglint: # Enforce not mixing key-value pairs and attributes. # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-mixed-arguments # Default: true no-mixed-args: true # Enforce using key-value pairs only (overrides no-mixed-args, incompatible with attr-only). # https://github.com/go-simpler/sloglint?tab=readme-ov-file#key-value-pairs-only # Default: false kv-only: false # Enforce using attributes only (overrides no-mixed-args, incompatible with kv-only). # https://github.com/go-simpler/sloglint?tab=readme-ov-file#attributes-only # Default: false attr-only: false # Enforce not using global loggers. # Values: # - "": disabled # - "all": report all global loggers # - "default": report only the default slog logger # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-global # Default: "" no-global: "all" # Enforce using methods that accept a context. # Values: # - "": disabled # - "all": report all contextless calls # - "scope": report only if a context exists in the scope of the outermost function # https://github.com/go-simpler/sloglint?tab=readme-ov-file#context-only # Default: "" context: "all" # Enforce using static values for log messages. # https://github.com/go-simpler/sloglint?tab=readme-ov-file#static-messages # Default: false static-msg: true # Enforce message style. # Values: lowercased, capitalized # https://github.com/go-simpler/sloglint?tab=readme-ov-file#message-style # Default: "" msg-style: capitalized # Enforce using constants instead of raw keys. # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-raw-keys # Default: false no-raw-keys: true # Enforce key naming convention. # Values: snake, kebab, camel, pascal # https://github.com/go-simpler/sloglint?tab=readme-ov-file#key-naming-convention # Default: "" key-naming-case: camel # Enforce not using specific keys. # https://github.com/go-simpler/sloglint?tab=readme-ov-file#forbidden-keys # Default: [] forbidden-keys: - time - level - msg - source # Enforce putting arguments on separate lines. # https://github.com/go-simpler/sloglint?tab=readme-ov-file#arguments-on-separate-lines # Default: false args-on-sep-lines: false spancheck: # Checks to enable. # Options include: # - `end`: check that `span.End()` is called # - `record-error`: check that `span.RecordError(err)` is called when an error is returned # - `set-status`: check that `span.SetStatus(codes.Error, msg)` is called when an error is returned # Default: ["end"] checks: - end - record-error - set-status # A list of regexes for function signatures that silence `record-error` and `set-status` reports # if found in the call path to a returned error. # https://github.com/jjti/go-spancheck#ignore-check-signatures # Default: [] ignore-check-signatures: - "telemetry.RecordError" # A list of regexes for additional function signatures that create spans. # This is useful if you have a utility method to create spans. # Each entry should be of the form `:`, where `telemetry-type` can be `opentelemetry` or `opencensus`. # https://github.com/jjti/go-spancheck#extra-start-span-signatures # Default: [] extra-start-span-signatures: - "github.com/user/repo/telemetry/trace.Start:opentelemetry" staticcheck: # https://staticcheck.dev/docs/configuration/options/#dot_import_whitelist # Default: ["github.com/mmcloughlin/avo/build", "github.com/mmcloughlin/avo/operand", "github.com/mmcloughlin/avo/reg"] dot-import-whitelist: - fmt # https://staticcheck.dev/docs/configuration/options/#initialisms # Default: ["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", "SIP", "RTP", "AMQP", "DB", "TS"] initialisms: [ "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", "SIP", "RTP", "AMQP", "DB", "TS" ] # https://staticcheck.dev/docs/configuration/options/#http_status_code_whitelist # Default: ["200", "400", "404", "500"] http-status-code-whitelist: [] # SAxxxx checks in https://staticcheck.dev/docs/configuration/options/#checks # Example (to disable some checks): [ "all", "-SA1000", "-SA1001"] # Default: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"] checks: # Invalid regular expression. # https://staticcheck.dev/docs/checks/#SA1000 - SA1000 # Invalid template. # https://staticcheck.dev/docs/checks/#SA1001 - SA1001 # Invalid format in 'time.Parse'. # https://staticcheck.dev/docs/checks/#SA1002 - SA1002 # Unsupported argument to functions in 'encoding/binary'. # https://staticcheck.dev/docs/checks/#SA1003 - SA1003 # Suspiciously small untyped constant in 'time.Sleep'. # https://staticcheck.dev/docs/checks/#SA1004 - SA1004 # Invalid first argument to 'exec.Command'. # https://staticcheck.dev/docs/checks/#SA1005 - SA1005 # 'Printf' with dynamic first argument and no further arguments. # https://staticcheck.dev/docs/checks/#SA1006 - SA1006 # Invalid URL in 'net/url.Parse'. # https://staticcheck.dev/docs/checks/#SA1007 - SA1007 # Non-canonical key in 'http.Header' map. # https://staticcheck.dev/docs/checks/#SA1008 - SA1008 # '(*regexp.Regexp).FindAll' called with 'n == 0', which will always return zero results. # https://staticcheck.dev/docs/checks/#SA1010 - SA1010 # Various methods in the "strings" package expect valid UTF-8, but invalid input is provided. # https://staticcheck.dev/docs/checks/#SA1011 - SA1011 # A nil 'context.Context' is being passed to a function, consider using 'context.TODO' instead. # https://staticcheck.dev/docs/checks/#SA1012 - SA1012 # 'io.Seeker.Seek' is being called with the whence constant as the first argument, but it should be the second. # https://staticcheck.dev/docs/checks/#SA1013 - SA1013 # Non-pointer value passed to 'Unmarshal' or 'Decode'. # https://staticcheck.dev/docs/checks/#SA1014 - SA1014 # Using 'time.Tick' in a way that will leak. Consider using 'time.NewTicker', and only use 'time.Tick' in tests, commands and endless functions. # https://staticcheck.dev/docs/checks/#SA1015 - SA1015 # Trapping a signal that cannot be trapped. # https://staticcheck.dev/docs/checks/#SA1016 - SA1016 # Channels used with 'os/signal.Notify' should be buffered. # https://staticcheck.dev/docs/checks/#SA1017 - SA1017 # 'strings.Replace' called with 'n == 0', which does nothing. # https://staticcheck.dev/docs/checks/#SA1018 - SA1018 # Using a deprecated function, variable, constant or field. # https://staticcheck.dev/docs/checks/#SA1019 - SA1019 # Using an invalid host:port pair with a 'net.Listen'-related function. # https://staticcheck.dev/docs/checks/#SA1020 - SA1020 # Using 'bytes.Equal' to compare two 'net.IP'. # https://staticcheck.dev/docs/checks/#SA1021 - SA1021 # Modifying the buffer in an 'io.Writer' implementation. # https://staticcheck.dev/docs/checks/#SA1023 - SA1023 # A string cutset contains duplicate characters. # https://staticcheck.dev/docs/checks/#SA1024 - SA1024 # It is not possible to use '(*time.Timer).Reset''s return value correctly. # https://staticcheck.dev/docs/checks/#SA1025 - SA1025 # Cannot marshal channels or functions. # https://staticcheck.dev/docs/checks/#SA1026 - SA1026 # Atomic access to 64-bit variable must be 64-bit aligned. # https://staticcheck.dev/docs/checks/#SA1027 - SA1027 # 'sort.Slice' can only be used on slices. # https://staticcheck.dev/docs/checks/#SA1028 - SA1028 # Inappropriate key in call to 'context.WithValue'. # https://staticcheck.dev/docs/checks/#SA1029 - SA1029 # Invalid argument in call to a 'strconv' function. # https://staticcheck.dev/docs/checks/#SA1030 - SA1030 # Overlapping byte slices passed to an encoder. # https://staticcheck.dev/docs/checks/#SA1031 - SA1031 # Wrong order of arguments to 'errors.Is'. # https://staticcheck.dev/docs/checks/#SA1032 - SA1032 # 'sync.WaitGroup.Add' called inside the goroutine, leading to a race condition. # https://staticcheck.dev/docs/checks/#SA2000 - SA2000 # Empty critical section, did you mean to defer the unlock?. # https://staticcheck.dev/docs/checks/#SA2001 - SA2001 # Called 'testing.T.FailNow' or 'SkipNow' in a goroutine, which isn't allowed. # https://staticcheck.dev/docs/checks/#SA2002 - SA2002 # Deferred 'Lock' right after locking, likely meant to defer 'Unlock' instead. # https://staticcheck.dev/docs/checks/#SA2003 - SA2003 # 'TestMain' doesn't call 'os.Exit', hiding test failures. # https://staticcheck.dev/docs/checks/#SA3000 - SA3000 # Assigning to 'b.N' in benchmarks distorts the results. # https://staticcheck.dev/docs/checks/#SA3001 - SA3001 # Binary operator has identical expressions on both sides. # https://staticcheck.dev/docs/checks/#SA4000 - SA4000 # '&*x' gets simplified to 'x', it does not copy 'x'. # https://staticcheck.dev/docs/checks/#SA4001 - SA4001 # Comparing unsigned values against negative values is pointless. # https://staticcheck.dev/docs/checks/#SA4003 - SA4003 # The loop exits unconditionally after one iteration. # https://staticcheck.dev/docs/checks/#SA4004 - SA4004 # Field assignment that will never be observed. Did you mean to use a pointer receiver?. # https://staticcheck.dev/docs/checks/#SA4005 - SA4005 # A value assigned to a variable is never read before being overwritten. Forgotten error check or dead code?. # https://staticcheck.dev/docs/checks/#SA4006 - SA4006 # The variable in the loop condition never changes, are you incrementing the wrong variable?. # https://staticcheck.dev/docs/checks/#SA4008 - SA4008 # A function argument is overwritten before its first use. # https://staticcheck.dev/docs/checks/#SA4009 - SA4009 # The result of 'append' will never be observed anywhere. # https://staticcheck.dev/docs/checks/#SA4010 - SA4010 # Break statement with no effect. Did you mean to break out of an outer loop?. # https://staticcheck.dev/docs/checks/#SA4011 - SA4011 # Comparing a value against NaN even though no value is equal to NaN. # https://staticcheck.dev/docs/checks/#SA4012 - SA4012 # Negating a boolean twice ('!!b') is the same as writing 'b'. This is either redundant, or a typo. # https://staticcheck.dev/docs/checks/#SA4013 - SA4013 # An if/else if chain has repeated conditions and no side-effects; if the condition didn't match the first time, it won't match the second time, either. # https://staticcheck.dev/docs/checks/#SA4014 - SA4014 # Calling functions like 'math.Ceil' on floats converted from integers doesn't do anything useful. # https://staticcheck.dev/docs/checks/#SA4015 - SA4015 # Certain bitwise operations, such as 'x ^ 0', do not do anything useful. # https://staticcheck.dev/docs/checks/#SA4016 - SA4016 # Discarding the return values of a function without side effects, making the call pointless. # https://staticcheck.dev/docs/checks/#SA4017 - SA4017 # Self-assignment of variables. # https://staticcheck.dev/docs/checks/#SA4018 - SA4018 # Multiple, identical build constraints in the same file. # https://staticcheck.dev/docs/checks/#SA4019 - SA4019 # Unreachable case clause in a type switch. # https://staticcheck.dev/docs/checks/#SA4020 - SA4020 # "x = append(y)" is equivalent to "x = y". # https://staticcheck.dev/docs/checks/#SA4021 - SA4021 # Comparing the address of a variable against nil. # https://staticcheck.dev/docs/checks/#SA4022 - SA4022 # Impossible comparison of interface value with untyped nil. # https://staticcheck.dev/docs/checks/#SA4023 - SA4023 # Checking for impossible return value from a builtin function. # https://staticcheck.dev/docs/checks/#SA4024 - SA4024 # Integer division of literals that results in zero. # https://staticcheck.dev/docs/checks/#SA4025 - SA4025 # Go constants cannot express negative zero. # https://staticcheck.dev/docs/checks/#SA4026 - SA4026 # '(*net/url.URL).Query' returns a copy, modifying it doesn't change the URL. # https://staticcheck.dev/docs/checks/#SA4027 - SA4027 # 'x % 1' is always zero. # https://staticcheck.dev/docs/checks/#SA4028 - SA4028 # Ineffective attempt at sorting slice. # https://staticcheck.dev/docs/checks/#SA4029 - SA4029 # Ineffective attempt at generating random number. # https://staticcheck.dev/docs/checks/#SA4030 - SA4030 # Checking never-nil value against nil. # https://staticcheck.dev/docs/checks/#SA4031 - SA4031 # Comparing 'runtime.GOOS' or 'runtime.GOARCH' against impossible value. # https://staticcheck.dev/docs/checks/#SA4032 - SA4032 # Assignment to nil map. # https://staticcheck.dev/docs/checks/#SA5000 - SA5000 # Deferring 'Close' before checking for a possible error. # https://staticcheck.dev/docs/checks/#SA5001 - SA5001 # The empty for loop ("for {}") spins and can block the scheduler. # https://staticcheck.dev/docs/checks/#SA5002 - SA5002 # Defers in infinite loops will never execute. # https://staticcheck.dev/docs/checks/#SA5003 - SA5003 # "for { select { ..." with an empty default branch spins. # https://staticcheck.dev/docs/checks/#SA5004 - SA5004 # The finalizer references the finalized object, preventing garbage collection. # https://staticcheck.dev/docs/checks/#SA5005 - SA5005 # Infinite recursive call. # https://staticcheck.dev/docs/checks/#SA5007 - SA5007 # Invalid struct tag. # https://staticcheck.dev/docs/checks/#SA5008 - SA5008 # Invalid Printf call. # https://staticcheck.dev/docs/checks/#SA5009 - SA5009 # Impossible type assertion. # https://staticcheck.dev/docs/checks/#SA5010 - SA5010 # Possible nil pointer dereference. # https://staticcheck.dev/docs/checks/#SA5011 - SA5011 # Passing odd-sized slice to function expecting even size. # https://staticcheck.dev/docs/checks/#SA5012 - SA5012 # Using 'regexp.Match' or related in a loop, should use 'regexp.Compile'. # https://staticcheck.dev/docs/checks/#SA6000 - SA6000 # Missing an optimization opportunity when indexing maps by byte slices. # https://staticcheck.dev/docs/checks/#SA6001 - SA6001 # Storing non-pointer values in 'sync.Pool' allocates memory. # https://staticcheck.dev/docs/checks/#SA6002 - SA6002 # Converting a string to a slice of runes before ranging over it. # https://staticcheck.dev/docs/checks/#SA6003 - SA6003 # Inefficient string comparison with 'strings.ToLower' or 'strings.ToUpper'. # https://staticcheck.dev/docs/checks/#SA6005 - SA6005 # Using io.WriteString to write '[]byte'. # https://staticcheck.dev/docs/checks/#SA6006 - SA6006 # Defers in range loops may not run when you expect them to. # https://staticcheck.dev/docs/checks/#SA9001 - SA9001 # Using a non-octal 'os.FileMode' that looks like it was meant to be in octal. # https://staticcheck.dev/docs/checks/#SA9002 - SA9002 # Empty body in an if or else branch. # https://staticcheck.dev/docs/checks/#SA9003 - SA9003 # Only the first constant has an explicit type. # https://staticcheck.dev/docs/checks/#SA9004 - SA9004 # Trying to marshal a struct with no public fields nor custom marshaling. # https://staticcheck.dev/docs/checks/#SA9005 - SA9005 # Dubious bit shifting of a fixed size integer value. # https://staticcheck.dev/docs/checks/#SA9006 - SA9006 # Deleting a directory that shouldn't be deleted. # https://staticcheck.dev/docs/checks/#SA9007 - SA9007 # 'else' branch of a type assertion is probably not reading the right value. # https://staticcheck.dev/docs/checks/#SA9008 - SA9008 # Ineffectual Go compiler directive. # https://staticcheck.dev/docs/checks/#SA9009 - SA9009 # Incorrect or missing package comment. # https://staticcheck.dev/docs/checks/#ST1000 - ST1000 # Dot imports are discouraged. # https://staticcheck.dev/docs/checks/#ST1001 - ST1001 # Poorly chosen identifier. # https://staticcheck.dev/docs/checks/#ST1003 - ST1003 # Incorrectly formatted error string. # https://staticcheck.dev/docs/checks/#ST1005 - ST1005 # Poorly chosen receiver name. # https://staticcheck.dev/docs/checks/#ST1006 - ST1006 # A function's error value should be its last return value. # https://staticcheck.dev/docs/checks/#ST1008 - ST1008 # Poorly chosen name for variable of type 'time.Duration'. # https://staticcheck.dev/docs/checks/#ST1011 - ST1011 # Poorly chosen name for error variable. # https://staticcheck.dev/docs/checks/#ST1012 - ST1012 # Should use constants for HTTP error codes, not magic numbers. # https://staticcheck.dev/docs/checks/#ST1013 - ST1013 # A switch's default case should be the first or last case. # https://staticcheck.dev/docs/checks/#ST1015 - ST1015 # Use consistent method receiver names. # https://staticcheck.dev/docs/checks/#ST1016 - ST1016 # Don't use Yoda conditions. # https://staticcheck.dev/docs/checks/#ST1017 - ST1017 # Avoid zero-width and control characters in string literals. # https://staticcheck.dev/docs/checks/#ST1018 - ST1018 # Importing the same package multiple times. # https://staticcheck.dev/docs/checks/#ST1019 - ST1019 # The documentation of an exported function should start with the function's name. # https://staticcheck.dev/docs/checks/#ST1020 - ST1020 # The documentation of an exported type should start with type's name. # https://staticcheck.dev/docs/checks/#ST1021 - ST1021 # The documentation of an exported variable or constant should start with variable's name. # https://staticcheck.dev/docs/checks/#ST1022 - ST1022 # Redundant type in variable declaration. # https://staticcheck.dev/docs/checks/#ST1023 - ST1023 # Use plain channel send or receive instead of single-case select. # https://staticcheck.dev/docs/checks/#S1000 - S1000 # Replace for loop with call to copy. # https://staticcheck.dev/docs/checks/#S1001 - S1001 # Omit comparison with boolean constant. # https://staticcheck.dev/docs/checks/#S1002 - S1002 # Replace call to 'strings.Index' with 'strings.Contains'. # https://staticcheck.dev/docs/checks/#S1003 - S1003 # Replace call to 'bytes.Compare' with 'bytes.Equal'. # https://staticcheck.dev/docs/checks/#S1004 - S1004 # Drop unnecessary use of the blank identifier. # https://staticcheck.dev/docs/checks/#S1005 - S1005 # Use "for { ... }" for infinite loops. # https://staticcheck.dev/docs/checks/#S1006 - S1006 # Simplify regular expression by using raw string literal. # https://staticcheck.dev/docs/checks/#S1007 - S1007 # Simplify returning boolean expression. # https://staticcheck.dev/docs/checks/#S1008 - S1008 # Omit redundant nil check on slices, maps, and channels. # https://staticcheck.dev/docs/checks/#S1009 - S1009 # Omit default slice index. # https://staticcheck.dev/docs/checks/#S1010 - S1010 # Use a single 'append' to concatenate two slices. # https://staticcheck.dev/docs/checks/#S1011 - S1011 # Replace 'time.Now().Sub(x)' with 'time.Since(x)'. # https://staticcheck.dev/docs/checks/#S1012 - S1012 # Use a type conversion instead of manually copying struct fields. # https://staticcheck.dev/docs/checks/#S1016 - S1016 # Replace manual trimming with 'strings.TrimPrefix'. # https://staticcheck.dev/docs/checks/#S1017 - S1017 # Use "copy" for sliding elements. # https://staticcheck.dev/docs/checks/#S1018 - S1018 # Simplify "make" call by omitting redundant arguments. # https://staticcheck.dev/docs/checks/#S1019 - S1019 # Omit redundant nil check in type assertion. # https://staticcheck.dev/docs/checks/#S1020 - S1020 # Merge variable declaration and assignment. # https://staticcheck.dev/docs/checks/#S1021 - S1021 # Omit redundant control flow. # https://staticcheck.dev/docs/checks/#S1023 - S1023 # Replace 'x.Sub(time.Now())' with 'time.Until(x)'. # https://staticcheck.dev/docs/checks/#S1024 - S1024 # Don't use 'fmt.Sprintf("%s", x)' unnecessarily. # https://staticcheck.dev/docs/checks/#S1025 - S1025 # Simplify error construction with 'fmt.Errorf'. # https://staticcheck.dev/docs/checks/#S1028 - S1028 # Range over the string directly. # https://staticcheck.dev/docs/checks/#S1029 - S1029 # Use 'bytes.Buffer.String' or 'bytes.Buffer.Bytes'. # https://staticcheck.dev/docs/checks/#S1030 - S1030 # Omit redundant nil check around loop. # https://staticcheck.dev/docs/checks/#S1031 - S1031 # Use 'sort.Ints(x)', 'sort.Float64s(x)', and 'sort.Strings(x)'. # https://staticcheck.dev/docs/checks/#S1032 - S1032 # Unnecessary guard around call to "delete". # https://staticcheck.dev/docs/checks/#S1033 - S1033 # Use result of type assertion to simplify cases. # https://staticcheck.dev/docs/checks/#S1034 - S1034 # Redundant call to 'net/http.CanonicalHeaderKey' in method call on 'net/http.Header'. # https://staticcheck.dev/docs/checks/#S1035 - S1035 # Unnecessary guard around map access. # https://staticcheck.dev/docs/checks/#S1036 - S1036 # Elaborate way of sleeping. # https://staticcheck.dev/docs/checks/#S1037 - S1037 # Unnecessarily complex way of printing formatted string. # https://staticcheck.dev/docs/checks/#S1038 - S1038 # Unnecessary use of 'fmt.Sprint'. # https://staticcheck.dev/docs/checks/#S1039 - S1039 # Type assertion to current type. # https://staticcheck.dev/docs/checks/#S1040 - S1040 # Apply De Morgan's law. # https://staticcheck.dev/docs/checks/#QF1001 - QF1001 # Convert untagged switch to tagged switch. # https://staticcheck.dev/docs/checks/#QF1002 - QF1002 # Convert if/else-if chain to tagged switch. # https://staticcheck.dev/docs/checks/#QF1003 - QF1003 # Use 'strings.ReplaceAll' instead of 'strings.Replace' with 'n == -1'. # https://staticcheck.dev/docs/checks/#QF1004 - QF1004 # Expand call to 'math.Pow'. # https://staticcheck.dev/docs/checks/#QF1005 - QF1005 # Lift 'if'+'break' into loop condition. # https://staticcheck.dev/docs/checks/#QF1006 - QF1006 # Merge conditional assignment into variable declaration. # https://staticcheck.dev/docs/checks/#QF1007 - QF1007 # Omit embedded fields from selector expression. # https://staticcheck.dev/docs/checks/#QF1008 - QF1008 # Use 'time.Time.Equal' instead of '==' operator. # https://staticcheck.dev/docs/checks/#QF1009 - QF1009 # Convert slice of bytes to string when printing it. # https://staticcheck.dev/docs/checks/#QF1010 - QF1010 # Omit redundant type from variable declaration. # https://staticcheck.dev/docs/checks/#QF1011 - QF1011 # Use 'fmt.Fprintf(x, ...)' instead of 'x.Write(fmt.Sprintf(...))'. # https://staticcheck.dev/docs/checks/#QF1012 - QF1012 tagalign: # Align and sort can be used together or separately. # # Whether enable align. If true, the struct tags will be aligned. # E.g.: # type FooBar struct { # Bar string `json:"bar" validate:"required"` # FooFoo int8 `json:"foo_foo" validate:"required"` # } # will be formatted to: # type FooBar struct { # Bar string `json:"bar" validate:"required"` # FooFoo int8 `json:"foo_foo" validate:"required"` # } # Default: true. align: false # Whether enable tags sort. # If true, the tags will be sorted by name in ascending order. # E.g.: `xml:"bar" json:"bar" validate:"required"` -> `json:"bar" validate:"required" xml:"bar"`. # Default: true sort: false # Specify the order of tags, the other tags will be sorted by name. # This option will be ignored if `sort` is false. # Default: [] order: - json - yaml - yml - toml - mapstructure - binding - validate # Whether enable strict style. # In this style, the tags will be sorted and aligned in the dictionary order, # and the tags with the same name will be aligned together. # Note: This option will be ignored if 'align' or 'sort' is false. # Default: false strict: true tagliatelle: # Checks the struct tag name case. case: # Defines the association between tag name and case. # Any struct tag name can be used. # Supported string cases: # - `camel` # - `pascal` # - `kebab` # - `snake` # - `upperSnake` # - `goCamel` # - `goPascal` # - `goKebab` # - `goSnake` # - `upper` # - `lower` # - `header` rules: json: camel yaml: goCamel xml: goCamel toml: snake bson: camel avro: snake mapstructure: kebab env: upperSnake envconfig: upperSnake testifylint: # Enable all checkers (https://github.com/Antonboom/testifylint#checkers). # Default: false enable-all: true # Disable checkers by name # (in addition to default # suite-thelper # ). disable: [] #- blank-import #- bool-compare #- compares #- contains #- empty #- encoded-compare #- equal-values #- error-is-as #- error-nil #- expected-actual #- float-compare #- formatter #- go-require #- len #- negative-positive #- nil-compare #- regexp #- require-error #- suite-broken-parallel #- suite-dont-use-pkg #- suite-extra-assert-call #- suite-method-signature #- suite-subtest-run #- suite-thelper #- useless-assert # Disable all checkers (https://github.com/Antonboom/testifylint#checkers). # Default: false disable-all: false # Enable checkers by name # (in addition to default # blank-import, bool-compare, compares, contains, empty, encoded-compare, equal-values, error-is-as, error-nil, # expected-actual, go-require, float-compare, formatter, len, negative-positive, nil-compare, regexp, require-error, # suite-broken-parallel, suite-dont-use-pkg, suite-extra-assert-call, suite-subtest-run, suite-method-signature, # useless-assert # ). enable: [] #- blank-import #- bool-compare #- compares #- contains #- empty #- encoded-compare #- equal-values #- error-is-as #- error-nil #- expected-actual #- float-compare #- formatter #- go-require #- len #- negative-positive #- nil-compare #- regexp #- require-error #- suite-broken-parallel #- suite-dont-use-pkg #- suite-extra-assert-call #- suite-method-signature #- suite-subtest-run #- suite-thelper #- useless-assert bool-compare: # To ignore user defined types (over builtin bool). # Default: false ignore-custom-types: false expected-actual: # Regexp for expected variable name. # Default: (^(exp(ected)?|want(ed)?)([A-Z]\w*)?$)|(^(\w*[a-z])?(Exp(ected)?|Want(ed)?)$) pattern: (^(exp(ected)?|want(ed)?)([A-Z]\w*)?$)|(^(\w*[a-z])?(Exp(ected)?|Want(ed)?)$) formatter: # To enable go vet's printf checks. # Default: true check-format-string: true # To require f-assertions (e.g. `assert.Equalf`) if format string is used, even if there are no variable-length # variables, i.e. it requires `require.NoErrorf` for both these cases: # - require.NoErrorf(t, err, "unexpected error") # - require.NoErrorf(t, err, "unexpected error for sid: %v", sid) # To understand this behavior, please read the # https://github.com/Antonboom/testifylint?tab=readme-ov-file#historical-reference-of-formatter. # Default: false require-f-funcs: false # To require that the first element of msgAndArgs (msg) has a string type. # For example, in such case assertion like `assert.True(t, b, tt.case)` will be considered as invalid. # Default: true require-string-msg: true go-require: # To ignore HTTP handlers (like http.HandlerFunc). # Default: false ignore-http-handlers: false require-error: # Regexp for assertions to analyze. If defined, then only matched error assertions will be reported. # Default: "" fn-pattern: "" suite-extra-assert-call: # To require or remove extra Assert() call? # Default: remove mode: require testpackage: # Regexp pattern to skip files. # Default: "(export|internal)_test\\.go" skip-regexp: (export|internal)_test\.go # List of packages that don't end with _test that tests are allowed to be in. # Default: "main" allow-packages: - main thelper: test: # Check *testing.T is first param (or after context.Context) of helper function. # Default: true first: true # Check *testing.T param has name t. # Default: true name: true # Check t.Helper() begins helper function. # Default: true begin: true benchmark: # Check *testing.B is first param (or after context.Context) of helper function. # Default: true first: true # Check *testing.B param has name b. # Default: true name: true # Check b.Helper() begins helper function. # Default: true begin: true tb: # Check *testing.TB is first param (or after context.Context) of helper function. # Default: true first: true # Check *testing.TB param has name tb. # Default: true name: true # Check tb.Helper() begins helper function. # Default: true begin: true fuzz: # Check *testing.F is first param (or after context.Context) of helper function. # Default: true first: true # Check *testing.F param has name f. # Default: true name: true # Check f.Helper() begins helper function. # Default: true begin: true usestdlibvars: # Suggest the use of http.MethodXX. # Default: true http-method: true # Suggest the use of http.StatusXX. # Default: true http-status-code: true # Suggest the use of time.Weekday.String(). # Default: true time-weekday: true # Suggest the use of time.Month.String(). # Default: false time-month: true # Suggest the use of time.Layout. # Default: false time-layout: true # Suggest the use of crypto.Hash.String(). # Default: false crypto-hash: true # Suggest the use of rpc.DefaultXXPath. # Default: false default-rpc-path: true # Suggest the use of sql.LevelXX.String(). # Default: false sql-isolation-level: true # Suggest the use of tls.SignatureScheme.String(). # Default: false tls-signature-scheme: true # Suggest the use of constant.Kind.String(). # Default: false constant-kind: true usetesting: # Enable/disable `os.CreateTemp("", ...)` detections. # Default: true os-create-temp: true # Enable/disable `os.MkdirTemp()` detections. # Default: true os-mkdir-temp: true # Enable/disable `os.Setenv()` detections. # Default: true os-setenv: true # Enable/disable `os.TempDir()` detections. # Default: false os-temp-dir: true # Enable/disable `os.Chdir()` detections. # Disabled if Go < 1.24. # Default: true os-chdir: true # Enable/disable `context.Background()` detections. # Disabled if Go < 1.24. # Default: true context-background: true # Enable/disable `context.TODO()` detections. # Disabled if Go < 1.24. # Default: true context-todo: true unconvert: # Remove conversions that force intermediate rounding. # Default: false fast-math: true # Be more conservative (experimental). # Default: false safe: false unparam: # Inspect exported functions. # # 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. # # Default: false check-exported: false unused: # Mark all struct fields that have been written to as used. # Default: true field-writes-are-uses: true # Treat IncDec statement (e.g. `i++` or `i--`) as both read and write operation instead of just write. # Default: false post-statements-are-reads: true # Mark all exported fields as used. # default: true exported-fields-are-used: true # Mark all function parameters as used. # default: true parameters-are-used: true # Mark all local variables as used. # default: true local-variables-are-used: false # Mark all identifiers inside generated files as used. # Default: true generated-is-used: true varnamelen: # The longest distance, in source lines, that is being considered a "small scope". # Variables used in at most this many lines will be ignored. # Default: 5 max-distance: 15 # The minimum length of a variable's name that is considered "long". # Variable names that are at least this long will be ignored. # Default: 3 #min-name-length: 2 # Check method receivers. # Default: false #check-receiver: true # Check named return values. # Default: false check-return: true # Check type parameters. # Default: false check-type-param: true # Ignore "ok" variables that hold the bool return value of a type assertion. # Default: false ignore-type-assert-ok: true # Ignore "ok" variables that hold the bool return value of a map index. # Default: false ignore-map-index-ok: true # Ignore "ok" variables that hold the bool return value of a channel receive. # Default: false ignore-chan-recv-ok: true # Optional list of variable names that should be ignored completely. # Default: [] ignore-names: - err # Optional list of variable declarations that should be ignored completely. # Entries must be in one of the following forms (see below for examples): # - for variables, parameters, named return values, method receivers, or type parameters: # ( can also be a pointer/slice/map/chan/...) # - for constants: const # # Default: [] ignore-decls: - t *testing.T - w http.ResponseWriter - r *http.Request - r io.Reader - c convey.C - i int - T any - op string whitespace: # Enforces newlines (or comments) after every multi-line if statement. # Default: false multi-if: false # Enforces newlines (or comments) after every multi-line function signature. # Default: false multi-func: false wrapcheck: # An array of strings specifying additional substrings of signatures to ignore. # Unlike 'ignore-sigs', this option extends the default set (or the set specified in 'ignore-sigs') without replacing it entirely. # This allows you to add specific signatures to the ignore list # while retaining the defaults or any items in 'ignore-sigs'. # Default: [] extra-ignore-sigs: [] #- .CustomError( #- .SpecificWrap( # 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. # Default: [".Errorf(", "errors.New(", "errors.Unwrap(", "errors.Join(", ".Wrap(", ".Wrapf(", ".WithMessage(", ".WithMessagef(", ".WithStack("] #ignoreSigs: # - .Errorf( # - errors.New( # - errors.Unwrap( # - errors.Join( # - .Wrap( # - .Wrapf( # - .WithMessage( # - .WithMessagef( # - .WithStack( # An array of strings that specify regular expressions of signatures to ignore. # Default: [] ignore-sig-regexps: #- \.New.*Error\( # An array of strings that specify globs of packages to ignore. # Default: [] ignore-package-globs: [] #- encoding/* #- github.com/pkg/* # An array of strings that specify regular expressions of interfaces to ignore. # Default: [] ignore-interface-regexps: [] #- ^(?i)c(?-i)ach(ing|e) # Determines whether wrapcheck should report errors returned from inside the package. # Default: false report-internal-errors: false wsl: # Do strict checking when assigning from append (x = append(x, y)). # If this is set to true - the append call must append either a variable # assigned, called or used on the line above. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#strict-append # Default: true strict-append: true # Allows assignments to be cuddled with variables used in calls on # line above and calls to be cuddled with assignments of variables # used in call on line above. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-assign-and-call # Default: true allow-assign-and-call: true # Allows assignments to be cuddled with anything. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-assign-and-anything # Default: false allow-assign-and-anything: false # Allows cuddling to assignments even if they span over multiple lines. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-multiline-assign # Default: true allow-multiline-assign: true # If the number of lines in a case block is equal to or lager than this number, # the case *must* end white a newline. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#force-case-trailing-whitespace # Default: 0 force-case-trailing-whitespace: 2 # Allow blocks to end with comments. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-trailing-comment # Default: false allow-trailing-comment: false # Allow multiple comments in the beginning of a block separated with newline. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-separated-leading-comment # Default: false allow-separated-leading-comment: true # Allow multiple var/declaration statements to be cuddled. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-cuddle-declarations # Default: false allow-cuddle-declarations: false # A list of call idents that everything can be cuddled with. # Defaults: [ "Lock", "RLock" ] allow-cuddle-with-calls: [ "Lock", "RLock", "defer" ] # AllowCuddleWithRHS is a list of right hand side variables that is allowed # to be cuddled with anything. # Defaults: [ "Unlock", "RUnlock" ] allow-cuddle-with-rhs: [ "Unlock", "RUnlock" ] # Allow cuddling with any block as long as the variable is used somewhere in # the block. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#allow-cuddle-used-in-block # Default: false allow-cuddle-used-in-block: true # Causes an error when an If statement that checks an error variable doesn't # cuddle with the assignment of that variable. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#force-err-cuddling # Default: false force-err-cuddling: true # When force-err-cuddling is enabled this is a list of names # used for error variables to check for in the conditional. # Default: [ "err" ] error-variable-names: [ "err", "err2", "err3" ] # Causes an error if a short declaration (:=) cuddles with anything other than # another short declaration. # This logic overrides force-err-cuddling among others. # https://github.com/bombsimon/wsl/blob/HEAD/doc/configuration.md#force-short-decl-cuddling # Default: false force-short-decl-cuddling: false # The custom section can be used to define linter plugins to be loaded at runtime. # See README documentation for more info. custom: {} # Each custom linter should have a unique name. #example: # The plugin type. # It can be `goplugin` or `module`. # Default: goplugin #type: module # The path to the plugin *.so. Can be absolute or local. # Required for each custom linter. #path: /path/to/example.so # The description of the linter. # Optional. #description: This is an example usage of a plugin linter. # Intended to point to the repo location of the linter. # Optional. #original-url: github.com/golangci/example-linter # Plugins settings/configuration. # Only work with plugin based on `linterdb.PluginConstructor`. # Optional. #settings: # foo: bar # Defines a set of rules to ignore issues. # It does not skip the analysis, and so does not ignore "typecheck" errors. exclusions: # Mode of the generated files analysis. # # - `strict`: sources are excluded by strictly following the Go generated file convention. # Source files that have lines matching only the following regular expression will be excluded: `^// Code generated .* DO NOT EDIT\.$` # This line must appear before the first non-comment, non-blank text in the file. # https://go.dev/s/generatedcode # - `lax`: sources are excluded if they contain lines like `autogenerated file`, `code generated`, `do not edit`, etc. # - `disable`: disable the generated files exclusion. # # Default: strict generated: lax # Log a warning if an exclusion rule is unused. # Default: false warn-unused: false # Predefined exclusion rules. # Default: [] presets: [] #- comments #- std-error-handling #- common-false-positives #- legacy # Excluding configuration per-path, per-linter, per-text and per-source rules: # Exclude some linters from running on tests files. - path: _test\.go linters: - cyclop - dupl - errcheck - forcetypeassert - funlen - goconst - gocognit - gocyclo - goerr113 - gosec - varnamelen # Exclude some linters from running on tests files. - path: _test\.go linters: - revive text: "(comments-density|line-length-limit|unchecked-type-assertion)" # Run some linter only for test files by excluding its issues for everything else. #- path-except: _test\.go # linters: # - forbidigo # Exclude known linters from partially hard-vendored code, # which is impossible to exclude via `nolint` comments. # `/` will be replaced by the current OS file path separator to properly work on Windows. - path: internal/hmac/ text: "weak cryptographic primitive" linters: - gosec # Exclude some `staticcheck` messages. #- linters: # - staticcheck # text: "SA9003:" - linters: - revive text: "(line-length-limit)" source: "(//revive:disable|//nolint:)" # Which file paths to exclude: they will be analyzed, but issues from them won't be reported. # "/" will be replaced by the current OS file path separator to properly work on Windows. # Default: [] paths: - ".*\\.my\\.go$" - lib/bad.go # Which file paths to not exclude. # Default: [] paths-except: - ".*\\.my\\.go$" - lib/bad.go formatters: # Enable specific formatter. # Default: [] (uses standard Go formatting) enable: - gci #- gofmt - gofumpt #- goimports - golines # Formatters settings. settings: gci: # Section configuration to compare against. # Section names are case-insensitive and may contain parameters in (). # The default order of sections is `standard > default > custom > blank > dot > alias > localmodule`. # If `custom-order` is `true`, it follows the order of `sections` option. # Default: ["standard", "default"] sections: - standard # Standard section: captures all standard packages. - prefix(golang.org/x) # Custom section: groups all imports with the specified Prefix. - default # Default section: contains all imports that could not be matched to another section type. - blank # Blank section: contains all blank imports. This section is not present unless explicitly enabled. - dot # Dot section: contains all dot imports. This section is not present unless explicitly enabled. - alias # Alias section: contains all alias imports. This section is not present unless explicitly enabled. - localmodule # Local module section: contains all local packages. This section is not present unless explicitly enabled. # Checks that no inline comments are present. # Default: false no-inline-comments: false # Checks that no prefix comments (comment lines above an import) are present. # Default: false no-prefix-comments: true # Enable custom order of sections. # If `true`, make the section order the same as the order of `sections`. # Default: false custom-order: true # Drops lexical ordering for custom sections. # Default: false no-lex-order: true gofmt: # Simplify code: gofmt with `-s` option. # Default: true simplify: false # Apply the rewrite rules to the source before reformatting. # https://pkg.go.dev/cmd/gofmt # Default: [] rewrite-rules: - pattern: 'interface{}' replacement: 'any' - pattern: 'a[b:len(a)]' replacement: 'a[b:]' gofumpt: # Module path which contains the source code being formatted. # Default: "" #module-path: github.com/org/project # Choose whether to use the extra rules. # Default: false extra-rules: true golines: # Target maximum line length. # Default: 100 max-len: 200 # Length of a tabulation. # Default: 4 tab-len: 4 # Shorten single-line comments. # Default: false shorten-comments: true # Default: true reformat-tags: false # Split chained methods on the dots as opposed to the arguments. # Default: true chain-split-dots: true exclusions: # Log a warning if an exclusion path is unused. # Default: false warn-unused: false # Mode of the generated files analysis. # # - `strict`: sources are excluded by strictly following the Go generated file convention. # Source files that have lines matching only the following regular expression will be excluded: `^// Code generated .* DO NOT EDIT\.$` # This line must appear before the first non-comment, non-blank text in the file. # https://go.dev/s/generatedcode # - `lax`: sources are excluded if they contain lines like `autogenerated file`, `code generated`, `do not edit`, etc. # - `disable`: disable the generated files exclusion. # # Default: lax generated: lax # Which file paths to exclude. # Default: [] paths: - ".*\\.my\\.go$" - lib/bad.go issues: # Maximum issues count per one linter. # Set to 0 to disable. # Default: 50 max-issues-per-linter: 0 # Maximum count of issues with the same text. # Set to 0 to disable. # Default: 3 max-same-issues: 0 # Make issues output unique by line. # Default: true uniq-by-line: false # 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: false. new: false # Show only new issues created after the best common ancestor (merge-base against HEAD). # Default: "" #new-from-merge-base: main # Show only new issues created after git revision `REV`. # Default: "" #new-from-rev: HEAD # Show only new issues created in git patch with set file path. # Default: "" #new-from-patch: path/to/patch/file # Show issues in any part of update files (requires new-from-rev or new-from-patch). # Default: false whole-files: true # Fix found issues (if it's supported by the linter). # Default: false fix: false # output configuration options output: # The formats used to render issues. #formats: # Prints issues in a text format with colors, line number, and linter name. # This format is the default format. #text: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # # Print linter name in the end of issue text. # # Default: true # print-linter-name: true # # Print lines of code with issue. # # Default: true # print-issued-lines: true # # Use colors. # # Default: true # colors: true # Prints issues in a JSON representation. #json: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Prints issues in columns representation separated by tabulations. #tab: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # # Print linter name in the end of issue text. # # Default: true # print-linter-name: true # # Use colors. # # Default: true # colors: false # Prints issues in an HTML page. # It uses the Cloudflare CDN (cdnjs) and React. #html: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Prints issues in the Checkstyle format. #checkstyle: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Prints issues in the Code Climate format. #code-climate: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Prints issues in the JUnit XML format. #junit-xml: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # # Support extra JUnit XML fields. # # Default: false # extended: true # Prints issues in the TeamCity format. #teamcity: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Prints issues in the SARIF format. #sarif: # # Output path can be either `stdout`, `stderr` or path to the file to write to. # # Default: stdout # path: stdout # Add a prefix to the output file references. # This option is ignored when using `output.path-mode: abs` mode. # Default: "" path-prefix: "" # By default, the report are related to the path obtained by `run.relative-path-mode`. # The mode `abs` allows to show absolute file paths instead of relative file paths. # The option `output.path-prefix` is ignored when using `abs` mode. # Default: "" path-mode: "abs" # Order to use when sorting results. # Possible values: `file`, `linter`, and `severity`. # # If the severity values are inside the following list, they are ordered in this order: # 1. error # 2. warning # 3. high # 4. medium # 5. low # Either they are sorted alphabetically. # # Default: ["linter", "file"] sort-order: - file # filepath, line, and column. - severity - linter # Show statistics per linter. # Default: false show-stats: false # Options for analysis running. run: # Timeout for total work, e.g. 30s, 5m, 5m30s. # If the value is lower or equal to 0, the timeout is disabled. # Default: 0 (disabled) timeout: 5m # The mode used to evaluate relative paths. # It's used by exclusions, Go plugins, and some linters. # The value can be: # - `gomod`: the paths will be relative to the directory of the `go.mod` file. # - `gitroot`: the paths will be relative to the git root (the parent directory of `.git`). # - `cfg`: the paths will be relative to the configuration file. # - `wd` (NOT recommended): the paths will be relative to the place where golangci-lint is run. # Default: cfg relative-path-mode: gomod # Exit code when at least one issue was found. # Default: 1 issues-exit-code: 1 # Include test files or not. # Default: true tests: true # List of build tags, all linters use it. # Default: [] build-tags: [] #- mytag # 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. # # Allowed values: readonly|vendor|mod # Default: "" #modules-download-mode: readonly # Allow multiple parallel golangci-lint instances running. # If false, golangci-lint acquires file lock on start. # Default: false allow-parallel-runners: true # Allow multiple golangci-lint instances running, but serialize them around a lock. # If false, golangci-lint exits with an error if it fails to acquire file lock on start. # Default: false allow-serial-runners: true # Define the Go version limit. # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.22. #go: '1.19' # Number of operating system threads (`GOMAXPROCS`) that can execute golangci-lint simultaneously. # Default: 0 (automatically set to match Linux container CPU quota and # fall back to the number of logical CPUs in the machine) #concurrency: 4 severity: # 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#SeverityLevel # - GitHub: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message # - TeamCity: https://www.jetbrains.com/help/teamcity/service-messages.html#Inspection+Instance # # `@linter` can be used as severity value to keep the severity from linters (e.g. revive, gosec, ...) # # Default: "" default: "@linter" # 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. # # `@linter` can be used as severity value to keep the severity from linters (e.g. revive, gosec, ...) # # Only affects out formats that support setting severity information. # # Default: [] rules: - linters: - dupl severity: info - linters: - gosec - errcheck severity: error