From 1d4690fce18f3471452fc0f4bbb8b1e5361cb2b3 Mon Sep 17 00:00:00 2001 From: Bruno Carlin Date: Sat, 4 May 2024 22:01:57 +0200 Subject: [PATCH] chore: update golangci-lint conf --- .golangci.yml | 2194 +++++++++++++++++++++++++++++++++++++----------- config_test.go | 43 +- 2 files changed, 1726 insertions(+), 511 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 0075818..42c7640 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,46 +1,57 @@ -# options for analysis running +# 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: - # default concurrency is a available CPU number - concurrency: 4 + # The default concurrency value is the number of available CPU. + #concurrency: 4 - # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 1m + # Timeout for analysis, e.g. 30s, 5m. + # Default: 1m + #timeout: 5m - # exit code when at least one issue was found, default is 1 - issues-exit-code: 1 + # Exit code when at least one issue was found. + # Default: 1 + #issues-exit-code: 2 - # include test files or not, default is true - tests: true + # Include test files or not. + # Default: true + #tests: false - # list of build tags, all linters use it. Default is empty list. + # 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; - # default value is empty list, but default dirs are skipped independently - # from this option's value (see skip-dirs-use-default). - # "/" will be replaced by current OS file path separator to properly work - # on Windows. + # 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 - # default is true. Enables skipping of directories: - # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - skip-dirs-use-default: true + # 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. + # Which files to skip: they will be analyzed, but issues from them won't be reported. + # Default value is empty list, + # but there is no need to include all autogenerated files, + # we confidently recognize autogenerated files. + # If it's not please let us know. + # "/" will be replaced by current OS file path separator to properly work on Windows. #skip-files: # - ".*\\.my\\.go$" # - lib/bad.go - # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": + # If 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 @@ -48,170 +59,321 @@ run: # If invoked with -mod=vendor, the go command assumes that the vendor # directory holds the correct copies of dependencies and ignores # the dependency descriptions in go.mod. - #modules-download-mode: readonly|vendor|mod + # + # 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 + #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: - # colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions - # default is "colored-line-number" - #format: colored-line-number + # 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 is true - print-issued-lines: true + # Print lines of code with issue. + # Default: true + #print-issued-lines: false - # print linter name in the end of issue text, default is true - print-linter-name: true + # Print linter name in the end of issue text. + # Default: true + #print-linter-name: false - # make issues output unique by line, default is true - #uniq-by-line: true + # 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: "" + # Add a prefix to the output file references. + # Default is no prefix. + #path-prefix: "" - # sorts results by: filepath, line and column + # Sort results by: filepath, line and column. sort-results: true -# all available settings of specific linters +# All available settings of specific linters. linters-settings: + asasalint: + # To specify a set of function names to exclude. + # The values are merged with the builtin exclusions. + # The builtin exclusions can be disabled by setting `use-builtin-exclusions` to `false`. + # Default: ["^(fmt|log|logger|t|)\.(Print|Fprint|Sprint|Fatal|Panic|Error|Warn|Warning|Info|Debug|Log)(|f|ln)$"] + #exclude: + # - Append + # - \.Wrapf + # 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 + # Ignore *_test.go files. + # Default: false + #ignore-test: true - cyclop: - # the maximal code complexity to report - max-complexity: 20 - # the maximal average package complexity. If it's higher than 0.0 (float) the check is enabled (default 0.0) - package-average: 0.0 - # should ignore tests (default false) - skip-tests: true + bidichk: + # 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 dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 + # Checks assignments with too many blank identifiers. + # Default: 2 + #max-blank-identifiers: 3 dupl: - # tokens count to trigger issue, 150 by default + # Tokens count to trigger issue. + # Default: 150 threshold: 100 + dupword: + # Keywords for detecting duplicate words. + # If this list is not empty, only the words defined in this list will be detected. + # Default: [] + #keywords: + # - "the" + # - "and" + # - "a" + # Keywords used to ignore detection. + # Default: [] + #ignore: + # - "0C0C" + errcheck: - # report about not checking of errors in type assertions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. + # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. + # Such cases aren't reported by default. + # Default: false check-type-assertions: true - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. + # Such cases aren't reported by default. + # Default: false check-blank: true - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - ignore: fmt:.*,io/ioutil:^Read.* + # To disable the errcheck built-in exclude list. + # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details. + # Default: false + #disable-default-exclusions: true - # [deprecated] use exclude-functions instead. - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - #exclude: /path/to/file.txt - - # list of functions to exclude from checking, where each entry is a single function to exclude. - # see https://github.com/kisielk/errcheck#excluding-functions for details + # 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) + errchkjson: + # With check-error-free-encoding set to true, errchkjson does warn about errors + # from json encoding functions that are safe to be ignored, + # because they are not possible to happen. + # + # if check-error-free-encoding is set to true and errcheck linter is enabled, + # it is recommended to add the following exceptions to prevent from false positives: + # + # linters-settings: + # errcheck: + # exclude-functions: + # - encoding/json.Marshal + # - encoding/json.MarshalIndent + # + # Default: false + check-error-free-encoding: false + + # Issue on struct encoding that doesn't have exported fields. + # Default: false + report-no-exported: true + errorlint: - # Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveats - errorf: true - # Check for plain type assertions and type switches - asserts: true - # Check for plain error comparisons - comparison: true + # 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 + # Permit more than 1 %w verb, valid per Go 1.20 (Requires errorf:true) + # Default: true + #errorf-multi: false + # Check for plain type assertions and type switches. + # Default: true + #asserts: false + # Check for plain error comparisons. + # Default: true + #comparison: false exhaustive: - # check switch statements in generated files also - check-generated: false - # indicates that switch statements are to be considered exhaustive if a - # 'default' case is present, even if all enum members aren't listed in the - # switch + # Program elements to check for exhaustiveness. + # Default: [ switch ] + #check: + # - switch + # - map + # Check switch statements in generated files also. + # Default: false + #check-generated: true + # Presence of "default" case in switch statements satisfies exhaustiveness, + # even if all enum members are not listed. + # Default: false default-signifies-exhaustive: true - - #exhaustivestruct: - # # Struct Patterns is list of expressions to match struct packages and names - # # The struct packages have the form example.com/package.ExampleStruct - # # The matching patterns can use matching syntax from https://pkg.go.dev/path#Match - # # If this list is empty, all structs are tested. - # struct-patterns: - # - '*.Test' - # - 'example.com/package.ExampleStruct' + # Enum members matching the supplied regex do not have to be listed in + # switch statements to satisfy exhaustiveness. + # Default: "" + #ignore-enum-members: "Example.+" + # Enum types matching the supplied regex do not have to be listed in + # switch statements to satisfy exhaustiveness. + # Default: "" + #ignore-enum-types: "Example.+" + # Consider enums only in package scopes, not in inner scopes. + # Default: false + #package-scope-only: true + # Only run exhaustive check on switches with "//exhaustive:enforce" comment. + # Default: false + #explicit-exhaustive-switch: true + # Only run exhaustive check on map literals with "//exhaustive:enforce" comment. + # Default: false + #explicit-exhaustive-map: true forbidigo: - # Forbid the following identifiers (identifiers are written using regexp): - forbid: - - ^print.*$ - - 'fmt\.Print.*' - # Exclude godoc examples from forbidigo checks. Default is true. - exclude_godoc_examples: true - - funlen: - lines: 60 - statements: 40 + # 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$ + # Exclude godoc examples from forbidigo checks. + # Default: true + #exclude_godoc_examples: false + # 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 gci: - # put imports beginning with prefix after 3rd-party packages; - # only support one prefix - # if not set, use goimports.local-prefixes + # DEPRECATED: use `sections` and `prefix(github.com/org/project)` instead. #local-prefixes: github.com/org/project - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 30 + # 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`, + # 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. + - 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. - nestif: - # minimal complexity of if statements to report, 5 by default - min-complexity: 8 + # Skip generated files. + # Default: true + skip-generated: false + + # Enable custom order of sections. + # If `true`, make the section order the same as the order of `sections`. + # Default: false + custom-order: true - goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimum occurrences of constant string count to trigger issue, 3 by default - min-occurrences: 3 - # ignore test files, false by default - ignore-tests: false - # look for existing constants matching the values, true by default - match-constant: true - # search also for duplicated numbers, false by default - numbers: false - # minimum value, only works with goconst.numbers, 3 by default - min: 3 - # maximum value, only works with goconst.numbers, 3 by default - max: 3 - # ignore when constant is not used as function argument, true by default - ignore-calls: true 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. + # Which checks should be enabled; can't be combined with 'disabled-checks'. + # See https://go-critic.github.io/overview#checks-overview. + # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`. + # By default, list of stable checks is used. #enabled-checks: - # - rangeValCopy + # - nestingReduce + # - unnamedResult + # - ruleguard + # - truncateCmp - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty + # 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. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". + # See https://github.com/go-critic/go-critic#usage -> section "Tags". + # Default: [] enabled-tags: - diagnostic - - opinionated - - performance - style - disabled-tags: + - performance - experimental + - opinionated + #disabled-tags: + # - diagnostic + # - style + # - performance + # - experimental + # - opinionated # Settings passed to gocritic. # The settings key is the name of a supported gocritic checker. @@ -221,81 +383,153 @@ linters-settings: # whether to restrict checker to params only (default true) paramsOnly: true elseif: - # whether to skip balanced if-else pairs (default true) - skipBalanced: true + # Whether to skip balanced if-else pairs. + # Default: true + #skipBalanced: false hugeParam: - # size in bytes that makes the warning trigger (default 80) - sizeThreshold: 80 - #nestingReduce: - # # min number of statements inside a branch to trigger a warning (default 5) - # bodyWidth: 5 + # Size in bytes that makes the warning trigger. + # Default: 80 + #sizeThreshold: 70 + nestingReduce: + # Min number of statements inside a branch to trigger a warning. + # Default: 5 + #bodyWidth: 4 rangeExprCopy: - # size in bytes that makes the warning trigger (default 512) - sizeThreshold: 512 - # whether to check test functions (default true) - skipTestFuncs: true + # Size in bytes that makes the warning trigger. + # Default: 512 + #sizeThreshold: 516 + # Whether to check test functions + # Default: true + #skipTestFuncs: false rangeValCopy: - # size in bytes that makes the warning trigger (default 128) - sizeThreshold: 128 - # whether to check test functions (default true) - skipTestFuncs: true - # ruleguard: - # # path to a gorules file for the ruleguard checker - # rules: '' - # truncateCmp: - # # whether to skip int/uint/uintptr types (default true) - # skipArchDependent: true + # Size in bytes that makes the warning trigger. + # Default: 128 + #sizeThreshold: 32 + # 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" + tooManyResultsChecker: + # Maximum number of results. + # Default: 5 + #maxResults: 10 + truncateCmp: + # Whether to skip int/uint/uintptr types. + # Default: true + skipArchDependent: false underef: - # whether to skip (*x).method() calls where x is a pointer receiver (default true) - skipRecvDeref: true - #unnamedResult: - # # whether to check exported functions - # checkExported: true - - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 20 + # Whether to skip (*x).method() calls where x is a pointer receiver. + # Default: true + #skipRecvDeref: false + unnamedResult: + # Whether to check exported functions. + # Default: false + checkExported: true godot: - # comments to be checked: `declarations`, `toplevel`, or `all` - scope: all - # list of regexps for excluding particular comment lines from check + # Comments to be checked: `declarations`, `toplevel`, or `all`. + # Default: declarations + #scope: toplevel + # List of regexps for excluding particular comment lines from check. + # Default: [] exclude: - # example: exclude comments which contain numbers - # - '[0-9]+' - # check that each sentence starts with a capital letter - capital: true + # Exclude todo and fixme comments. + - "^fixme:|^FIXME:" + - "^todo:|^TODO:" + # Check that each sentence ends with a period. + # Default: true + #period: false + # Check that each sentence starts with a capital letter. + # Default: false + #capital: true godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting + # 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. + keywords: - NOTE - OPTIMIZE # marks code that should be optimized before merging - - HACK # marks hack-arounds that should be removed before merging + - HACK # marks hack-around that should be removed before merging gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true + # Simplify code: gofmt with `-s` option. + # Default: true + #simplify: false + # Apply the rewrite rules to the source before reformatting. + # https://pkg.go.dev/cmd/gofmt + # Default: [] + rewrite-rules: + #- pattern: 'interface{}' + # replacement: 'any' + - pattern: 'a[b:len(a)]' + replacement: 'a[b:]' gofumpt: - # Select the Go version to target. The default is `1.15`. - #lang-version: "1.15" + # Module path which contains the source code being formatted. + # Default: "" + module-path: code.bcarlin.xyz/go/conf - # Choose whether or not to use the extra rules that are disabled - # by default - extra-rules: false + # 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 + # 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 - template: # |- - # put here copyright header template for source code files, for example: + # 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 }} @@ -312,390 +546,1359 @@ linters-settings: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - template-path: - # also as alternative of directive 'template' you may put the path to file with the template source + # 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: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes + # 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 - golint: - # minimal confidence for issues, default is 0.8 - min-confidence: 0.8 - - mnd: - # the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description. - checks: argument,case,condition,operation,return,assign - # for files perm: 384=0o600 - ignored-numbers: 0o600,384,0o700,0o744 - # test files are ignored by default - # ignored-files: - # ignored-functions: math.* - gomoddirectives: - # Allow local `replace` directives. Default is false. - replace-local: false - # List of allowed `replace` directives. Default is empty. - replace-allow-list: - - launchpad.net/gocheck - # Allow to not explain why the version has been retracted in the `retract` directives. Default is false. - retract-allow-no-explanation: false - # Forbid the use of the `exclude` directives. Default is false. - exclude-forbidden: false + # Allow local `replace` directives. + # Default: false + #replace-local: false + # List of allowed `replace` directives. + # Default: [] + #replace-allow-list: + # - launchpad.net/gocheck + # Allow to not explain why the version has been retracted in the `retract` directives. + # Default: false + #retract-allow-no-explanation: false + # Forbid the use of the `exclude` directives. + # Default: false + #exclude-forbidden: false gomodguard: allowed: + # List of allowed modules. + # Default: [] modules: # List of allowed modules + - github.com/stretchr/testify # - gopkg.in/yaml.v2 - domains: # List of allowed module domains - # - golang.org + # List of allowed module domains. + # Default: [] + domains: + - golang.org + - code.bcarlin.xyz + - code.waarp.fr blocked: - modules: # List of blocked modules - # - github.com/uudashr/go-module: # Blocked module - # recommendations: # Recommended modules that should be used instead (Optional) - # - golang.org/x/mod - # reason: "`mod` is the official go.mod parser library." # Reason why the recommended module should be used (Optional) - versions: # List of blocked module version constraints - # - github.com/mitchellh/go-homedir: # Blocked module with version constraint - # version: "< 1.1.0" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons - # reason: "testing if blocked version constraint works." # Reason why the version constraint exists. (Optional) - local_replace_directives: false # Set to true to raise lint issues for packages that are loaded from a local path via replace directive + # List of blocked modules. + # Default: [] + modules: + # Blocked module. + #- github.com/uudashr/go-module: + # # Recommended modules that should be used instead. (Optional) + # recommendations: + # - golang.org/x/mod + # # Reason why the recommended module should be used. (Optional) + # reason: "`mod` is the official go.mod parser library." + # List of blocked module version constraints. + # Default: [] + versions: + # Blocked module with version constraint. + - github.com/mitchellh/go-homedir: + # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons. + version: "< 1.1.0" + # Reason why the version constraint exists. (Optional) + reason: "testing if blocked version constraint works." + # Set to true to raise lint issues for packages that are loaded from a local path via replace directive. + # Default: false + #local_replace_directives: false + + 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 - #includes: - # - G401 - # - G306 - # - G101 + # 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 + # To specify a set of rules to explicitly exclude. # Available rules: https://github.com/securego/gosec#available-rules #excludes: - # - G204 - # To specify the configuration of rules. - # The configuration of rules is not fully documented by gosec: - # https://github.com/securego/gosec#configuration - # https://github.com/securego/gosec/blob/569328eade2ccbad4ce2d0f21ee158ab5356a5cf/rules/rulelist.go#L60-L102 - #config: - # G306: "0600" - # G101: - # pattern: "(?i)example" - # ignore_entropy: false - # entropy_threshold: "80.0" - # per_char_threshold: "3.0" - # truncate: "32" + # - G101 - gosimple: - # Select the Go version to target. The default is '1.13'. - #go: "1.15" - # https://staticcheck.io/docs/options#checks - checks: [ "all" ] + # Exclude generated files + # Default: false + exclude-generated: true + + # Filter out the issues with a lower severity than the given value. + # Valid options are: low, medium, high. + # Default: low + #severity: medium + + # Filter out the issues with a lower confidence than the given value. + # Valid options are: low, medium, high. + # Default: low + #confidence: medium + + # Concurrency value. + # Default: the number of logical CPUs usable by the current process. + #concurrency: 12 + + # To specify the configuration of rules. + config: + # Globals are applicable to all rules. + global: + # If true, ignore #nosec in comments (and an alternative as well). + # Default: false + nosec: true + # 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 + # 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" + # If true, complain about all cases (even with low entropy). + # Default: false + ignore_entropy: true + # Maximum allowed entropy of the string. + # Default: "80.0" + entropy_threshold: "80.0" + # Maximum allowed value of entropy/string length. + # Is taken into account if entropy >= entropy_threshold/2. + # Default: "3.0" + per_char_threshold: "3.0" + # Calculate entropy for first N chars of the string. + # Default: "16" + truncate: "32" + # Additional functions to ignore while checking unhandled errors. + # Following functions always ignored: + # bytes.Buffer: + # - Write + # - WriteByte + # - WriteRune + # - WriteString + # fmt: + # - Print + # - Printf + # - Println + # - Fprint + # - Fprintf + # - Fprintln + # strings.Builder: + # - Write + # - WriteByte + # - WriteRune + # - WriteString + # io.PipeWriter: + # - CloseWithError + # hash.Hash: + # - Write + # os: + # - Unsetenv + # Default: {} + G104: + fmt: + - Fscanf + G111: + # Regexp pattern to find potential directory traversal. + # Default: "http\\.Dir\\(\"\\/\"\\)|http\\.Dir\\('\\/'\\)" + #pattern: "custom\\.Dir\\(\\)" + # Maximum allowed permissions mode for os.Mkdir and os.MkdirAll + # Default: "0750" + G301: "0750" + # Maximum allowed permissions mode for os.OpenFile and os.Chmod + # Default: "0600" + G302: "0600" + # Maximum allowed permissions mode for os.WriteFile and ioutil.WriteFile + # Default: "0600" + G306: "0600" + + gosmopolitan: + # Allow and ignore `time.Local` usages. + # + # Default: false + #allow-time-local: true + # 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' + # Ignore test files. + # + # Default: true + #ignore-tests: false + # List of Unicode scripts to watch for any usage in string literals. + # https://pkg.go.dev/unicode#pkg-variables + # + # Default: ["Han"] + #watch-for-scripts: + # - Devanagari + # - Han + # - Hangul + # - Hiragana + # - Katakana govet: - # settings per analyzer - #settings: - # printf: # analyzer name, run `go tool vet help` to see all analyzers - # funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + # Settings per analyzer. + settings: + # Analyzer name, run `go tool vet help` to see all analyzers. + printf: + # Comma-separated list of print function names to check (in addition to default, see `go tool vet help printf`). + # Default: [] + funcs: + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + shadow: + # Whether to be strict about shadowing; can be noisy. + # Default: false + strict: true + unusedresult: + # Comma-separated list of functions whose results must be used + # (in addition to default: + # context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue, errors.New, fmt.Errorf, + # fmt.Sprint, fmt.Sprintf, sort.Reverse + # ). + # Default: [] + funcs: + #- pkg.MyFunc + # Comma-separated list of names of methods of type func() string whose results must be used + # (in addition to default Error,String) + # Default: [] + stringmethods: + #- MyMethod - # enable or disable analyzers by name - # run `go tool vet help` to see all analyzers + # 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: - # - atomicalign - enable-all: false - #disable: - # - shadow - #disable-all: false + # - asmdecl - depguard: - list-type: blacklist - include-go-root: false - packages: - - github.com/sirupsen/logrus - packages-with-error-message: - # specify an error message to output when a blacklisted package is used - - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" + # 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 - ifshort: - # Maximum length of variable declaration measured in number of lines, after which linter won't suggest using short syntax. - # Has higher priority than max-decl-chars. - #max-decl-lines: 1 - # Maximum length of variable declaration measured in number of characters, after which linter won't suggest using short syntax. - #max-decl-chars: 30 + grouper: + # Require the use of a single global 'const' declaration only. + # Default: false + const-require-single-const: true + # Require the use of grouped global 'const' declarations. + # Default: false + const-require-grouping: false + + # Require the use of a single 'import' declaration only. + # Default: false + import-require-single-import: true + # Require the use of grouped 'import' declarations. + # Default: false + import-require-grouping: true + + # Require the use of a single global 'type' declaration only. + # Default: false + #type-require-single-type: true + # Require the use of grouped global 'type' declarations. + # Default: false + #type-require-grouping: true + + # Require the use of a single global 'var' declaration only. + # Default: false + var-require-single-var: true + # Require the use of grouped global 'var' declarations. + # Default: false + var-require-grouping: true importas: - # if set to `true`, force to use alias. - no-unaliased: false + # Do not allow unaliased imports of aliased packages. + # Default: false + #no-unaliased: true + # Do not allow non-required aliases. + # Default: false + no-extra-aliases: true # List of aliases + # Default: [] alias: - # using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package + # Using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package. #- pkg: knative.dev/serving/pkg/apis/serving/v1 # alias: servingv1 - # using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package + # Using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package. #- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1 # alias: autoscalingv1alpha1 # You can specify the package path by regular expression, # and alias by regular expression expansion syntax like below. # see https://github.com/julz/importas#use-regular-expression for details - #- pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+) - # alias: $1$2 - # + - pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+) + alias: $1$2 + + 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: + # - `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. allow: + - anon - error - empty - stdlib - # Reject patterns - reject: + - github.com\/asdine\/storm\/q\.Matcher + # You can specify idiomatic endings for interface + #- (or|er)$ - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 120 - # tab width in spaces. Default to 1. - tab-width: 1 + # reject-list of interfaces + reject: + #- github.com\/user\/package\/v4\.Type + + loggercheck: + # Allow check for the github.com/go-kit/log library. + # Default: true + kitlog: false + # Allow check for the k8s.io/klog/v2 library. + # Default: true + klog: false + # Allow check for the github.com/go-logr/logr library. + # Default: true + logr: false + # Allow check for the "sugar logger" from go.uber.org/zap library. + # Default: true + zap: false + # Require all logging keys to be inlined constant strings. + # Default: false + #require-string-key: true + # Require printf-like format specifier (%s, %d for example) not present. + # Default: false + #no-printf-like: true + # List of custom rules to check against, where each rule is a single logger pattern, useful for wrapped loggers. + # For example: https://github.com/timonwong/loggercheck/blob/7395ab86595781e33f7afba27ad7b55e6956ebcd/testdata/custom-rules.txt + # Default: empty + rules: + #- k8s.io/klog/v2.InfoS # package level exported functions + #- (github.com/go-logr/logr.Logger).Error # "Methods" + #- (*go.uber.org/zap.SugaredLogger).With # Also "Methods", but with a pointer receiver + + maintidx: + # Show functions with maintainability index lower than N. + # A high index indicates better maintainability (it's kind of the opposite of complexity). + # Default: 20 + #under: 100 makezero: - # Allow only slices initialized with a length of zero. Default is false. - always: false + # Allow only slices initialized with a length of zero. + # Default: false + #always: true maligned: - # print struct with more effective memory layout or not, false by default + # Print struct with more effective memory layout or not. + # Default: false suggest-new: true misspell: # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. # Setting locale to US will correct the British spelling of 'colour' to 'color'. + # Default is to use a neutral variety of English. locale: US ignore-words: - - someword + #- someword + + musttag: + # A set of custom functions to check in addition to the builtin ones. + # Default: json, xml, gopkg.in/yaml.v3, BurntSushi/toml, mitchellh/mapstructure, jmoiron/sqlx + functions: + # The full name of the function, including the package. + #- name: github.com/jmoiron/sqlx.Get + # # The struct tag whose presence should be ensured. + # tag: db + # # The position of the argument to check. + # arg-pos: 1 nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 30 + # Make an issue if func has more lines of code than this setting, and it has naked returns. + # Default: 30 + #max-func-lines: 31 + + nestif: + # Minimal complexity of if statements to report. + # Default: 5 + #min-complexity: 4 + + 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 + + nlreturn: + # Size of the block (including return statement that is still "OK") + # so no return split required. + # Default: 1 + block-size: 2 + + nolintlint: + # Disable to ensure that all nolint directives actually have an effect. + # Default: false + #allow-unused: true + # Disable to ensure that nolint directives don't have a leading space. + # Default: true + allow-leading-space: false + # Exclude following linters from requiring an explanation. + # Default: [] + allow-no-explanation: [ ] + # Enable to require an explanation of nonzero length after each nolint directive. + # Default: false + require-explanation: true + # Enable to require nolint directives to mention the specific linter being suppressed. + # Default: false + require-specific: true + + nonamedreturns: + # Report named error if it is assigned inside defer. + # Default: false + #report-error-in-defer: true + + paralleltest: + # Ignore missing calls to `t.Parallel()` and only report incorrect uses of it. + # Default: false + #ignore-missing: true + # 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 prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. + # IMPORTANT: we don't recommend using this linter before doing performance profiling. # For most programs usage of prealloc will be a premature optimization. - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default + # Report pre-allocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. + # Default: true + #simple: false + # Report pre-allocation suggestions on range loops. + # Default: true + #range-loops: false + # Report pre-allocation suggestions on for loops. + # Default: false + #for-loops: true + + predeclared: + # Comma-separated list of predeclared identifiers to not report on. + # Default: "" + #ignore: "new,int" + # Include method names and field names (i.e., qualified names) in checks. + # Default: false + #q: true promlinter: # Promlinter cannot infer all metrics name in static analysis. # Enable strict mode will also include the errors caused by failing to parse the args. - strict: false + # Default: false + strict: true # Please refer to https://github.com/yeya24/promlinter#usage for detailed usage. - disabled-linters: - # - "Help" - # - "MetricUnits" - # - "Counter" - # - "HistogramSummaryReserved" - # - "MetricTypeInName" - # - "ReservedChars" - # - "CamelCase" - # - "lintUnitAbbreviations" + # Default: [] + #disabled-linters: + # - Help + # - MetricUnits + # - Counter + # - HistogramSummaryReserved + # - MetricTypeInName + # - ReservedChars + # - CamelCase + # - UnitAbbreviations - predeclared: - # comma-separated list of predeclared identifiers to not report on - ignore: "" - # include method names and field names (i.e., qualified names) in checks - q: false - - nolintlint: - # Enable to ensure that nolint directives are all used. Default is true. - allow-unused: true - # Disable to ensure that nolint directives don't have a leading space. Default is true. - allow-leading-space: no - # Exclude following linters from requiring an explanation. Default is []. - allow-no-explanation: [] - # Enable to require an explanation of nonzero length after each nolint directive. Default is false. - require-explanation: true - # Enable to require nolint directives to mention the specific linter being suppressed. Default is false. - require-specific: true - - rowserrcheck: - #packages: - # - github.com/jmoiron/sqlx + reassign: + # Patterns for global variable names that are checked for reassignment. + # See https://github.com/curioswitch/go-reassign#usage + # Default: ["EOF", "Err.*"] + #patterns: + # - ".*" revive: - # see https://github.com/mgechev/revive#available-rules for details. + # Maximum number of open files at the same time. + # See https://github.com/mgechev/revive#command-line-flags + # Defaults to unlimited. + #max-open-files: 2048 + + # When set to false, ignores files with "GENERATED" header, similar to golint. + # See https://github.com/mgechev/revive#available-rules for details. + # Default: false ignore-generated-header: true - severity: warning - #rules: - # - name: indent-error-flow - # severity: warning - # - name: add-constant - # severity: warning - # arguments: - # - maxLitCount: "3" - # allowStrs: '""' - # allowInts: "0,1,2" - # allowFloats: "0.0,0.,1.0,1.,2.0,2." + + # Sets the default severity. + # See https://github.com/mgechev/revive#configuration + # Default: warning + #severity: error + + # Enable all available rules. + # Default: false + enable-all-rules: true + + # Sets the default failure confidence. + # This means that linting errors with less than 0.8 confidence will be ignored. + # Default: 0.8 + #confidence: 0.1 + + rules: + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#add-constant + - name: add-constant + severity: warning + disabled: false + arguments: + - maxLitCount: "3" + allowStrs: '""' + allowInts: "0,1,2,0o600,0o700,10,64" + 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 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#atomic + - name: atomic + severity: error + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#banned-characters + - name: banned-characters + severity: warning + disabled: false + arguments: [ "Ω","Σ","σ" ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bare-return + - name: bare-return + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#blank-imports + - name: blank-imports + severity: error + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bool-literal-in-expr + - name: bool-literal-in-expr + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#call-to-gc + - name: call-to-gc + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#cognitive-complexity + - name: cognitive-complexity + severity: error + disabled: false + arguments: [ 7 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#comment-spacings + - name: comment-spacings + severity: warning + disabled: false + arguments: + - nolint + #- otherpragma + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#confusing-naming + - name: confusing-naming + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#confusing-results + - name: confusing-results + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#constant-logical-expr + - name: constant-logical-expr + severity: info + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-as-argument + - name: context-as-argument + severity: info + disabled: false + arguments: + - allowTypesBefore: "*testing.T" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-keys-type + - name: context-keys-type + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#cyclomatic + - name: cyclomatic + severity: warning + disabled: false + arguments: [ 15 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#datarace + - name: datarace + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#deep-exit + - name: deep-exit + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#defer + - name: defer + severity: error + disabled: false + arguments: + - [ "call-chain", "loop" ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#dot-imports + - name: dot-imports + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#duplicated-imports + - name: duplicated-imports + severity: error + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#early-return + - name: early-return + severity: info + disabled: false + arguments: + - "preserveScope" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-block + - name: empty-block + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-lines + - name: empty-lines + severity: info + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#enforce-map-style + - name: enforce-map-style + severity: warning + disabled: false + arguments: + - "make" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-naming + - name: error-naming + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-return + - name: error-return + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-strings + - name: error-strings + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#errorf + - name: errorf + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#exported + - name: exported + severity: warning + disabled: false + arguments: + #- "preserveScope" + - "checkPrivateReceivers" + - "sayRepetitiveInsteadOfStutters" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#file-header + - name: file-header + severity: warning + disabled: true + arguments: + - This is the text that must appear at the top of source files. + # 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 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#function-length + - name: function-length + severity: warning + disabled: false + arguments: [20, 0] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#get-return + - name: get-return + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#identical-branches + - name: identical-branches + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#if-return + - name: if-return + severity: info + 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" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-alias-naming + - name: import-alias-naming + severity: warning + disabled: false + 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 + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#line-length-limit + - name: line-length-limit + severity: warning + disabled: false + arguments: [ 80 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#max-public-structs + - name: max-public-structs + severity: warning + disabled: false + arguments: [ 5 ] + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#modifies-parameter + - name: modifies-parameter + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#modifies-value-receiver + - name: modifies-value-receiver + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#nested-structs + - name: nested-structs + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#optimize-operands-order + - name: optimize-operands-order + severity: info + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#package-comments + - name: package-comments + severity: info + disabled: false + # 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 + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-address + - name: range-val-address + severity: error + disabled: false + # 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 + # 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 + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#string-format + - name: string-format + severity: warning + disabled: false + arguments: + - - 'core.WriteError[1].Message' + - '/^([^A-Z]|$)/' + - must not start with a capital letter + - - 'fmt.Errorf[0]' + - '/(^|[^\.!?])$/' + - must not end in punctuation + - - panic + - '/^[^\n]*$/' + - must not contain line breaks + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#struct-tag + - name: struct-tag + 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 + disabled: false + arguments: + - "preserveScope" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#time-equal + - name: time-equal + severity: warning + disabled: false + # 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 + severity: warning + disabled: false + 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 + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unconditional-recursion + - name: unconditional-recursion + severity: error + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-naming + - name: unexported-naming + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-return + - name: unexported-return + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unhandled-error + - name: unhandled-error + severity: warning + disabled: false + arguments: + - "fmt.Printf" + - "myFunction" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unnecessary-stmt + - name: unnecessary-stmt + severity: info + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unreachable-code + - name: unreachable-code + severity: info + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter + - name: unused-parameter + severity: info + disabled: false + arguments: + - allowRegex: "^_" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-receiver + - name: unused-receiver + severity: info + disabled: false + arguments: + - allowRegex: "^_" + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#useless-break + - name: useless-break + severity: warning + disabled: false + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#waitgroup-by-value + - name: waitgroup-by-value + severity: error + disabled: false + + rowserrcheck: + # database/sql is always checked + # Default: [] + packages: + - github.com/jmoiron/sqlx + + sloglint: + # Enforce using key-value pairs only (incompatible with attr-only). + # Default: false + kv-only: true + # Enforce using attributes only (incompatible with kv-only). + # Default: false + #attr-only: true + # Enforce using constants instead of raw keys. + # Default: false + #no-raw-keys: true + # Enforce putting arguments on separate lines. + # Default: false + #args-on-sep-lines: true staticcheck: - # Select the Go version to target. The default is '1.13'. - #go: "1.15" - # https://staticcheck.io/docs/options#checks - checks: [ "all" ] + # SAxxxx checks in https://staticcheck.io/docs/configuration/options/#checks + # Default: ["*"] + #checks: [ "all" ] stylecheck: - # Select the Go version to target. The default is '1.13'. - #go: "1.15" - # https://staticcheck.io/docs/options#checks + # STxxxx checks in https://staticcheck.io/docs/configuration/options/#checks + # Default: ["*"] #checks: [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ] - checks: [ "all" ] - # https://staticcheck.io/docs/options#dot_import_whitelist + # https://staticcheck.io/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/options#initialisms - initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "PEM", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS" ] - # https://staticcheck.io/docs/options#http_status_code_whitelist - http-status-code-whitelist: [ "200", "400", "404", "500" ] + #- fmt + # https://staticcheck.io/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 + # Default: ["200", "400", "404", "500"] + http-status-code-whitelist: [] tagliatelle: - # check the struck tag name case + # Check the struct tag name case. case: - # use the struct field name to check the name of the struct tag + # Use the struct field name to check the name of the struct tag. + # Default: false use-field-name: true + # `camel` is used for `json` and `yaml`, and `header` is used for `header` (can be overridden) + # Default: {} rules: - # any struct tag type can be used. - # support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower` + # 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 bson: camel avro: snake mapstructure: kebab + env: upperSnake + envconfig: upperSnake + + tenv: + # The option `all` will run against whole test files (`_test.go`) regardless of method/function signatures. + # Otherwise, only methods that take `*testing.T`, `*testing.B`, and `testing.TB` as arguments are checked. + # Default: false + all: false + + testifylint: + # Enable all 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: + #- bool-compare + #- compares + #- empty + #- error-is-as + #- error-nil + #- expected-actual + #- float-compare + #- len + #- require-error + #- suite-dont-use-pkg + #- suite-extra-assert-call + #- suite-thelper + expected-actual: + # Regexp for expected variable name. + # Default: (^(exp(ected)?|want(ed)?)([A-Z]\w*)?$)|(^(\w*[a-z])?(Exp(ected)?|Want(ed)?)$) + #pattern: ^expected + suite-extra-assert-call: + # To require or remove extra Assert() call? + # Default: remove + #mode: require testpackage: - # regexp pattern to skip files + # Regexp pattern to skip files. + # Default: "(export|internal)_test\\.go" skip-regexp: (export|internal)_test\.go thelper: - # The following configurations enable all checks. It can be omitted because all checks are enabled by default. - # You can enable only required checks deleting unnecessary checks. test: - first: true - name: true - begin: true + # Check *testing.T is first param (or after context.Context) of helper function. + # Default: true + #first: false + # Check *testing.T param has name t. + # Default: true + #name: false + # Check t.Helper() begins helper function. + # Default: true + #begin: false benchmark: - first: true - name: true - begin: true + # Check *testing.B is first param (or after context.Context) of helper function. + # Default: true + #first: false + # Check *testing.B param has name b. + # Default: true + #name: false + # Check b.Helper() begins helper function. + # Default: true + #begin: false tb: - first: true - name: true - begin: true + # Check *testing.TB is first param (or after context.Context) of helper function. + # Default: true + #first: false + # Check *testing.TB param has name tb. + # Default: true + #name: false + # Check tb.Helper() begins helper function. + # Default: true + #begin: false + fuzz: + # Check *testing.F is first param (or after context.Context) of helper function. + # Default: true + #first: false + # Check *testing.F param has name f. + # Default: true + #name: false + # Check f.Helper() begins helper function. + # Default: true + #begin: false - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false + usestdlibvars: + # Suggest the use of http.MethodXX. + # Default: true + #http-method: false + # Suggest the use of http.StatusXX. + # Default: true + #http-status-code: false + # Suggest the use of time.Weekday.String(). + # Default: true + time-weekday: true + # Suggest the use of time.Month.String(). + # Default: false + time-month: true + # Suggest the use of time.Layout. + # Default: false + time-layout: true + # Suggest the use of crypto.Hash.String(). + # Default: false + crypto-hash: true + # Suggest the use of rpc.DefaultXXPath. + # Default: false + default-rpc-path: true + # Suggest the use of sql.LevelXX.String(). + # Default: false + sql-isolation-level: true + # Suggest the use of tls.SignatureScheme.String(). + # Default: false + tls-signature-scheme: true + # Suggest the use of constant.Kind.String(). + # Default: false + constant-kind: true unused: - # Select the Go version to target. The default is '1.13'. - #go: "1.15" + # Mark all struct fields that have been written to as used. + # Default: true + #field-writes-are-uses: false + # 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 + # Mark all exported fields as used. + # default: true + #exported-fields-are-used: false + # Mark all function parameters as used. + # default: true + #parameters-are-used: false + # 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 varnamelen: - # The longest distance, in source lines, that is being considered a "small scope." (defaults to 5) + # The longest distance, in source lines, that is being considered a "small scope". # Variables used in at most this many lines will be ignored. + # Default: 5 max-distance: 15 - # The minimum length of a variable's name that is considered "long." (defaults to 3) + # The minimum length of a variable's name that is considered "long". # Variable names that are at least this long will be ignored. - min-name-length: 3 - # Check method receiver names. (defaults to false) - check-receiver: false - # Check named return values. (defaults to false) - check-return: false - # Optional list of variable names that should be ignored completely. (defaults to empty list) + # Default: 3 + #min-name-length: 2 + # Check method receivers. + # Default: false + #check-receiver: true + # Check named return values. + # Default: false + check-return: true + # Check type parameters. + # Default: false + check-type-param: true + # Ignore "ok" variables that hold the bool return value of a type assertion. + # Default: false + ignore-type-assert-ok: true + # Ignore "ok" variables that hold the bool return value of a map index. + # Default: false + ignore-map-index-ok: true + # Ignore "ok" variables that hold the bool return value of a channel receive. + # Default: false + ignore-chan-recv-ok: true + # Optional list of variable names that should be ignored completely. + # Default: [] ignore-names: - err - - db + # added because ignore-decls seemsto be ignored - tx - - c - - wg - - r - - w + # 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. + ignore-decls: + - t *testing.T + - w http.ResponseWriter + - r *http.Request + - r io.Reader + - c convey.C + - i int + - T any + - ds *Datastore + - db storm.Node whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature + # Enforces newlines (or comments) after every multi-line if statement. + # Default: false + multi-if: true + # Enforces newlines (or comments) after every multi-line function signature. + # Default: false + multi-func: true 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. - ignoreSigs: - - .Errorf( - - errors.New( - - errors.Unwrap( - - .Wrap( - - .Wrapf( - - .WithMessage( + # Default: [".Errorf(", "errors.New(", "errors.Unwrap(", ".Wrap(", ".Wrapf(", ".WithMessage(", ".WithMessagef(", ".WithStack("] + #ignoreSigs: + # - .Errorf( + # - errors.New( + # - errors.Unwrap( + # - .Wrap( + # - .Wrapf( + # - .WithMessage( + # - .WithMessagef( + # - .WithStack( + # An array of strings that specify regular expressions of signatures to ignore. + # Default: [] + ignoreSigRegexps: + #- \.New.*Error\( + # An array of strings that specify globs of packages to ignore. + # Default: [] + ignorePackageGlobs: + #- encoding/* + #- github.com/pkg/* + # An array of strings that specify regular expressions of interfaces to ignore. + # Default: [] + 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`. - allow-assign-and-anything: false - allow-assign-and-call: true - allow-cuddle-declarations: false - allow-multiline-assign: true - allow-separated-leading-comment: false - allow-trailing-comment: false - force-case-trailing-whitespace: 0 - force-err-cuddling: false - force-short-decl-cuddling: false + # 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 + # assigned, called or used on the line above. 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. + allow-assign-and-call: true + + # Allows assignments to be cuddled with anything. + allow-assign-and-anything: false + + # Allows cuddling to assignments even if they span over multiple lines. + 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. + force-case-trailing-whitespace: 2 + + # Allow blocks to end with comments. + allow-trailing-comment: false + + # Allow multiple comments in the beginning of a block separated with newline. + allow-separated-leading-comment: false + + # Allow multiple var/declaration statements to be cuddled. + allow-cuddle-declarations: false + + # A list of call idents that everything can be cuddled with. + # Defaults to calls looking like locks. + 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. + 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. + 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. + 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. + 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: false - #enable: - # - megacheck - # - govet + # 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: - - depguard - - dogsled - - execinquery # deprecated + - cyclop # Done by revive + - depguard # gomodguard is better + - deadcode # Deprecated + - execinquery # Deprecated - exhaustivestruct - exhaustruct - - godox + - funlen # Done by revive + - gocognit # Done by revive + - goconst # Done by revive + - gocyclo # Done by revive - goheader - - golint - - gomnd # deprecated - - interfacer - - ireturn - - maligned - - nilerr - - paralleltest + - 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 - - testpackage + - 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 - #fast: false + + # Run only fast linters from enabled linters set (first run won't be fast) + # Default: false + #fast: true issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` + # List of regexps of issue texts to exclude. + # + # But independently of this option we use default exclude patterns, + # it can be disabled by `exclude-use-default: false`. + # To list all excluded by default patterns execute `golangci-lint run --help` + # + # Default: [] exclude: - abcdef @@ -704,100 +1907,109 @@ issues: # Exclude some linters from running on tests files. - path: _test\.go linters: + - cyclop - dupl - errcheck - funlen - goconst - gocognit - gocyclo + - goerr113 - gosec + - maintidx - varnamelen + - path: _test\.go + linters: [ revive ] + text: "cognitive-complexity|line-length-limit" + # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via "nolint" comments. + # which is impossible to exclude via `nolint` comments. - path: internal/hmac/ text: "weak cryptographic primitive" linters: - gosec - # Exclude some staticcheck messages - - linters: - - staticcheck - text: "SA9003:" + # Exclude some `staticcheck` messages. + #- linters: + # - staticcheck + # text: "SA9003:" - # Exclude lll issues for long lines with go:generate + # Exclude `lll` issues for long lines with `go:generate`. - linters: - lll source: "^//go:generate " - # dupl can mark code as duplicated when it finds matches in test files. - - linters: - - dupl - text: "_test.go" - - # tagliatelle does not consider mac as a word - - linters: - - tagliatelle - text: "got 'macs' want 'maCs'" - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. + # 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. exclude-use-default: false - # The default value is 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 - # The list of ids of default excludes to include or disable. By default it's empty. - #include: - # - EXC0002 # disable excluding of issues about comments from golint + # The list of ids of default excludes to include or disable. + # https://golangci-lint.run/usage/false-positives/#default-exclusions + # Default: [] + include: + #- EXC0002 # disable excluding of issues about comments from golint. - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + # Maximum issues count per one linter. + # Set to 0 to disable. + # Default: 50 max-issues-per-linter: 0 - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + # Maximum count of issues with the same text. + # Set to 0 to disable. + # Default: 3 max-same-issues: 0 # Show only new issues: if there are unstaged changes or untracked files, # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. - new: false + # It's a super-useful option for integration of golangci-lint into existing large codebase. + # It's not practical to fix all existing issues at the moment of integration: + # much better don't allow issues in new code. + # + # Default: false. + #new: true - # Show only new issues created after git revision `REV` - #new-from-rev: REV + # Show only new issues created after git revision `REV`. + #new-from-rev: HEAD # Show only new issues created in git patch with set file path. #new-from-patch: path/to/patch/file - # Fix found issues (if it's supported by the linter) + # Fix found issues (if it's supported by the linter). fix: false + severity: - # Default value is empty string. - # Set the default severity for issues. If severity rules are defined and the issues - # do not match or no severity is provided to the rule this will be the default - # severity applied. Severities should match the supported severity names of the - # selected out format. + # Set the default severity for issues. + # + # If severity rules are defined and the issues do not match or no severity is provided to the rule + # this will be the default severity applied. + # Severities should match the supported severity names of the selected out format. # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity - # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity - # - Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message - default-severity: error + # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity + # - GitHub: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message + # - TeamCity: https://www.jetbrains.com/help/teamcity/service-messages.html#Inspection+Instance + # + # Default value is an empty string. + default-severity: warning - # The default value is false. - # If set to true severity-rules regular expressions become case sensitive. - case-sensitive: false + # If set to true `severity-rules` regular expressions become case-sensitive. + # Default: false + #case-sensitive: true - # Default value is empty list. - # When a list of severity rules are provided, severity information will be added to lint - # issues. Severity rules have the same filtering capability as exclude rules except you - # are allowed to specify one matcher per severity rule. + # When a list of severity rules are provided, severity information will be added to lint issues. + # Severity rules have the same filtering capability as exclude rules + # except you are allowed to specify one matcher per severity rule. # Only affects out formats that support setting severity information. + # + # Default: [] rules: - linters: - - dupl + - dupl severity: info diff --git a/config_test.go b/config_test.go index e04cb99..4c4c131 100644 --- a/config_test.go +++ b/config_test.go @@ -1,4 +1,4 @@ -package conf +package conf_test import ( "os" @@ -7,6 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "code.bcarlin.xyz/go/conf" ) type testconf struct { @@ -36,7 +38,7 @@ func TestLoadFile(t *testing.T) { file := "test_data/valid.json" - err := LoadFile(file, &c) + err := conf.LoadFile(file, &c) require.NoError(t, err) assert.Equal(t, "config string", c.String) @@ -55,7 +57,7 @@ func TestLoadFile(t *testing.T) { file := "test_data/invalid.json" - err := LoadFile(file, &c) + err := conf.LoadFile(file, &c) require.Error(t, err) assert.Equal(t, "default string", c.String) @@ -74,7 +76,7 @@ func TestLoadFile(t *testing.T) { file := "does-not-exist.conf" - err := LoadFile(file, &c) + err := conf.LoadFile(file, &c) require.Error(t, err) assert.Equal(t, "default string", c.String) @@ -104,7 +106,7 @@ func TestLoadFiles(t *testing.T) { err = os.WriteFile(paths[1], content2, 0o600) require.NoError(t, err) - err = LoadFiles(&c, paths...) + err = conf.LoadFiles(&c, paths...) require.NoError(t, err) assert.Equal(t, "foo", c.String) @@ -129,7 +131,7 @@ func TestLoadFiles(t *testing.T) { err = os.WriteFile(paths[1], content2, 0o600) require.NoError(t, err) - err = LoadFiles(&c, paths...) + err = conf.LoadFiles(&c, paths...) require.NoError(t, err) assert.Equal(t, "bar", c.String) @@ -150,7 +152,7 @@ func TestLoadFiles(t *testing.T) { err := os.WriteFile(paths[1], content2, 0o600) require.NoError(t, err) - err = LoadFiles(&c, paths...) + err = conf.LoadFiles(&c, paths...) require.NoError(t, err) assert.Equal(t, "bar", c.String) @@ -174,7 +176,7 @@ func TestLoadFiles(t *testing.T) { err = os.WriteFile(paths[1], content2, 0o600) require.NoError(t, err) - err = LoadFiles(&c, paths...) + err = conf.LoadFiles(&c, paths...) require.Error(t, err) assert.Equal(t, "", c.String) @@ -195,7 +197,7 @@ func TestSaveFile(t *testing.T) { tmpDir := t.TempDir() file := filepath.Join(tmpDir, "test.conf") - err := SaveFile(file, &c) + err := conf.SaveFile(file, &c) require.NoError(t, err) assert.FileExists(t, file) @@ -212,7 +214,7 @@ func TestSaveFile(t *testing.T) { tmpDir := t.TempDir() file := filepath.Join(tmpDir, "test.conf") - err := SaveFile(file, func() error { return nil }) + err := conf.SaveFile(file, func() error { return nil }) require.Error(t, err) assert.NoFileExists(t, file) @@ -228,7 +230,7 @@ func TestSaveFile(t *testing.T) { } file := "cannot/write/here.conf" - err := SaveFile(file, &c) + err := conf.SaveFile(file, &c) require.Error(t, err) assert.NoFileExists(t, file) @@ -251,11 +253,11 @@ func TestLoadAndUpdateFile(t *testing.T) { tmpDir := t.TempDir() file := filepath.Join(tmpDir, "test.conf") - err := LoadAndUpdateFile(file, &c) + err := conf.LoadAndUpdateFile(file, &c) require.NoError(t, err) var c2 testconf - err = read(file, &c2) + err = conf.LoadFile(file, &c2) require.NoError(t, err) assert.Equal(t, c.String, c2.String) assert.Equal(t, c.Int, c2.Int) @@ -277,7 +279,7 @@ func TestLoadAndUpdateFile(t *testing.T) { tmpDir := t.TempDir() file := filepath.Join(tmpDir, "does-not-exist", "test.conf") - err := LoadAndUpdateFile(file, &c) + err := conf.LoadAndUpdateFile(file, &c) require.Error(t, err) assert.NoFileExists(t, file) @@ -302,7 +304,7 @@ func TestLoadAndUpdateFile(t *testing.T) { err := os.WriteFile(file, content, 0o644) require.NoError(t, err) - err = LoadAndUpdateFile(file, &c) + err = conf.LoadAndUpdateFile(file, &c) require.Error(t, err) assert.False(t, updated) @@ -325,11 +327,11 @@ func TestLoadAndUpdateFile(t *testing.T) { err := os.WriteFile(file, content, 0o644) require.NoError(t, err) - err = LoadAndUpdateFile(file, &c) + err = conf.LoadAndUpdateFile(file, &c) require.NoError(t, err) var c2 testconf - err = read(file, &c2) + err = conf.LoadFile(file, &c2) require.NoError(t, err) assert.Equal(t, "config string", c2.String) assert.Equal(t, 42, c2.Int) @@ -354,12 +356,13 @@ func TestLoadAndUpdateFile(t *testing.T) { err := os.WriteFile(file, content, 0o644) require.NoError(t, err) - err = LoadAndUpdateFile(file, &c) + err = conf.LoadAndUpdateFile(file, &c) require.NoError(t, err) newContent, err := os.ReadFile(file) require.NoError(t, err) - assert.Contains(t, string(newContent), "Int") + + assert.Contains(t, string(newContent), "Int") //nolint:usestdlibvars // not the constant here assert.Contains(t, string(newContent), "Invariant") assert.True(t, updated) @@ -382,7 +385,7 @@ func TestLoadAndUpdateFile(t *testing.T) { err := os.WriteFile(file, content, 0o644) require.NoError(t, err) - err = LoadAndUpdateFile(file, &c) + err = conf.LoadAndUpdateFile(file, &c) require.NoError(t, err) newContent, err := os.ReadFile(file)