
Support for linter that enforces using context on each `http.Request` https://github.com/sonatard/noctx
135 lines
5.0 KiB
Go
135 lines
5.0 KiB
Go
//args: -Enoctx
|
|
package testdata
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
var newRequestPkg = http.NewRequest
|
|
|
|
func Noctx() {
|
|
const url = "http://example.com"
|
|
cli := &http.Client{}
|
|
|
|
ctx := context.Background()
|
|
http.Get(url) // ERROR "net/http\.Get must not be called"
|
|
_ = http.Get // OK
|
|
f := http.Get // OK
|
|
f(url) // ERROR "net/http\.Get must not be called"
|
|
|
|
http.Head(url) // ERROR "net/http\.Head must not be called"
|
|
http.Post(url, "", nil) // ERROR "net/http\.Post must not be called"
|
|
http.PostForm(url, nil) // ERROR "net/http\.PostForm must not be called"
|
|
|
|
cli.Get(url) // ERROR "\(\*net/http\.Client\)\.Get must not be called"
|
|
_ = cli.Get // OK
|
|
m := cli.Get // OK
|
|
m(url) // ERROR "\(\*net/http\.Client\)\.Get must not be called"
|
|
|
|
cli.Head(url) // ERROR "\(\*net/http\.Client\)\.Head must not be called"
|
|
cli.Post(url, "", nil) // ERROR "\(\*net/http\.Client\)\.Post must not be called"
|
|
cli.PostForm(url, nil) // ERROR "\(\*net/http\.Client\)\.PostForm must not be called"
|
|
|
|
req, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
cli.Do(req)
|
|
|
|
req2, _ := http.NewRequestWithContext(ctx, http.MethodPost, url, nil) // OK
|
|
cli.Do(req2)
|
|
|
|
req3, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req3 = req3.WithContext(ctx)
|
|
cli.Do(req3)
|
|
|
|
f2 := func(req *http.Request, ctx context.Context) *http.Request {
|
|
return req
|
|
}
|
|
req4, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req4 = f2(req4, ctx)
|
|
|
|
req41, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req41 = req41.WithContext(ctx)
|
|
req41 = f2(req41, ctx)
|
|
|
|
newRequest := http.NewRequest
|
|
req5, _ := newRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
cli.Do(req5)
|
|
|
|
req51, _ := newRequest(http.MethodPost, url, nil) // OK
|
|
req51 = req51.WithContext(ctx)
|
|
cli.Do(req51)
|
|
|
|
req52, _ := newRequestPkg(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
cli.Do(req52)
|
|
|
|
type MyRequest = http.Request
|
|
f3 := func(req *MyRequest, ctx context.Context) *MyRequest {
|
|
return req
|
|
}
|
|
req6, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req6 = f3(req6, ctx)
|
|
|
|
req61, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req61 = req61.WithContext(ctx)
|
|
req61 = f3(req61, ctx)
|
|
|
|
type MyRequest2 http.Request
|
|
f4 := func(req *MyRequest2, ctx context.Context) *MyRequest2 {
|
|
return req
|
|
}
|
|
req7, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req71 := MyRequest2(*req7)
|
|
f4(&req71, ctx)
|
|
|
|
req72, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req72 = req72.WithContext(ctx)
|
|
req73 := MyRequest2(*req7)
|
|
f4(&req73, ctx)
|
|
|
|
req8, _ := func() (*http.Request, error) {
|
|
return http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
}()
|
|
cli.Do(req8)
|
|
|
|
req82, _ := func() (*http.Request, error) {
|
|
req82, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req82 = req82.WithContext(ctx)
|
|
return req82, nil
|
|
}()
|
|
cli.Do(req82)
|
|
|
|
f5 := func(req, req2 *http.Request, ctx context.Context) (*http.Request, *http.Request) {
|
|
return req, req2
|
|
}
|
|
req9, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req9, _ = f5(req9, req9, ctx)
|
|
|
|
req91, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req91 = req91.WithContext(ctx)
|
|
req9, _ = f5(req91, req91, ctx)
|
|
|
|
req10, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req11, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req10, req11 = f5(req10, req11, ctx)
|
|
|
|
req101, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req111, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req111 = req111.WithContext(ctx)
|
|
req101, req111 = f5(req101, req111, ctx)
|
|
|
|
func() (*http.Request, *http.Request) {
|
|
req12, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req13, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
return req12, req13
|
|
}()
|
|
|
|
func() (*http.Request, *http.Request) {
|
|
req14, _ := http.NewRequest(http.MethodPost, url, nil) // ERROR "should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext"
|
|
req15, _ := http.NewRequest(http.MethodPost, url, nil) // OK
|
|
req15 = req15.WithContext(ctx)
|
|
|
|
return req14, req15
|
|
}()
|
|
}
|
|
|