Skip to content

Instantly share code, notes, and snippets.

@podhmo
Created July 24, 2024 06:46
Show Gist options
  • Save podhmo/34a294f3d8bd49200d907f8d68f411ed to your computer and use it in GitHub Desktop.
Save podhmo/34a294f3d8bd49200d907f8d68f411ed to your computer and use it in GitHub Desktop.
staticcheckのchecks一覧
code description
S1000 Use plain channel send or receive instead of single-case select
S1001 Replace for loop with call to copy
S1002 Omit comparison with boolean constant
S1003 Replace call to strings.Index with strings.Contains
S1004 Replace call to bytes.Compare with bytes.Equal
S1005 Drop unnecessary use of the blank identifier
S1006 Use 'for { ... }' for infinite loops
S1007 Simplify regular expression by using raw string literal
S1008 Simplify returning boolean expression
S1009 Omit redundant nil check on slices
S1010 Omit default slice index
S1011 Use a single append to concatenate two slices
S1012 Replace time.Now().Sub(x) with time.Since(x)
S1016 Use a type conversion instead of manually copying struct fields
S1017 Replace manual trimming with strings.TrimPrefix
S1018 Use 'copy' for sliding elements
S1019 Simplify 'make' call by omitting redundant arguments
S1020 Omit redundant nil check in type assertion
S1021 Merge variable declaration and assignment
S1023 Omit redundant control flow
S1024 Replace x.Sub(time.Now()) with time.Until(x)
S1025 Don't use fmt.Sprintf("%s", x) unnecessarily
S1028 Simplify error construction with fmt.Errorf
S1029 Range over the string directly
S1030 Use bytes.Buffer.String or bytes.Buffer.Bytes
S1031 Omit redundant nil check around loop
S1032 Use sort.Ints(x), sort.Float64s(x), and sort.Strings(x)
S1033 Unnecessary guard around call to 'delete'
S1034 Use result of type assertion to simplify cases
S1035 Redundant call to net/http.CanonicalHeaderKey in method call on net/http.Header
S1036 Unnecessary guard around map access
S1037 Elaborate way of sleeping
S1038 Unnecessarily complex way of printing formatted string
S1039 Unnecessary use of fmt.Sprint
S1040 Type assertion to current type
SA1000 Invalid regular expression
SA1001 Invalid template
SA1002 Invalid format in time.Parse
SA1003 Unsupported argument to functions in encoding/binary
SA1004 Suspiciously small untyped constant in time.Sleep
SA1005 Invalid first argument to exec.Command
SA1006 Printf with dynamic first argument and no further arguments
SA1007 Invalid URL in net/url.Parse
SA1008 Non-canonical key in http.Header map
SA1010 (*regexp.Regexp).FindAll called with n == 0, which will always return zero results
SA1011 Various methods in the 'strings' package expect valid UTF-8, but invalid input is provided
SA1012 A nil context.Context is being passed to a function, consider using context.TODO instead
SA1013 io.Seeker.Seek is being called with the whence constant as the first argument, but it should be the second
SA1014 Non-pointer value passed to Unmarshal or Decode
SA1015 Using time.Tick in a way that will leak. Consider using time.NewTicker, and only use time.Tick in tests, commands and endless functions
SA1016 Trapping a signal that cannot be trapped
SA1017 Channels used with os/signal.Notify should be buffered
SA1018 strings.Replace called with n == 0, which does nothing
SA1019 Using a deprecated function, variable, constant or field
SA1020 Using an invalid host:port pair with a net.Listen-related function
SA1021 Using bytes.Equal to compare two net.IP
SA1023 Modifying the buffer in an io.Writer implementation
SA1024 A string cutset contains duplicate characters
SA1025 It is not possible to use (*time.Timer).Reset's return value correctly
SA1026 Cannot marshal channels or functions
SA1027 Atomic access to 64-bit variable must be 64-bit aligned
SA1028 sort.Slice can only be used on slices
SA1029 Inappropriate key in call to context.WithValue
SA1030 Invalid argument in call to a strconv function
SA2000 sync.WaitGroup.Add called inside the goroutine, leading to a race condition
SA2001 Empty critical section, did you mean to defer the unlock?
SA2002 Called testing.T.FailNow or SkipNow in a goroutine, which isn't allowed
SA2003 Deferred Lock right after locking, likely meant to defer Unlock instead
SA3000 TestMain doesn't call os.Exit, hiding test failures
SA3001 Assigning to b.N in benchmarks distorts the results
SA4000 Binary operator has identical expressions on both sides
SA4001 &*x gets simplified to x, it does not copy x
SA4003 Comparing unsigned values against negative values is pointless
SA4004 The loop exits unconditionally after one iteration
SA4005 Field assignment that will never be observed. Did you mean to use a pointer receiver?
SA4006 A value assigned to a variable is never read before being overwritten. Forgotten error check or dead code?
SA4008 The variable in the loop condition never changes, are you incrementing the wrong variable?
SA4009 A function argument is overwritten before its first use
SA4010 The result of append will never be observed anywhere
SA4011 Break statement with no effect. Did you mean to break out of an outer loop?
SA4012 Comparing a value against NaN even though no value is equal to NaN
SA4013 Negating a boolean twice (!!b) is the same as writing b. This is either redundant, or a typo.
SA4014 An if/else if chain has repeated conditions and no side-effects; if the condition didn't match the first time, it won't match the second time, either
SA4015 Calling functions like math.Ceil on floats converted from integers doesn't do anything useful
SA4016 Certain bitwise operations, such as x ^ 0, do not do anything useful
SA4017 Discarding the return values of a function without side effects, making the call pointless
SA4018 Self-assignment of variables
SA4019 Multiple, identical build constraints in the same file
SA4020 Unreachable case clause in a type switch
SA4021 'x = append(y)' is equivalent to 'x = y'
SA4022 Comparing the address of a variable against nil
SA4023 Impossible comparison of interface value with untyped nil
SA4024 Checking for impossible return value from a builtin function
SA4025 Integer division of literals that results in zero
SA4026 Go constants cannot express negative zero
SA4027 (*net/url.URL).Query returns a copy, modifying it doesn't change the URL
SA4028 x % 1 is always zero
SA4029 Ineffective attempt at sorting slice
SA4030 Ineffective attempt at generating random number
SA4031 Checking never-nil value against nil
SA5000 Assignment to nil map
SA5001 Deferring Close before checking for a possible error
SA5002 The empty for loop ('for {}') spins and can block the scheduler
SA5003 Defers in infinite loops will never execute
SA5004 'for { select { ...' with an empty default branch spins
SA5005 The finalizer references the finalized object, preventing garbage collection
SA5007 Infinite recursive call
SA5008 Invalid struct tag
SA5009 Invalid Printf call
SA5010 Impossible type assertion
SA5011 Possible nil pointer dereference
SA5012 Passing odd-sized slice to function expecting even size
SA6000 Using regexp.Match or related in a loop, should use regexp.Compile
SA6001 Missing an optimization opportunity when indexing maps by byte slices
SA6002 Storing non-pointer values in sync.Pool allocates memory
SA6003 Converting a string to a slice of runes before ranging over it
SA6005 Inefficient string comparison with strings.ToLower or strings.ToUpper
SA9001 Defers in range loops may not run when you expect them to
SA9002 Using a non-octal os.FileMode that looks like it was meant to be in octal.
SA9003 Empty body in an if or else branch
SA9004 Only the first constant has an explicit type
SA9005 Trying to marshal a struct with no public fields nor custom marshaling
SA9006 Dubious bit shifting of a fixed size integer value
SA9007 Deleting a directory that shouldn't be deleted
SA9008 else branch of a type assertion is probably not reading the right value
ST1000 Incorrect or missing package comment
ST1001 Dot imports are discouraged
ST1003 Poorly chosen identifier
ST1005 Incorrectly formatted error string
ST1006 Poorly chosen receiver name
ST1008 A function's error value should be its last return value
ST1011 Poorly chosen name for variable of type time.Duration
ST1012 Poorly chosen name for error variable
ST1013 Should use constants for HTTP error codes, not magic numbers
ST1015 A switch's default case should be the first or last case
ST1016 Use consistent method receiver names
ST1017 Don't use Yoda conditions
ST1018 Avoid zero-width and control characters in string literals
ST1019 Importing the same package multiple times
ST1020 The documentation of an exported function should start with the function's name
ST1021 The documentation of an exported type should start with type's name
ST1022 The documentation of an exported variable or constant should start with variable's name
ST1023 Redundant type in variable declaration
U1000 Unused code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment