From 57ff8f2911960bf3d9b409d613c90e692a620d9b Mon Sep 17 00:00:00 2001 From: Bruno Carlin Date: Tue, 14 Jan 2025 01:06:47 +0100 Subject: [PATCH] chore: update golangci-lint config --- .golangci.yml | 1764 ++++++++++++++++++++++++++++-------------------- CHANGELOG.md | 2 +- adapters.go | 19 +- config.go | 17 +- config_test.go | 2 +- 5 files changed, 1047 insertions(+), 757 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 204c5c6..4b9cac7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,109 +1,31 @@ +# 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. -# Options for analysis running. -run: - # The default concurrency value is the number of available CPU. - #concurrency: 4 - - # Timeout for analysis, e.g. 30s, 5m. - # Default: 1m - #timeout: 5m - - # Exit code when at least one issue was found. - # Default: 1 - #issues-exit-code: 2 - - # Include test files or not. - # Default: true - #tests: false - - # List of build tags, all linters use it. - # Default: []. - #build-tags: - # - mytag - - # Which dirs to skip: issues from them won't be reported. - # Can use regexp here: `generated.*`, regexp is applied on full path, - # including the path prefix if one is set. - # Default value is empty list, - # but default dirs are skipped independently of this option's value (see skip-dirs-use-default). - # "/" will be replaced by current OS file path separator to properly work on Windows. - #skip-dirs: - # - src/external_libs - # - autogenerated_by_my_lib - - # Enables skipping of directories: - # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - # Default: true - #skip-dirs-use-default: false - - # Which files to skip: they will be analyzed, but issues from them won't be reported. - # Default value is empty list, - # but there is no need to include all autogenerated files, - # we confidently recognize autogenerated files. - # If it's not please let us know. - # "/" will be replaced by current OS file path separator to properly work on Windows. - #skip-files: - # - ".*\\.my\\.go$" - # - lib/bad.go - - # 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 - # By default, it isn't set. - #modules-download-mode: readonly - - # Allow multiple parallel golangci-lint instances running. - # If false (default) - golangci-lint acquires file lock on start. - #allow-parallel-runners: false - - # Define the Go version limit. - # Mainly related to generics support since go1.18. - # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.18 - #go: '1.19' - - -# output configuration options -output: - # Format: colored-line-number|line-number|json|colored-tab|tab|checkstyle|code-climate|junit-xml|github-actions|teamcity - # - # Multiple can be specified by separating them by comma, output can be provided - # for each of them by separating format name and path by colon symbol. - # Output path can be either `stdout`, `stderr` or path to the file to write to. - # Example: "checkstyle:report.xml,json:stdout,colored-line-number" - # - # Default: colored-line-number - #format: json - - # Print lines of code with issue. - # Default: true - #print-issued-lines: false - - # Print linter name in the end of issue text. - # Default: true - #print-linter-name: false - - # Make issues output unique by line. - # Default: true - uniq-by-line: false - - # Add a prefix to the output file references. - # Default is no prefix. - #path-prefix: "" - - # Sort results by: filepath, line and column. - sort-results: true +linters: + # Enable all available linters. + # Default: false + enable-all: true + # 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 + - exportloopref # Deprecated + - funlen # Done by revive + - gocognit # Done by revive + - goconst # Done by revive + - gocyclo # Done by revive + - goheader + - goimports # done by gci with more flebibility + - lll # Done by revive with better messages + - mnd # Done by revive + - tagalign # too noisy and useless # All available settings of specific linters. @@ -113,71 +35,32 @@ linters-settings: # 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: - # - Append - # - \.Wrapf + 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: false + use-builtin-exclusions: true # Ignore *_test.go files. # Default: false - #ignore-test: true + ignore-test: false bidichk: - # The following configurations check for all mentioned invisible unicode runes. + # The following configurations check for all mentioned invisible Unicode runes. # All runes are enabled by default. - #left-to-right-embedding: false - #right-to-left-embedding: false - #pop-directional-formatting: false - #left-to-right-override: false - #right-to-left-override: false - #left-to-right-isolate: false - #right-to-left-isolate: false - #first-strong-isolate: false - #pop-directional-isolate: false - - decorder: - # Required order of `type`, `const`, `var` and `func` declarations inside a file. - # Default: types before constants before variables before functions. - dec-order: - - const - - var - - type - - func - - # If true, underscore vars (vars with "_" as the name) will be ignored at all checks - # Default: false (underscore vars are not ignored) - ignore-underscore-vars: false - - # If true, order of declarations is not checked at all. - # Default: true (disabled) - #disable-dec-order-check: false - - # If true, `init` func can be anywhere in file (does not have to be declared before all other functions). - # Default: true (disabled) - #disable-init-func-first-check: false - - # If true, multiple global `type`, `const` and `var` declarations are allowed. - # Default: true (disabled) - #disable-dec-num-check: false - - # If true, type declarations will be ignored for dec num check - # Default: false (type statements are not ignored) - disable-type-dec-num-check: false - - # If true, const declarations will be ignored for dec num check - # Default: false (const statements are not ignored) - disable-const-dec-num-check: false - - # If true, var declarations will be ignored for dec num check - # Default: false (var statements are not ignored) - disable-var-dec-num-check: false + 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 dogsled: # Checks assignments with too many blank identifiers. # Default: 2 - #max-blank-identifiers: 3 + max-blank-identifiers: 2 dupl: # Tokens count to trigger issue. @@ -188,14 +71,10 @@ linters-settings: # Keywords for detecting duplicate words. # If this list is not empty, only the words defined in this list will be detected. # Default: [] - #keywords: - # - "the" - # - "and" - # - "a" + keywords: [] # Keywords used to ignore detection. # Default: [] - #ignore: - # - "0C0C" + ignore: [] errcheck: # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. @@ -216,9 +95,10 @@ linters-settings: # 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/ioutil.ReadFile - 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 @@ -235,7 +115,7 @@ linters-settings: # - encoding/json.MarshalIndent # # Default: false - check-error-free-encoding: false + check-error-free-encoding: true # Issue on struct encoding that doesn't have exported fields. # Default: false @@ -245,26 +125,32 @@ linters-settings: # Check whether fmt.Errorf uses the %w verb for formatting errors. # See the https://github.com/polyfloyd/go-errorlint for caveats. # Default: true - #errorf: false + errorf: true # Permit more than 1 %w verb, valid per Go 1.20 (Requires errorf:true) # Default: true - #errorf-multi: false + errorf-multi: true # Check for plain type assertions and type switches. # Default: true - #asserts: false + asserts: true # Check for plain error comparisons. # Default: true - #comparison: false + comparison: true + # Allowed errors. + # Default: [] + allowed-errors: [] + # Allowed error "wildcards". + # Default: [] + allowed-errors-wildcard: [] exhaustive: # Program elements to check for exhaustiveness. # Default: [ switch ] - #check: - # - switch - # - map + check: + - switch + - map # Check switch statements in generated files also. # Default: false - #check-generated: true + check-generated: false # Presence of "default" case in switch statements satisfies exhaustiveness, # even if all enum members are not listed. # Default: false @@ -279,178 +165,127 @@ linters-settings: #ignore-enum-types: "Example.+" # Consider enums only in package scopes, not in inner scopes. # Default: false - #package-scope-only: true + package-scope-only: false # Only run exhaustive check on switches with "//exhaustive:enforce" comment. # Default: false - #explicit-exhaustive-switch: true + explicit-exhaustive-switch: false # Only run exhaustive check on map literals with "//exhaustive:enforce" comment. # Default: false - #explicit-exhaustive-map: true + 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: [] forbidigo: # Forbid the following identifiers (list of regexp). # Default: ["^(fmt\\.Print(|f|ln)|print|println)$"] - #forbid: - # # Builtin function: - # - ^print.*$ - # # Optional message that gets included in error reports. - # - p: ^fmt\.Print.*$ - # msg: Do not commit print statements. - # # Alternatively, put messages at the end of the regex, surrounded by `(# )?` - # # Escape any special characters. Those messages get included in error reports. - # - 'fmt\.Print.*(# Do not commit print statements\.)?' - # # Forbid spew Dump, whether it is called as function or method. - # # Depends on analyze-types below. - # - ^spew\.(ConfigState\.)?Dump$ - # # The package name might be ambiguous. - # # The full import path can be used as additional criteria. - # # Depends on analyze-types below. - # - p: ^v1.Dump$ - # pkg: ^example.com/pkg/api/v1$ + forbid: + - p: ^(fmt\\.Print(|f|ln)|print|println)$ + msg: Do not commit print statements. # Exclude godoc examples from forbidigo checks. # Default: true - #exclude_godoc_examples: false + 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 + analyze-types: true gci: - # DEPRECATED: use `sections` and `prefix(github.com/org/project)` instead. - #local-prefixes: github.com/org/project - # 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`, + # 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 # Captures all standard packages if they do not match another section. - - default # Contains all imports that could not be matched to another section type. - - prefix(code.bcarlin.xyz/go/conf) # Groups all imports with the specified Prefix. + - 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. # Skip generated files. # Default: true - skip-generated: false + skip-generated: 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: false gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'. - # See https://go-critic.github.io/overview#checks-overview. - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`. - # By default, list of stable checks is used. - #enabled-checks: - # - nestingReduce - # - unnamedResult - # - ruleguard - # - truncateCmp - + # Enable all checks. + # Default: false + enable-all: true # Which checks should be disabled; can't be combined with 'enabled-checks'. # Default: [] - #disabled-checks: - # - regexpMust - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # See https://github.com/go-critic/go-critic#usage -> section "Tags". - # Default: [] - enabled-tags: - - diagnostic - - style - - performance - - experimental - - opinionated - #disabled-tags: - # - diagnostic - # - style - # - performance - # - experimental - # - opinionated + disabled-checks: [] # Settings passed to gocritic. # The settings key is the name of a supported gocritic checker. - # The list of supported checkers can be find in https://go-critic.github.io/overview. + # The list of supported checkers can be find in https://go-critic.com/overview. settings: - captLocal: # must be valid enabled check name - # whether to restrict checker to params only (default true) - paramsOnly: true + # 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: false + skipBalanced: true hugeParam: # Size in bytes that makes the warning trigger. # Default: 80 - #sizeThreshold: 70 + 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: 4 + bodyWidth: 5 rangeExprCopy: # Size in bytes that makes the warning trigger. # Default: 512 - #sizeThreshold: 516 + sizeThreshold: 512 # Whether to check test functions # Default: true - #skipTestFuncs: false + skipTestFuncs: true rangeValCopy: # Size in bytes that makes the warning trigger. # Default: 128 - #sizeThreshold: 32 + sizeThreshold: 128 # Whether to check test functions. # Default: true - #skipTestFuncs: false - 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 flag is passed to the ruleguard 'debug-group' argument. - # Default: "" - debug: 'emptyDecl' - # Deprecated, use 'failOn' param. - # If set to true, identical to failOn='all', otherwise failOn='' - failOnError: false - # 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: dsl - # Comma-separated list of file paths containing ruleguard rules. - # If a path is relative, it is relative to the directory where the golangci-lint command is executed. - # The special '${configDir}' variable is substituted with the absolute directory containing the golangci config file. - # Glob patterns such as 'rules-*.go' may be specified. - # Default: "" - #rules: '${configDir}/ruleguard/rules-*.go,${configDir}/myrule1.go' - # Comma-separated list of enabled groups or skip empty to enable everything. - # Tags can be defined with # character prefix. - # Default: "" - #enable: "myGroupName,#myTagName" - # Comma-separated list of disabled groups or skip empty to enable everything. - # Tags can be defined with # character prefix. - # Default: "" - #disable: "myGroupName,#myTagName" + skipTestFuncs: true tooManyResultsChecker: # Maximum number of results. # Default: 5 - #maxResults: 10 + maxResults: 2 truncateCmp: # Whether to skip int/uint/uintptr types. # Default: true @@ -458,7 +293,7 @@ linters-settings: underef: # Whether to skip (*x).method() calls where x is a pointer receiver. # Default: true - #skipRecvDeref: false + skipRecvDeref: true unnamedResult: # Whether to check exported functions. # Default: false @@ -467,7 +302,7 @@ linters-settings: godot: # Comments to be checked: `declarations`, `toplevel`, or `all`. # Default: declarations - #scope: toplevel + scope: declarations # List of regexps for excluding particular comment lines from check. # Default: [] exclude: @@ -476,16 +311,19 @@ linters-settings: - "^todo:|^TODO:" # Check that each sentence ends with a period. # Default: true - #period: false + period: true # Check that each sentence starts with a capital letter. # Default: false - #capital: true + 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, and FIXME. + # 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 @@ -493,74 +331,29 @@ linters-settings: gofmt: # Simplify code: gofmt with `-s` option. # Default: true - #simplify: false + simplify: true # Apply the rewrite rules to the source before reformatting. # https://pkg.go.dev/cmd/gofmt # Default: [] rewrite-rules: - #- pattern: 'interface{}' - # replacement: 'any' + - 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: code.bcarlin.xyz/go/conf + module-path: "" # Choose whether to use the extra rules. # Default: false extra-rules: true - 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: - COMPANY: MY COMPANY - regexp: - # Define here regexp type values. - # for example: - AUTHOR: .*@mycompany\.com - # The template use for checking. - # Default: "" - template: |- - # Put here copyright header template for source code files - # For example: - # Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. - # - # {{ AUTHOR }} {{ COMPANY }} {{ YEAR }} - # SPDX-License-Identifier: Apache-2.0 - - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at: - - # http://www.apache.org/licenses/LICENSE-2.0 - - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - # 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. - # Default: "" - template-path: /path/to/my/template.tmpl - - goimports: - # A comma-separated list of prefixes, which, if set, checks import paths - # with the given prefixes are grouped after 3rd-party packages. - # Default: "" - local-prefixes: code.bcarlin.xyz/go/conf - gomoddirectives: # Allow local `replace` directives. # Default: false - #replace-local: false + replace-local: false # List of allowed `replace` directives. # Default: [] #replace-allow-list: @@ -576,92 +369,54 @@ linters-settings: allowed: # List of allowed modules. # Default: [] - modules: # List of allowed modules + modules: + - github.com/alexedwards/argon2id + - github.com/google/uuid + - github.com/hashicorp/hcl/v2 - github.com/pelletier/go-toml/v2 + - github.com/pressly/goose/v3 - github.com/stretchr/testify - # - gopkg.in/yaml.v2 + - modernc.org/sqlite # List of allowed module domains. # Default: [] domains: - - golang.org - - code.bcarlin.xyz - - code.waarp.fr - blocked: + - 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." + #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." + #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 - gosimple: - # Deprecated: use the global `run.go` instead. - #go: "1.15" - # Sxxxx checks in https://staticcheck.io/docs/configuration/options/#checks - # Default: ["*"] - checks: [ "all" ] - gosec: # To select a subset of rules to run. # Available rules: https://github.com/securego/gosec#available-rules # Default: [] - means include all rules - includes: - #- G101 # Look for hard coded credentials - #- G102 # Bind to all interfaces - #- G103 # Audit the use of unsafe block - #- G104 # Audit errors not checked - #- G106 # Audit the use of ssh.InsecureIgnoreHostKey - #- G107 # Url provided to HTTP request as taint input - #- G108 # Profiling endpoint automatically exposed on /debug/pprof - #- G109 # Potential Integer overflow made by strconv.Atoi result conversion to int16/32 - #- G110 # Potential DoS vulnerability via decompression bomb - #- G111 # Potential directory traversal - #- G112 # Potential slowloris attack - #- G113 # Usage of Rat.SetString in math/big with an overflow (CVE-2022-23772) - #- G114 # Use of net/http serve function that has no support for setting timeouts - #- G201 # SQL query construction using format string - #- G202 # SQL query construction using string concatenation - #- G203 # Use of unescaped data in HTML templates - #- G204 # Audit use of command execution - #- G301 # Poor file permissions used when creating a directory - #- G302 # Poor file permissions used with chmod - #- G303 # Creating tempfile using a predictable path - #- G304 # File path provided as taint input - #- G305 # File traversal when extracting zip/tar archive - #- G306 # Poor file permissions used when writing to a new file - #- G307 # Poor file permissions used when creating a file with os.Create - #- G401 # Detect the usage of DES, RC4, MD5 or SHA1 - #- G402 # Look for bad TLS connection settings - #- G403 # Ensure minimum RSA key length of 2048 bits - #- G404 # Insecure random number source (rand) - #- G501 # Import blocklist: crypto/md5 - #- G502 # Import blocklist: crypto/des - #- G503 # Import blocklist: crypto/rc4 - #- G504 # Import blocklist: net/http/cgi - #- G505 # Import blocklist: crypto/sha1 - #- G601 # Implicit memory aliasing of items from a range statement - #- G602 # Slice access out of bounds + includes: [] # To specify a set of rules to explicitly exclude. # Available rules: https://github.com/securego/gosec#available-rules - #excludes: - # - G101 + excludes: [] # Exclude generated files # Default: false @@ -670,12 +425,12 @@ linters-settings: # Filter out the issues with a lower severity than the given value. # Valid options are: low, medium, high. # Default: low - #severity: medium + severity: low # Filter out the issues with a lower confidence than the given value. # Valid options are: low, medium, high. # Default: low - #confidence: medium + confidence: low # Concurrency value. # Default: the number of logical CPUs usable by the current process. @@ -687,20 +442,20 @@ linters-settings: global: # If true, ignore #nosec in comments (and an alternative as well). # Default: false - nosec: true + 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: true + 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)example" + #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 @@ -741,8 +496,9 @@ linters-settings: # - Unsetenv # Default: {} G104: - fmt: - - Fscanf + json: + - Marshal + - MarshalIndent G111: # Regexp pattern to find potential directory traversal. # Default: "http\\.Dir\\(\"\\/\"\\)|http\\.Dir\\('\\/'\\)" @@ -757,26 +513,26 @@ linters-settings: # Default: "0600" G306: "0600" + gosimple: + # Sxxxx checks in https://staticcheck.dev/docs/configuration/options/#checks + # Default: ["*"] + checks: [ "*" ] + gosmopolitan: # Allow and ignore `time.Local` usages. # # Default: false - #allow-time-local: true + 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: - - 'github.com/nicksnyder/go-i18n/v2/i18n.Message' - - 'example.com/your/project/i18n/markers.Raw' - - 'example.com/your/project/i18n/markers.OK' - - 'example.com/your/project/i18n/markers.TODO' - - 'command-line-arguments.Simple' + escape-hatches: [] # Ignore test files. # # Default: true - #ignore-tests: false + ignore-tests: true # List of Unicode scripts to watch for any usage in string literals. # https://pkg.go.dev/unicode#pkg-variables # @@ -789,17 +545,41 @@ linters-settings: # - 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: [] # Settings per analyzer. settings: # Analyzer name, run `go tool vet help` to see all analyzers. - printf: + 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 + #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 @@ -811,39 +591,13 @@ linters-settings: # fmt.Sprint, fmt.Sprintf, sort.Reverse # ). # Default: [] - funcs: - #- pkg.MyFunc + 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 - - # Disable all analyzers. - # Default: false - #disable-all: true - # 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 `go tool vet help` to see all analyzers. - #enable: - # - asmdecl - - # 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 `go tool vet help` to see all analyzers. - disable: - - fieldalignment + #stringmethods: + # - MyMethod grouper: # Require the use of a single global 'const' declaration only. @@ -858,21 +612,35 @@ linters-settings: import-require-single-import: true # Require the use of grouped 'import' declarations. # Default: false - import-require-grouping: true + import-require-grouping: false # Require the use of a single global 'type' declaration only. # Default: false - #type-require-single-type: true + type-require-single-type: false # Require the use of grouped global 'type' declarations. # Default: false - #type-require-grouping: true + type-require-grouping: false # Require the use of a single global 'var' declaration only. # Default: false - var-require-single-var: true + var-require-single-var: false # Require the use of grouped global 'var' declarations. # Default: false - var-require-grouping: true + var-require-grouping: false + + 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. @@ -896,35 +664,52 @@ linters-settings: - 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: - # ireturn does not allow using `allow` and `reject` settings at the same time. - # Both settings are lists of the keywords and regular expressions matched to interface or package names. - # keywords: + # 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 - - # By default, it allows using errors, empty interfaces, anonymous interfaces, - # and interfaces provided by the standard library. + # + # Default: [anon, error, empty, stdlib] allow: - anon - error - empty - stdlib - - github.com\/asdine\/storm\/q\.Matcher + - generic # You can specify idiomatic endings for interface #- (or|er)$ - # reject-list of interfaces - reject: - #- github.com\/user\/package\/v4\.Type + # 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. @@ -941,46 +726,58 @@ linters-settings: zap: false # Require all logging keys to be inlined constant strings. # Default: false - #require-string-key: true + 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 + #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: 100 + under: 20 makezero: # Allow only slices initialized with a length of zero. # Default: false - #always: true - - maligned: - # Print struct with more effective memory layout or not. - # Default: false - suggest-new: true + 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 - ignore-words: + # Typos to ignore. + # Should be in lower case. + # Default: [] + ignore-words: [] #- 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: + functions: [] # The full name of the function, including the package. #- name: github.com/jmoiron/sqlx.Get # # The struct tag whose presence should be ensured. @@ -991,22 +788,27 @@ linters-settings: nakedret: # Make an issue if func has more lines of code than this setting, and it has naked returns. # Default: 30 - #max-func-lines: 31 + max-func-lines: 30 nestif: # Minimal complexity of if statements to report. # Default: 5 - #min-complexity: 4 + min-complexity: 5 nilnil: - # Checks that there is no simultaneous return of `nil` error and an invalid value. - # Default: ["ptr", "func", "iface", "map", "chan"] - checked-types: - - ptr - - func - - iface - - map - - chan + # In addition, detect opposite situation (simultaneous return of non-nil error and valid value). + # 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") @@ -1017,10 +819,7 @@ linters-settings: nolintlint: # Disable to ensure that all nolint directives actually have an effect. # Default: false - #allow-unused: true - # Disable to ensure that nolint directives don't have a leading space. - # Default: true - allow-leading-space: false + allow-unused: false # Exclude following linters from requiring an explanation. # Default: [] allow-no-explanation: [ ] @@ -1034,16 +833,33 @@ linters-settings: nonamedreturns: # Report named error if it is assigned inside defer. # Default: false - #report-error-in-defer: true + report-error-in-defer: true paralleltest: # Ignore missing calls to `t.Parallel()` and only report incorrect uses of it. # Default: false - #ignore-missing: true + 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: true + ignore-missing-subtests: true + + perfsprint: + # Optimizes even if it requires an int or uint type cast. + # Default: true + int-conversion: 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: true + # Optimizes `fmt.Sprintf` with only one argument. + # Default: true + sprintf1: true + # Optimizes into strings concatenation. + # Default: true + strconcat: true prealloc: # IMPORTANT: we don't recommend using this linter before doing performance profiling. @@ -1051,21 +867,21 @@ linters-settings: # Report pre-allocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. # Default: true - #simple: false + simple: true # Report pre-allocation suggestions on range loops. # Default: true - #range-loops: false + range-loops: true # Report pre-allocation suggestions on for loops. # Default: false - #for-loops: true + for-loops: true predeclared: # Comma-separated list of predeclared identifiers to not report on. # Default: "" - #ignore: "new,int" + ignore: "" # Include method names and field names (i.e., qualified names) in checks. # Default: false - #q: true + q: true promlinter: # Promlinter cannot infer all metrics name in static analysis. @@ -1074,22 +890,50 @@ linters-settings: strict: true # Please refer to https://github.com/yeya24/promlinter#usage for detailed usage. # Default: [] - #disabled-linters: - # - Help - # - MetricUnits - # - Counter - # - HistogramSummaryReserved - # - MetricTypeInName - # - ReservedChars - # - CamelCase - # - UnitAbbreviations + 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: - # - ".*" + patterns: + - ".*" revive: # Maximum number of open files at the same time. @@ -1098,7 +942,7 @@ linters-settings: #max-open-files: 2048 # When set to false, ignores files with "GENERATED" header, similar to golint. - # See https://github.com/mgechev/revive#available-rules for details. + # See https://github.com/mgechev/revive#configuration for details. # Default: false ignore-generated-header: true @@ -1121,68 +965,87 @@ linters-settings: - name: add-constant severity: warning disabled: false + exclude: [""] arguments: - maxLitCount: "3" allowStrs: '""' - allowInts: "0,1,2,0o600,0o700,10,64" + allowInts: "0,1,2,0o600,0o700" allowFloats: "0.0,0.,1.0,1.,2.0,2." # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#argument-limit - name: argument-limit severity: warning disabled: false - arguments: [ 3 ] + exclude: [""] + arguments: [ 4 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#atomic - name: atomic severity: error disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#banned-characters - name: banned-characters severity: warning disabled: false - arguments: [ "Ω","Σ","σ" ] + exclude: [""] + arguments: [] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bare-return - name: bare-return severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#blank-imports - name: blank-imports severity: error disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bool-literal-in-expr - name: bool-literal-in-expr severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#call-to-gc - name: call-to-gc severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#cognitive-complexity - name: cognitive-complexity - severity: error + severity: warning disabled: false + exclude: [""] arguments: [ 7 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#comment-spacings - name: comment-spacings severity: warning disabled: false + exclude: [""] arguments: - nolint #- otherpragma + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#comments-density + - name: comments-density + severity: warning + disabled: true + exclude: [""] + arguments: [ 15 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#confusing-naming - name: confusing-naming severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#confusing-results - name: confusing-results severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#constant-logical-expr - name: constant-logical-expr - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-as-argument - name: context-as-argument - severity: info + severity: warning disabled: false arguments: - allowTypesBefore: "*testing.T" @@ -1190,146 +1053,214 @@ linters-settings: - name: context-keys-type severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#cyclomatic - name: cyclomatic severity: warning disabled: false + exclude: [""] arguments: [ 15 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#datarace - name: datarace severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#deep-exit - name: deep-exit severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#defer - name: defer severity: error disabled: false + exclude: [""] arguments: - [ "call-chain", "loop" ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#dot-imports - name: dot-imports severity: warning disabled: false + exclude: [""] + arguments: [ ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#duplicated-imports - name: duplicated-imports severity: error disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#early-return - name: early-return - severity: info + severity: warning disabled: false + exclude: [""] arguments: - "preserveScope" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-block - name: empty-block severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-lines - name: empty-lines - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#enforce-map-style - name: enforce-map-style severity: warning disabled: false + exclude: [""] + arguments: + - "make" + # https://github.com/mgechev/revive/blob/master/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/master/RULES_DESCRIPTIONS.md#enforce-slice-style + - name: enforce-slice-style + severity: warning + disabled: false + exclude: [""] arguments: - "make" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-naming - name: error-naming severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-return - name: error-return severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-strings - name: error-strings severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#errorf - name: errorf severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#exported - name: exported severity: warning disabled: false + exclude: [""] arguments: - #- "preserveScope" - "checkPrivateReceivers" - - "sayRepetitiveInsteadOfStutters" + - "disableStutteringCheck" + - "checkPublicInterface" + - "disableChecksOnFunctions" # https://github.com/mgechev/revive/blob/master/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/master/RULES_DESCRIPTIONS.md#file-length-limit + - name: file-length-limit + severity: warning + disabled: true + exclude: [""] + arguments: + - max: 100 + skipComments: true + skipBlankLines: true + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#filename-format + - name: filename-format + severity: warning + disabled: false + exclude: [""] + arguments: + - "^[_a-z][_a-z0-9]*.go$" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#flag-parameter - name: flag-parameter severity: warning disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#function-result-limit - - name: function-result-limit - severity: warning - disabled: false - arguments: [ 2 ] + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#function-length - name: function-length severity: warning disabled: false + exclude: [""] arguments: [20, 0] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#function-result-limit + - name: function-result-limit + severity: warning + disabled: false + exclude: [""] + arguments: [ 2 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#get-return - name: get-return severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#identical-branches - name: identical-branches severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#if-return - name: if-return - severity: info + severity: warning disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#increment-decrement - - name: increment-decrement - severity: info - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#indent-error-flow - - name: indent-error-flow - severity: info - disabled: false - arguments: - - "preserveScope" + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-alias-naming - name: import-alias-naming severity: warning disabled: false + exclude: [""] arguments: - "^[a-z][a-z0-9]{0,}$" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#imports-blacklist - - name: imports-blacklist - severity: warning - disabled: false - arguments: - - "crypto/md5" - - "crypto/sha1" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-shadowing - name: import-shadowing severity: warning disabled: false + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#imports-blocklist + - name: imports-blocklist + severity: warning + disabled: false + exclude: [""] + arguments: + - "crypto/md5" + - "crypto/sha1" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#increment-decrement + - name: increment-decrement + severity: warning + disabled: false + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#indent-error-flow + - name: indent-error-flow + severity: warning + disabled: false + exclude: [""] + arguments: + - "preserveScope" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#line-length-limit - name: line-length-limit severity: warning disabled: false + exclude: [""] arguments: [ 80 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#max-control-nesting + - name: max-control-nesting + severity: warning + disabled: false + exclude: [""] + arguments: [ 5 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#max-public-structs - name: max-public-structs severity: warning - disabled: false - arguments: [ 5 ] + disabled: true + exclude: [""] + arguments: [ 3 ] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#modifies-parameter - name: modifies-parameter severity: warning @@ -1338,50 +1269,59 @@ linters-settings: - name: modifies-value-receiver severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#nested-structs - name: nested-structs severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#optimize-operands-order - name: optimize-operands-order - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#package-comments - name: package-comments - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range - name: range - severity: info - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-in-closure - - name: range-val-in-closure - severity: error + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-address - name: range-val-address severity: error disabled: false + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-in-closure + - name: range-val-in-closure + severity: error + disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#receiver-naming - name: receiver-naming - severity: info - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#redundant-import-alias - - name: redundant-import-alias severity: warning disabled: false + exclude: [""] + arguments: + - maxLength: 2 # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#redefines-builtin-id - name: redefines-builtin-id severity: error disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#string-of-int - - name: string-of-int - severity: error + exclude: [""] + # https://github.com/mgechev/revive/blob/master/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#string-format - name: string-format severity: warning disabled: false + exclude: [""] arguments: - - 'core.WriteError[1].Message' - '/^([^A-Z]|$)/' @@ -1392,54 +1332,58 @@ linters-settings: - - panic - '/^[^\n]*$/' - must not contain line breaks + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#string-of-int + - name: string-of-int + severity: error + disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#struct-tag - name: struct-tag + severity: warning + disabled: false + exclude: [""] arguments: - "json,inline" - "bson,outline,gnu" - severity: warning - disabled: false # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#superfluous-else - name: superfluous-else - severity: info + severity: warning disabled: false + exclude: [""] arguments: - "preserveScope" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#time-equal - name: time-equal severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#time-naming - name: time-naming severity: warning disabled: false - - name: use-any - severity: info - disabled: true - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-naming - - name: var-naming + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unchecked-type-assertion + - name: unchecked-type-assertion severity: warning disabled: false + exclude: [""] arguments: - - [ "ID" ] # AllowList - - [ "VM" ] # DenyList - - - upperCaseConst: true - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-declaration - - name: var-declaration - severity: info - disabled: false + - acceptIgnoredAssertionResult: true # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unconditional-recursion - name: unconditional-recursion severity: error disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-naming - name: unexported-naming severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-return - name: unexported-return severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unhandled-error - name: unhandled-error severity: warning @@ -1449,32 +1393,57 @@ linters-settings: - "myFunction" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unnecessary-stmt - name: unnecessary-stmt - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unreachable-code - name: unreachable-code - severity: info + severity: warning disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter - name: unused-parameter - severity: info + severity: warning disabled: false + exclude: [""] arguments: - allowRegex: "^_" # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-receiver - name: unused-receiver - severity: info + severity: warning disabled: false + exclude: [""] arguments: - allowRegex: "^_" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#use-any + - name: use-any + severity: warning + disabled: false + exclude: [""] # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#useless-break - name: useless-break severity: warning disabled: false + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-declaration + - name: var-declaration + severity: warning + disabled: false + exclude: [""] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-naming + - name: var-naming + severity: warning + disabled: false + exclude: [""] + arguments: + - [ "ID" ] # AllowList + - [ "VM" ] # DenyList + - - upperCaseConst: true # Extra parameter (upperCaseConst|skipPackageNameChecks) # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#waitgroup-by-value - name: waitgroup-by-value severity: error disabled: false + exclude: [""] rowserrcheck: # database/sql is always checked @@ -1483,38 +1452,107 @@ linters-settings: - github.com/jmoiron/sqlx sloglint: - # Enforce using key-value pairs only (incompatible with attr-only). + # 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: true - # Enforce using attributes only (incompatible with kv-only). + 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: true + 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 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 + no-raw-keys: true + # Enforce a single 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: true + 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: - # SAxxxx checks in https://staticcheck.io/docs/configuration/options/#checks + # SAxxxx checks in https://staticcheck.dev/docs/configuration/options/#checks + # Example (to disable some checks): [ "all", "-SA1000", "-SA1001"] # Default: ["*"] - #checks: [ "all" ] + checks: [ "*" ] stylecheck: - # STxxxx checks in https://staticcheck.io/docs/configuration/options/#checks - # Default: ["*"] - #checks: [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ] - # https://staticcheck.io/docs/configuration/options/#dot_import_whitelist + # 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.io/docs/configuration/options/#initialisms + - 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.io/docs/configuration/options/#http_status_code_whitelist + # https://staticcheck.dev/docs/configuration/options/#http_status_code_whitelist # Default: ["200", "400", "404", "500"] http-status-code-whitelist: [] + # STxxxx checks in https://staticcheck.dev/docs/configuration/options/#checks + # Example (to disable some checks): [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ] + # Default: ["*"] + checks: ["*", "-ST1000"] + tagliatelle: # Check the struct tag name case. @@ -1527,9 +1565,10 @@ linters-settings: rules: # Any struct tag type can be used. # Support string case: `camel`, `pascal`, `kebab`, `snake`, `upperSnake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`, `header` - json: camel - yaml: camel - xml: camel + json: goCamel + yaml: goCamel + xml: goCamel + toml: goSnake bson: camel avro: snake mapstructure: kebab @@ -1543,88 +1582,163 @@ linters-settings: all: false testifylint: - # Enable all checkers. + # Enable all checkers (https://github.com/Antonboom/testifylint#checkers). # Default: false enable-all: true - # Enable specific checkers. - # https://github.com/Antonboom/testifylint#checkers - # Default: ["bool-compare", "compares", "empty", "error-is-as", "error-nil", "expected-actual", "float-compare", "len", "require-error", "suite-dont-use-pkg", "suite-extra-assert-call"] - enable: + # Disable checkers by name + # (in addition to default + # suite-thelper + # ). + disable: [] + #- blank-import #- bool-compare #- compares + #- contains #- empty + #- encoded-compare #- 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-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, 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, useless-assert + # ). + enable: [] + #- blank-import + #- bool-compare + #- compares + #- contains + #- empty + #- encoded-compare + #- 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-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: ^expected + 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 + 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 + 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: false + first: true # Check *testing.T param has name t. # Default: true - #name: false + name: true # Check t.Helper() begins helper function. # Default: true - #begin: false + begin: true benchmark: # Check *testing.B is first param (or after context.Context) of helper function. # Default: true - #first: false + first: true # Check *testing.B param has name b. # Default: true - #name: false + name: true # Check b.Helper() begins helper function. # Default: true - #begin: false + begin: true tb: # Check *testing.TB is first param (or after context.Context) of helper function. # Default: true - #first: false + first: true # Check *testing.TB param has name tb. # Default: true - #name: false + name: true # Check tb.Helper() begins helper function. # Default: true - #begin: false + begin: true fuzz: # Check *testing.F is first param (or after context.Context) of helper function. # Default: true - #first: false + first: true # Check *testing.F param has name f. # Default: true - #name: false + name: true # Check f.Helper() begins helper function. # Default: true - #begin: false + begin: true usestdlibvars: # Suggest the use of http.MethodXX. # Default: true - #http-method: false + http-method: true # Suggest the use of http.StatusXX. # Default: true - #http-status-code: false + http-status-code: true # Suggest the use of time.Weekday.String(). # Default: true time-weekday: true @@ -1650,28 +1764,44 @@ linters-settings: # Default: false constant-kind: true + unconvert: + # Remove conversions that force intermediate rounding. + # Default: false + fast-math: true + # Be more conservative (experimental). + # Default: false + safe: true + + 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: false + 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 identifiers as used. - # Default: true - #exported-is-used: false + post-statements-are-reads: true # Mark all exported fields as used. # default: true - #exported-fields-are-used: false + exported-fields-are-used: true # Mark all function parameters as used. # default: true - #parameters-are-used: false + 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: false + generated-is-used: true varnamelen: # The longest distance, in source lines, that is being considered a "small scope". @@ -1704,11 +1834,13 @@ linters-settings: # Default: [] ignore-names: - err - # added because ignore-decls seemsto be ignored - - tx - # Optional list of variable declarations that should be ignored completely. (defaults to empty list) - # Entries must be in the form of " " or " *" for - # variables, or "const " for constants. + # 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 @@ -1717,26 +1849,26 @@ linters-settings: - c convey.C - i int - T any - - ds *Datastore - - db storm.Node + - op string whitespace: # Enforces newlines (or comments) after every multi-line if statement. # Default: false - multi-if: true + multi-if: false # Enforces newlines (or comments) after every multi-line function signature. # Default: false - multi-func: true + multi-func: false wrapcheck: # 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(", ".Wrap(", ".Wrapf(", ".WithMessage(", ".WithMessagef(", ".WithStack("] + # Default: [".Errorf(", "errors.New(", "errors.Unwrap(", "errors.Join(", ".Wrap(", ".Wrapf(", ".WithMessage(", ".WithMessagef(", ".WithStack("] #ignoreSigs: # - .Errorf( # - errors.New( # - errors.Unwrap( + # - errors.Join( # - .Wrap( # - .Wrapf( # - .WithMessage( @@ -1744,152 +1876,114 @@ linters-settings: # - .WithStack( # An array of strings that specify regular expressions of signatures to ignore. # Default: [] - ignoreSigRegexps: + ignoreSigRegexps: [] #- \.New.*Error\( # An array of strings that specify globs of packages to ignore. # Default: [] - ignorePackageGlobs: + ignorePackageGlobs: [] #- encoding/* #- github.com/pkg/* # An array of strings that specify regular expressions of interfaces to ignore. # Default: [] - ignoreInterfaceRegexps: + ignoreInterfaceRegexps: [] #- ^(?i)c(?-i)ach(ing|e) wsl: - # See https://github.com/bombsimon/wsl/blob/master/doc/configuration.md for documentation of available settings. - # These are the defaults for `golangci-lint`. - - # 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 + # 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/master/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/master/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/master/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/master/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/master/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/master/doc/configuration.md#allow-trailing-comment + # Default: false allow-trailing-comment: false # Allow multiple comments in the beginning of a block separated with newline. - allow-separated-leading-comment: false + # https://github.com/bombsimon/wsl/blob/master/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/master/doc/configuration.md#allow-cuddle-declarations + # Default: false allow-cuddle-declarations: false # A list of call idents that everything can be cuddled with. - # Defaults to calls looking like locks. + # 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 to assignments or calls looking - # like unlocks. + # to be cuddled with anything. + # Defaults: [ "Unlock", "RUnlock" ] allow-cuddle-with-rhs: [ "Unlock", "RUnlock" ] # 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/master/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/master/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 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 - - -linters: - # Disable all linters. - # Default: false - #disable-all: true - # Enable specific linter - # https://golangci-lint.run/usage/linters/#enabled-by-default - #enable: - # - asasalint - - # Enable all available linters. - # Default: false - enable-all: true - # Disable specific linter - # https://golangci-lint.run/usage/linters/#disabled-by-default - disable: - - cyclop # Done by revive - - depguard # gomodguard is better - - deadcode # Deprecated - - execinquery # Deprecated - - exhaustivestruct - - exhaustruct - - funlen # Done by revive - - gocognit # Done by revive - - goconst # Done by revive - - gocyclo # Done by revive - - goheader - - golint # Deprecated - - gomnd # revive also does it - - grouper # # not very useful - - ifshort # Deprecated - - interfacer # Deprecated - - lll # Done by revive with better messages - - maligned # Deprecated - - mnd # revive also does it - - nosnakecase # Deprecated - - prealloc - - scopelint # Deprecated - - structcheck # Deprecated - - tagalign # Too much noise - - unparam # alsodone by revive - - varcheck # also done by unused and deadcode - - whitespace # conflicts with revive and wsl - - # Enable presets. - # https://golangci-lint.run/usage/linters - #presets: - # - bugs - # - comment - # - complexity - # - error - # - format - # - import - # - metalinter - # - module - # - performance - # - sql - # - style - # - test - # - unused - - # Run only fast linters from enabled linters set (first run won't be fast) - # Default: false - #fast: true + 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 issues: @@ -1899,7 +1993,7 @@ issues: # it can be disabled by `exclude-use-default: false`. # To list all excluded by default patterns execute `golangci-lint run --help` # - # Default: [] + # Default: https://golangci-lint.run/usage/false-positives/#default-exclusions exclude: - abcdef @@ -1911,21 +2005,29 @@ issues: - cyclop - dupl - errcheck + - forcetypeassert - funlen - goconst - gocognit - gocyclo - goerr113 - gosec - - maintidx - varnamelen + # Exclude some linters from running on tests files. - path: _test\.go - linters: [ revive ] - text: "cognitive-complexity|line-length-limit" + linters: + - revive + text: "(comments-density|line-length-limit|unchecked-type-assertion|cognitive-complexity)" + + # 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 current OS file path separator to properly work on Windows. - path: internal/hmac/ text: "weak cryptographic primitive" linters: @@ -1936,25 +2038,62 @@ issues: # - staticcheck # text: "SA9003:" - # Exclude `lll` issues for long lines with `go:generate`. - linters: - - lll - source: "^//go:generate " + - revive + text: "(line-length-limit)" + source: "(//revive:disable|//nolint:)" # Independently of option `exclude` we use default exclude patterns, # it can be disabled by this option. # To list all excluded by default patterns execute `golangci-lint run --help`. - # Default: true. + # Default: true exclude-use-default: false - # If set to true exclude and exclude-rules regular expressions become case-sensitive. + # If set to true, `exclude` and `exclude-rules` regular expressions become case-sensitive. # Default: false exclude-case-sensitive: false + # Which dirs to exclude: issues from them won't be reported. + # Can use regexp here: `generated.*`, regexp is applied on full path, + # including the path prefix if one is set. + # Default dirs are skipped independently of this option's value (see exclude-dirs-use-default). + # "/" will be replaced by current OS file path separator to properly work on Windows. + # Default: [] + exclude-dirs: + - src/external_libs + - autogenerated_by_my_lib + + # Enables exclude of directories: + # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + # Default: true + exclude-dirs-use-default: false + + # Which files to exclude: they will be analyzed, but issues from them won't be reported. + # There is no need to include all autogenerated files, + # we confidently recognize autogenerated files. + # If it's not, please let us know. + # "/" will be replaced by current OS file path separator to properly work on Windows. + # Default: [] + exclude-files: + - ".*\\.my\\.go$" + - lib/bad.go + + # Mode of the generated files analysis. + # + # - `strict`: sources are excluded by following strictly 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 `autogenerated file`, `code generated`, `do not edit`, etc. + # - `disable`: disable the generated files exclusion. + # + # Default: lax + exclude-generated: lax + # The list of ids of default excludes to include or disable. # https://golangci-lint.run/usage/false-positives/#default-exclusions # Default: [] - include: + include: [] #- EXC0002 # disable excluding of issues about comments from golint. # Maximum issues count per one linter. @@ -1967,6 +2106,10 @@ issues: # 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. @@ -1974,18 +2117,149 @@ issues: # much better don't allow issues in new code. # # Default: false. - #new: true + new: false # 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: + # - `colored-line-number` + # - `line-number` + # - `json` + # - `colored-tab` + # - `tab` + # - `html` + # - `checkstyle` + # - `code-climate` + # - `junit-xml` + # - `junit-xml-extended` + # - `github-actions` + # - `teamcity` + # - `sarif` + # Output path can be either `stdout`, `stderr` or path to the file to write to. + # + # For the CLI flag (`--out-format`), multiple formats can be specified by separating them by comma. + # The output can be specified for each of them by separating format name and path by colon symbol. + # Example: "--out-format=checkstyle:report.xml,json:stdout,colored-line-number" + # The CLI flag (`--out-format`) override the configuration file. + # + # Default: + # formats: + # - format: colored-line-number + # path: stdout + formats: + - format: colored-line-number + path: stdout + + # Print lines of code with issue. + # Default: true + print-issued-lines: true + + # Print linter name in the end of issue text. + # Default: true + print-linter-name: true + + # Add a prefix to the output file references. + # Default: "" + path-prefix: "" + + # Sort results by the order defined in `sort-order`. + # Default: false + sort-results: true + + # Order to use when sorting results. + # Require `sort-results` to `true`. + # 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: ["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 analysis, e.g. 30s, 5m. + # Default: 1m + timeout: 5m + + # 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. + # Mainly related to generics support since go1.18. + # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.17 + #go: '1.19' + + # Number of operating system threads (`GOMAXPROCS`) that can execute golangci-lint simultaneously. + # If it is explicitly set to 0 (i.e. not the default) then golangci-lint will automatically set the value to match Linux container CPU quota. + # Default: the number of logical CPUs in the machine + #concurrency: 4 + + severity: # Set the default severity for issues. # @@ -1993,12 +2267,14 @@ severity: # this will be the default severity applied. # Severities should match the supported severity names of the selected out format. # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity - # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity + # - 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 # - # Default value is an empty string. - default-severity: warning + # `@linter` can be used as severity value to keep the severity from linters (e.g. revive, gosec, ...) + # + # Default: "" + default-severity: "@linter" # If set to true `severity-rules` regular expressions become case-sensitive. # Default: false @@ -2007,6 +2283,9 @@ severity: # 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: [] @@ -2014,3 +2293,6 @@ severity: - linters: - dupl severity: info + - linters: + - gosec + severity: error diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c17dd9..f472421 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ - Add support for TOML configuration files - Use stdlib for tests instead of convey -- Update golangci-lint config +- Update golangci-lint configuration ## v0.2.0 (2021-12-19) diff --git a/adapters.go b/adapters.go index 363c1bd..5e156b3 100644 --- a/adapters.go +++ b/adapters.go @@ -16,6 +16,7 @@ const ( typeTOML ) +// getType returns the type of the config file. func getType(filename string) filetype { switch { case strings.HasSuffix(filename, ".json"): @@ -27,7 +28,8 @@ func getType(filename string) filetype { } } -func unmarshal(ft filetype, data []byte, v interface{}) error { +// unmarshal unmarshals the given data to the given struct. +func unmarshal(ft filetype, data []byte, v any) error { switch ft { case typeJSON: return unmarshalJSON(data, v) @@ -38,7 +40,8 @@ func unmarshal(ft filetype, data []byte, v interface{}) error { } } -func marshal(ft filetype, v interface{}) ([]byte, error) { +// marshal marshals the given struct to bytes. +func marshal(ft filetype, v any) ([]byte, error) { switch ft { case typeJSON: return marshalJSON(v) @@ -49,7 +52,8 @@ func marshal(ft filetype, v interface{}) ([]byte, error) { } } -func unmarshalJSON(data []byte, v interface{}) error { +// unmarshalJSON unmarshals the given data to the given struct. +func unmarshalJSON(data []byte, v any) error { err := json.Unmarshal(data, v) if err != nil { return fmt.Errorf("cannot parse config file: %w", err) @@ -58,7 +62,8 @@ func unmarshalJSON(data []byte, v interface{}) error { return nil } -func marshalJSON(v interface{}) ([]byte, error) { +// marshalJSON marshals the given struct to bytes. +func marshalJSON(v any) ([]byte, error) { data, err := json.MarshalIndent(v, "", " ") if err != nil { return nil, fmt.Errorf("cannot generate config content: %w", err) @@ -67,7 +72,8 @@ func marshalJSON(v interface{}) ([]byte, error) { return data, nil } -func unmarshalTOML(data []byte, v interface{}) error { +// unmarshalTOML unmarshals the given data to the given struct. +func unmarshalTOML(data []byte, v any) error { err := toml.Unmarshal(data, v) if err != nil { return fmt.Errorf("cannot parse config file: %w", err) @@ -76,7 +82,8 @@ func unmarshalTOML(data []byte, v interface{}) error { return nil } -func marshalTOML(v interface{}) ([]byte, error) { +// marshalTOML marshals the given struct to bytes. +func marshalTOML(v any) ([]byte, error) { data, err := toml.Marshal(v) if err != nil { return nil, fmt.Errorf("cannot generate config content: %w", err) diff --git a/config.go b/config.go index 0a4fbbe..933598b 100644 --- a/config.go +++ b/config.go @@ -22,7 +22,7 @@ var ErrUnsupportedFileType = errors.New("unsupported config type") // LoadFile reads the file at path, parses its json content and fills the struct // with the content of the file. -func LoadFile(path string, data interface{}) error { +func LoadFile(path string, data any) error { return read(path, data) } @@ -32,7 +32,7 @@ func LoadFile(path string, data interface{}) error { // // It returns an error only if the content of a file is invalid, i.e. it // cannot be unmarshaled to the struct. -func LoadFiles(data interface{}, paths ...string) error { +func LoadFiles(data any, paths ...string) error { for _, p := range paths { err := read(p, data) if err != nil && !errors.Is(err, os.ErrNotExist) { @@ -44,21 +44,21 @@ func LoadFiles(data interface{}, paths ...string) error { } // SaveFile writes the given data serialized in JSON in the given path. -func SaveFile(path string, data interface{}) error { +func SaveFile(path string, data any) error { return write(path, data) } // LoadAndUpdateFile reads the config fileat path and // updates it, meaning that it adds new options, removes // old ones, and update it by calling the Update method of -// data if it implements the interface Updater. +// data if it implements the interface [Updater]. // // If no file is found at path, it is created and // initialized with the default values. // // An error is returned only if the config file cannot be // written. -func LoadAndUpdateFile(path string, data interface{}) error { +func LoadAndUpdateFile(path string, data any) error { if _, err := os.Stat(path); !os.IsNotExist(err) { err2 := read(path, data) if err2 != nil { @@ -75,14 +75,15 @@ func LoadAndUpdateFile(path string, data interface{}) error { // Updater is the interface that can be implemented by // config structs. If it is implemented, Update() is -// called by LoadAndUpdateFile(). It allows one to modify +// called by [LoadAndUpdateFile]. It allows one to modify // the data and persist those changes, for example to // change default values. type Updater interface { + // Update is called by LoadAndUpdateFile Update() } -func read(path string, data interface{}) error { +func read(path string, data any) error { content, err := os.ReadFile(filepath.Clean(path)) if err != nil { return fmt.Errorf("cannot read config file: %w", err) @@ -91,7 +92,7 @@ func read(path string, data interface{}) error { return unmarshal(getType(path), content, data) } -func write(path string, data interface{}) error { +func write(path string, data any) error { content, err := marshal(getType(path), data) if err != nil { return err diff --git a/config_test.go b/config_test.go index 6ea067a..ca425d2 100644 --- a/config_test.go +++ b/config_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "code.bcarlin.xyz/go/conf" + "code.bcarlin.net/go/conf" ) func TestJSONFiles(t *testing.T) {