Code Monkey home page Code Monkey logo

noctx's Issues

SSA and generics (go1.18)

Currently, SSA is not working with generics.

So your linter produces a panic when it is used with generics.

There is an issue open about that in the Go repository: golang/go#48525

Inside golangci-lint, we disabled your linters: golangci/golangci-lint#2649

You have 2 solutions:

  • waiting for a version of SSA that will support generics
  • dropping the SSA analyzers and using something else to analyze the code.

Related to golang/go#50558

Ignore requests in tests

As described in the docs, http.NewRequest uses the context.Background context which is supposed to be used in tests according to the docs. Therefore, it is cleaner to use http.NewContext in tests where we make HTTP requests against test servers.

Therefore, I think the linter should allow the usage of http.NewRequest, http.Get, http.Header and all similar functions in tests because it's the recommended way and provides much simpler code than having to explicitly use http.NewRequestWithContext with context.Background each time.

Error in readme

// Sending an HTTP request and accepting context
func SendWithContext(ctx context.Context, body io.Reader) error {
    // Change NewRequest to NewRequestWithContext and pass context it
    req, err := http.NewRequestWithContext(ctx, http.MethodPost, "http://example.com", body)
    if err != nil {
        return nil
    }

You are returning nil on error
It`s small mistake but someone can copy this code

feature: support database/sql

Thank you for the wonderful linter.

This linter seems to be mainly net/http, but is it out of scope to issue a warning to methods that use database/sql without context.Context?

WithRequest false positive

type key struct{}
req, _ := http.NewRequest("POST", "", nil)
req = req.WithContext(context.WithValue(req.Context(), key{}, 0))

noctx raises this error:

should rewrite http.NewRequestWithContext or add (*Request).WithContext (noctx)
                        req, _ := http.NewRequest("POST", "", nil)
                                                 ^

False Negative: return http.Request from closure

req, _ := http.NewRequest(http.MethodPost, url, nil)       // want `should rewrite http.NewRequestWithContext or add \(\*Request\).WithContext`
_, _ = func() (*http.Request, error) { return req, nil }() // OK
cli.Do(req)
=== RUN   Test
--- FAIL: Test (0.63s)
    analysistest.go:324: a/a.go:33: no diagnostic was reported matching "should rewrite http.NewRequestWithContext or add \\(\\*Request\\).WithContext"
FAIL

Process finished with exit code 1

False positive on returning a Request?

I'm always interested how to improve my code, but this one is a bit irritating to me. Maybe I'm wrong in doing so, but it seems like detection is too strict here.

In my API client, I have a helper function to abstract creating the basic request. Usually I then add headers or other stuff afterwards, before executing the request.

func (a *Api) NewApiRequest(method string, path string, body io.Reader) (req *http.Request, err error) {
	req, err = http.NewRequestWithContext(a.Context, method, a.BaseURL+path, body)
	if err != nil {
		return
	}

	req.SetBasicAuth(a.Username, a.Password)

	return
}

Now when using the function, noctx complains:

	req, err := a.NewApiRequest("POST", "/upload", nil) // should rewrite http.NewRequestWithContext or add (*Request).WithContext (noctx)
	if err != nil {
		return fmt.Errorf("could not create request: %w", err)
	}

    // Adding more to the request

	data, err := a.RequestApi(req, http.StatusCreated)
	if err != nil {
		return fmt.Errorf("could not create upload: %w", err)
	}

What do you think about it? For now I just ignored noctx here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.