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