Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools / gopls@v0.5.2 / doc / analyzers.md
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.5.2/doc/analyzers.md b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.5.2/doc/analyzers.md
new file mode 100644 (file)
index 0000000..e56a52f
--- /dev/null
@@ -0,0 +1,491 @@
+# Analyzers
+
+<!--TODO: Generate this file from the documentation in golang/org/x/tools/go/analysis/passes and golang/org/x/tools/go/lsp/source/options.go.-->
+
+This document describes the analyzers that `gopls` uses inside the editor.
+
+A value of `true` means that the analyzer is enabled by default and a value of `false` means it is disabled by default.
+
+Details about how to enable/disable these analyses can be found [here](settings.md#analyses).
+
+## Go vet suite
+
+Below is the list of general analyzers that are used in `go vet`.
+
+### **asmdecl**
+
+report mismatches between assembly files and Go declarations
+
+Default value: `true`.
+
+### **assign**
+
+check for useless assignments
+
+This checker reports assignments of the form `x = x` or `a[i] = a[i]`.
+These are almost always useless, and even when they aren't they are
+usually a mistake.
+
+Default value: `true`.
+
+### **atomic**
+
+check for common mistakes using the sync/atomic package
+
+The atomic checker looks for assignment statements of the form:
+
+`x = atomic.AddUint64(&x, 1)`
+
+which are not atomic.
+
+Default value: `true`.
+
+### **atomicalign**
+
+check for non-64-bits-aligned arguments to sync/atomic functions
+
+Default value: `true`.
+
+### **bools**
+
+check for common mistakes involving boolean operators
+
+Default value: `true`.
+
+### **buildtag**
+
+check that +build tags are well-formed and correctly located
+
+Default value: `true`.
+
+### **cgocall**
+
+detect some violations of the cgo pointer passing rules
+
+Check for invalid cgo pointer passing.
+This looks for code that uses cgo to call C code passing values
+whose types are almost always invalid according to the cgo pointer
+sharing rules.
+Specifically, it warns about attempts to pass a Go chan, map, func,
+or slice to C, either directly, or via a pointer, array, or struct.
+
+Default value: `true`.
+
+### **composites**
+
+check for unkeyed composite literals
+
+This analyzer reports a diagnostic for composite literals of struct
+types imported from another package that do not use the field-keyed
+syntax. Such literals are fragile because the addition of a new field
+(even if unexported) to the struct will cause compilation to fail.
+
+As an example,
+`err = &net.DNSConfigError{err}`
+
+should be replaced by:
+`err = &net.DNSConfigError{Err: err}`
+
+Default value: `true`.
+
+### **copylock**
+
+check for locks erroneously passed by value
+
+Inadvertently copying a value containing a lock, such as sync.Mutex or
+sync.WaitGroup, may cause both copies to malfunction. Generally such
+values should be referred to through a pointer.
+
+Default value: `true`.
+
+### **errorsas**
+
+report passing non-pointer or non-error values to errors.As
+
+The errorsas analysis reports calls to errors.As where the type
+of the second argument is not a pointer to a type implementing error.
+
+Default value: `true`.
+
+### **httpresponse**
+
+check for mistakes using HTTP responses
+
+A common mistake when using the net/http package is to defer a function
+call to close the http.Response Body before checking the error that
+determines whether the response is valid:
+
+```go
+resp, err := http.Head(url)
+defer resp.Body.Close()
+if err != nil {
+  log.Fatal(err)
+}
+// (defer statement belongs here)
+```
+
+This checker helps uncover latent nil dereference bugs by reporting a
+diagnostic for such mistakes.
+
+Default value: `true`.
+
+### **loopclosure**
+
+check references to loop variables from within nested functions
+
+This analyzer checks for references to loop variables from within a
+function literal inside the loop body. It checks only instances where
+the function literal is called in a defer or go statement that is the
+last statement in the loop body, as otherwise we would need whole
+program analysis.
+
+For example:
+```go
+for i, v := range s {
+  go func() {
+    println(i, v) // not what you might expect
+  }()
+}
+```
+
+See: https://golang.org/doc/go_faq.html#closures_and_goroutines
+
+Default value: `true`.
+
+### **lostcancel**
+
+check cancel func returned by context.WithCancel is called
+
+The cancellation function returned by context.WithCancel, WithTimeout,
+and WithDeadline must be called or the new context will remain live
+until its parent context is cancelled.
+(The background context is never cancelled.)
+
+Default value: `true`.
+
+### **nilfunc**
+
+check for useless comparisons between functions and nil
+
+A useless comparison is one like f == nil as opposed to f() == nil.
+
+Default value: `true`.
+
+### **printf**
+
+check consistency of Printf format strings and arguments
+
+The check applies to known functions (for example, those in package fmt)
+as well as any detected wrappers of known functions.
+
+A function that wants to avail itself of printf checking but is not
+found by this analyzer's heuristics (for example, due to use of
+dynamic calls) can insert a bogus call:
+
+```go
+if false {
+  _ = fmt.Sprintf(format, args...) // enable printf checking
+}
+```
+
+The -funcs flag specifies a comma-separated list of names of additional
+known formatting functions or methods. If the name contains a period,
+it must denote a specific function using one of the following forms:
+
+```
+       dir/pkg.Function
+       dir/pkg.Type.Method
+       (*dir/pkg.Type).Method
+```
+
+Otherwise the name is interpreted as a case-insensitive unqualified
+identifier such as "errorf". Either way, if a listed name ends in f, the
+function is assumed to be Printf-like, taking a format string before the
+argument list. Otherwise it is assumed to be Print-like, taking a list
+of arguments with no format string.
+
+Default value: `true`.
+
+### **shift**
+
+check for shifts that equal or exceed the width of the integer
+
+Default value: `true`.
+
+### **stdmethods**
+
+check signature of methods of well-known interfaces
+
+Sometimes a type may be intended to satisfy an interface but may fail to
+do so because of a mistake in its method signature.
+For example, the result of this WriteTo method should be (int64, error),
+not error, to satisfy io.WriterTo:
+
+```go
+       type myWriterTo struct{...}
+        func (myWriterTo) WriteTo(w io.Writer) error { ... }
+```
+
+This check ensures that each method whose name matches one of several
+well-known interface methods from the standard library has the correct
+signature for that interface.
+
+Checked method names include:
+       Format GobEncode GobDecode MarshalJSON MarshalXML
+       Peek ReadByte ReadFrom ReadRune Scan Seek
+       UnmarshalJSON UnreadByte UnreadRune WriteByte
+       WriteTo
+
+Default value: `true`.
+
+### **structtag**
+
+check that struct field tags conform to reflect.StructTag.Get
+
+Also report certain struct tags (json, xml) used with unexported fields.
+
+Default value: `true`.
+
+### **tests**
+
+check for common mistaken usages of tests and examples
+
+The tests checker walks Test, Benchmark and Example functions checking
+malformed names, wrong signatures and examples documenting non-existent
+identifiers.
+
+Please see the documentation for package testing in golang.org/pkg/testing
+for the conventions that are enforced for Tests, Benchmarks, and Examples.
+
+Default value: `true`.
+
+### **unmarshal**
+
+report passing non-pointer or non-interface values to unmarshal
+
+The unmarshal analysis reports calls to functions such as json.Unmarshal
+in which the argument type is not a pointer or an interface.
+
+Default value: `true`.
+
+### **unreachable**
+
+check for unreachable code
+
+The unreachable analyzer finds statements that execution can never reach
+because they are preceded by an return statement, a call to panic, an
+infinite loop, or similar constructs.
+
+Default value: `true`.
+
+### **unsafeptr**
+
+check for invalid conversions of uintptr to unsafe.Pointer
+
+The unsafeptr analyzer reports likely incorrect uses of unsafe.Pointer
+to convert integers to pointers. A conversion from uintptr to
+unsafe.Pointer is invalid if it implies that there is a uintptr-typed
+word in memory that holds a pointer value, because that word will be
+invisible to stack copying and to the garbage collector.
+
+Default value: `true`.
+
+### **unusedresult**
+
+check for unused results of calls to some functions
+
+Some functions like fmt.Errorf return a result and have no side effects,
+so it is always a mistake to discard the result. This analyzer reports
+calls to certain functions in which the result of the call is ignored.
+
+The set of functions may be controlled using flags.
+
+Default value: `true`.
+
+## gopls suite
+
+Below is the list of analyzers that are used by `gopls`.
+
+### **deepequalerrors**
+
+check for calls of reflect.DeepEqual on error values
+
+The deepequalerrors checker looks for calls of the form:
+
+```go
+    reflect.DeepEqual(err1, err2)
+```
+
+where err1 and err2 are errors. Using reflect.DeepEqual to compare
+errors is discouraged.
+
+Default value: `true`.
+
+### **fillreturns**
+
+suggested fixes for "wrong number of return values (want %d, got %d)"
+
+This checker provides suggested fixes for type errors of the
+type "wrong number of return values (want %d, got %d)". For example:
+```go
+func m() (int, string, *bool, error) {
+  return
+}
+```
+will turn into
+```go
+func m() (int, string, *bool, error) {
+  return 0, "", nil, nil
+}
+```
+
+This functionality is similar to [goreturns](https://github.com/sqs/goreturns).
+
+Default value: `false`.
+
+### **nonewvars**
+
+suggested fixes for "no new vars on left side of :="
+
+This checker provides suggested fixes for type errors of the
+type "no new vars on left side of :=". For example:
+```go
+z := 1
+z := 2
+```
+will turn into
+```go
+z := 1
+z = 2
+```
+
+Default value: `false`.
+
+### **noresultvalues**
+
+suggested fixes for "no result values expected"
+
+This checker provides suggested fixes for type errors of the
+type "no result values expected". For example:
+```go
+func z() { return nil }
+```
+will turn into
+```go
+func z() { return }
+```
+
+Default value: `true`.
+
+### **simplifycompositelit**
+
+check for composite literal simplifications
+
+An array, slice, or map composite literal of the form:
+```go
+[]T{T{}, T{}}
+```
+will be simplified to:
+```go
+[]T{{}, {}}
+```
+
+This is one of the simplifications that "gofmt -s" applies.
+
+Default value: `true`.
+
+### **simplifyrange**
+
+check for range statement simplifications
+
+A range of the form:
+```go
+for x, _ = range v {...}
+```
+will be simplified to:
+```go
+for x = range v {...}
+```
+
+A range of the form:
+```go
+for _ = range v {...}
+```
+will be simplified to:
+```go
+for range v {...}
+```
+
+This is one of the simplifications that "gofmt -s" applies.
+
+Default value: `true`.
+
+### **simplifyslice**
+
+check for slice simplifications
+
+A slice expression of the form:
+```go
+s[a:len(s)]
+```
+will be simplified to:
+```go
+s[a:]
+```
+
+This is one of the simplifications that "gofmt -s" applies.
+
+Default value: `true`.
+
+### **sortslice**
+
+check the argument type of sort.Slice
+
+sort.Slice requires an argument of a slice type. Check that
+the interface{} value passed to sort.Slice is actually a slice.
+
+Default value: `true`.
+
+### **testinggoroutine**
+
+report calls to (*testing.T).Fatal from goroutines started by a test.
+
+Functions that abruptly terminate a test, such as the Fatal, Fatalf, FailNow, and
+Skip{,f,Now} methods of *testing.T, must be called from the test goroutine itself.
+This checker detects calls to these functions that occur within a goroutine
+started by the test. For example:
+
+```go
+func TestFoo(t *testing.T) {
+    go func() {
+        t.Fatal("oops") // error: (*T).Fatal called from non-test goroutine
+    }()
+}
+```
+
+Default value: `true`.
+
+### **undeclaredname**
+
+suggested fixes for "undeclared name: <>"
+
+This checker provides suggested fixes for type errors of the
+type `undeclared name: <>`. It will insert a new statement:
+`<> := `.
+
+Default value: `false`.
+
+### **unusedparams**
+
+check for unused parameters of functions
+
+The unusedparams analyzer checks functions to see if there are
+any parameters that are not being used.
+
+To reduce false positives it ignores:
+- methods
+- parameters that do not have a name or are underscored
+- functions in test files
+- functions with empty bodies or those with just a return stmt
+
+Default value: `false`.