| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- // Package stylecheck contains analyzes that enforce style rules.
- // Most of the recommendations made are universally agreed upon by the wider Go community.
- // Some analyzes, however, implement stricter rules that not everyone will agree with.
- // In the context of Staticcheck, these analyzes are not enabled by default.
- //
- // For the most part it is recommended to follow the advice given by the analyzers that are enabled by default,
- // but you may want to disable additional analyzes on a case by case basis.
- package stylecheck
- import "honnef.co/go/tools/analysis/lint"
- var Docs = lint.Markdownify(map[string]*lint.RawDocumentation{
- "ST1000": {
- Title: `Incorrect or missing package comment`,
- Text: `Packages must have a package comment that is formatted according to
- the guidelines laid out in
- https://github.com/golang/go/wiki/CodeReviewComments#package-comments.`,
- Since: "2019.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAny,
- },
- "ST1001": {
- Title: `Dot imports are discouraged`,
- Text: `Dot imports that aren't in external test packages are discouraged.
- The \'dot_import_whitelist\' option can be used to whitelist certain
- imports.
- Quoting Go Code Review Comments:
- > The \'import .\' form can be useful in tests that, due to circular
- > dependencies, cannot be made part of the package being tested:
- >
- > package foo_test
- >
- > import (
- > "bar/testutil" // also imports "foo"
- > . "foo"
- > )
- >
- > In this case, the test file cannot be in package foo because it
- > uses \'bar/testutil\', which imports \'foo\'. So we use the \'import .\'
- > form to let the file pretend to be part of package foo even though
- > it is not. Except for this one case, do not use \'import .\' in your
- > programs. It makes the programs much harder to read because it is
- > unclear whether a name like \'Quux\' is a top-level identifier in the
- > current package or in an imported package.`,
- Since: "2019.1",
- Options: []string{"dot_import_whitelist"},
- MergeIf: lint.MergeIfAny,
- },
- "ST1003": {
- Title: `Poorly chosen identifier`,
- Text: `Identifiers, such as variable and package names, follow certain rules.
- See the following links for details:
- - https://golang.org/doc/effective_go.html#package-names
- - https://golang.org/doc/effective_go.html#mixed-caps
- - https://github.com/golang/go/wiki/CodeReviewComments#initialisms
- - https://github.com/golang/go/wiki/CodeReviewComments#variable-names`,
- Since: "2019.1",
- NonDefault: true,
- Options: []string{"initialisms"},
- MergeIf: lint.MergeIfAny,
- },
- "ST1005": {
- Title: `Incorrectly formatted error string`,
- Text: `Error strings follow a set of guidelines to ensure uniformity and good
- composability.
- Quoting Go Code Review Comments:
- > Error strings should not be capitalized (unless beginning with
- > proper nouns or acronyms) or end with punctuation, since they are
- > usually printed following other context. That is, use
- > \'fmt.Errorf("something bad")\' not \'fmt.Errorf("Something bad")\', so
- > that \'log.Printf("Reading %s: %v", filename, err)\' formats without a
- > spurious capital letter mid-message.`,
- Since: "2019.1",
- MergeIf: lint.MergeIfAny,
- },
- "ST1006": {
- Title: `Poorly chosen receiver name`,
- Text: `Quoting Go Code Review Comments:
- > The name of a method's receiver should be a reflection of its
- > identity; often a one or two letter abbreviation of its type
- > suffices (such as "c" or "cl" for "Client"). Don't use generic
- > names such as "me", "this" or "self", identifiers typical of
- > object-oriented languages that place more emphasis on methods as
- > opposed to functions. The name need not be as descriptive as that
- > of a method argument, as its role is obvious and serves no
- > documentary purpose. It can be very short as it will appear on
- > almost every line of every method of the type; familiarity admits
- > brevity. Be consistent, too: if you call the receiver "c" in one
- > method, don't call it "cl" in another.`,
- Since: "2019.1",
- MergeIf: lint.MergeIfAny,
- },
- "ST1008": {
- Title: `A function's error value should be its last return value`,
- Text: `A function's error value should be its last return value.`,
- Since: `2019.1`,
- MergeIf: lint.MergeIfAny,
- },
- "ST1011": {
- Title: `Poorly chosen name for variable of type \'time.Duration\'`,
- Text: `\'time.Duration\' values represent an amount of time, which is represented
- as a count of nanoseconds. An expression like \'5 * time.Microsecond\'
- yields the value \'5000\'. It is therefore not appropriate to suffix a
- variable of type \'time.Duration\' with any time unit, such as \'Msec\' or
- \'Milli\'.`,
- Since: `2019.1`,
- MergeIf: lint.MergeIfAny,
- },
- "ST1012": {
- Title: `Poorly chosen name for error variable`,
- Text: `Error variables that are part of an API should be called \'errFoo\' or
- \'ErrFoo\'.`,
- Since: "2019.1",
- MergeIf: lint.MergeIfAny,
- },
- "ST1013": {
- Title: `Should use constants for HTTP error codes, not magic numbers`,
- Text: `HTTP has a tremendous number of status codes. While some of those are
- well known (200, 400, 404, 500), most of them are not. The \'net/http\'
- package provides constants for all status codes that are part of the
- various specifications. It is recommended to use these constants
- instead of hard-coding magic numbers, to vastly improve the
- readability of your code.`,
- Since: "2019.1",
- Options: []string{"http_status_code_whitelist"},
- MergeIf: lint.MergeIfAny,
- },
- "ST1015": {
- Title: `A switch's default case should be the first or last case`,
- Since: "2019.1",
- MergeIf: lint.MergeIfAny,
- },
- "ST1016": {
- Title: `Use consistent method receiver names`,
- Since: "2019.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAny,
- },
- "ST1017": {
- Title: `Don't use Yoda conditions`,
- Text: `Yoda conditions are conditions of the kind \"if 42 == x\", where the
- literal is on the left side of the comparison. These are a common
- idiom in languages in which assignment is an expression, to avoid bugs
- of the kind \"if (x = 42)\". In Go, which doesn't allow for this kind of
- bug, we prefer the more idiomatic \"if x == 42\".`,
- Since: "2019.2",
- MergeIf: lint.MergeIfAny,
- },
- "ST1018": {
- Title: `Avoid zero-width and control characters in string literals`,
- Since: "2019.2",
- MergeIf: lint.MergeIfAny,
- },
- "ST1019": {
- Title: `Importing the same package multiple times`,
- Text: `Go allows importing the same package multiple times, as long as
- different import aliases are being used. That is, the following
- bit of code is valid:
- import (
- "fmt"
- fumpt "fmt"
- format "fmt"
- _ "fmt"
- )
- However, this is very rarely done on purpose. Usually, it is a
- sign of code that got refactored, accidentally adding duplicate
- import statements. It is also a rarely known feature, which may
- contribute to confusion.
- Do note that sometimes, this feature may be used
- intentionally (see for example
- https://github.com/golang/go/commit/3409ce39bfd7584523b7a8c150a310cea92d879d)
- – if you want to allow this pattern in your code base, you're
- advised to disable this check.`,
- Since: "2020.1",
- MergeIf: lint.MergeIfAny,
- },
- "ST1020": {
- Title: "The documentation of an exported function should start with the function's name",
- Text: `Doc comments work best as complete sentences, which
- allow a wide variety of automated presentations. The first sentence
- should be a one-sentence summary that starts with the name being
- declared.
- If every doc comment begins with the name of the item it describes,
- you can use the \'doc\' subcommand of the \'go\' tool and run the output
- through grep.
- See https://golang.org/doc/effective_go.html#commentary for more
- information on how to write good documentation.`,
- Since: "2020.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAny,
- },
- "ST1021": {
- Title: "The documentation of an exported type should start with type's name",
- Text: `Doc comments work best as complete sentences, which
- allow a wide variety of automated presentations. The first sentence
- should be a one-sentence summary that starts with the name being
- declared.
- If every doc comment begins with the name of the item it describes,
- you can use the \'doc\' subcommand of the \'go\' tool and run the output
- through grep.
- See https://golang.org/doc/effective_go.html#commentary for more
- information on how to write good documentation.`,
- Since: "2020.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAny,
- },
- "ST1022": {
- Title: "The documentation of an exported variable or constant should start with variable's name",
- Text: `Doc comments work best as complete sentences, which
- allow a wide variety of automated presentations. The first sentence
- should be a one-sentence summary that starts with the name being
- declared.
- If every doc comment begins with the name of the item it describes,
- you can use the \'doc\' subcommand of the \'go\' tool and run the output
- through grep.
- See https://golang.org/doc/effective_go.html#commentary for more
- information on how to write good documentation.`,
- Since: "2020.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAny,
- },
- "ST1023": {
- Title: "Redundant type in variable declaration",
- Since: "2021.1",
- NonDefault: true,
- MergeIf: lint.MergeIfAll,
- },
- })
|