sonata f1a46f9861
Add Noctx (#1179)
Support for linter that enforces using context on each `http.Request`
https://github.com/sonatard/noctx
2020-06-08 20:21:58 +00:00

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
}()
}