mirror of https://github.com/gofiber/fiber.git
🧹 chore: Fix linter workflow failures (#3354)
* Fix linter workflow failures * Bump golang.org/x/net to v0.36.0 * Try skipping golangci-lint cache * Update linter.yml * fix: directives and spaces * fix: better configuration * fix: golangci-lint install * Update golangci-lint version * Enable SA4023 * Update golangci-lint config * Remove duplicated rule --------- Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>pull/3340/head^2
parent
b56a141d59
commit
395c8fafa9
|
@ -37,4 +37,7 @@ jobs:
|
|||
uses: golangci/golangci-lint-action@v6
|
||||
with:
|
||||
# NOTE: Keep this in sync with the version from .golangci.yml
|
||||
version: v1.62.2
|
||||
version: v1.64.7
|
||||
# NOTE(ldez): temporary workaround
|
||||
install-mode: goinstall
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ run:
|
|||
|
||||
output:
|
||||
sort-results: true
|
||||
uniq-by-line: false
|
||||
|
||||
linters-settings:
|
||||
depguard:
|
||||
|
@ -187,7 +186,7 @@ linters-settings:
|
|||
- name: unchecked-type-assertion
|
||||
disabled: true # TODO: Do not disable
|
||||
- name: unhandled-error
|
||||
arguments: ['bytes\.Buffer\.Write']
|
||||
disabled: true
|
||||
|
||||
stylecheck:
|
||||
checks:
|
||||
|
@ -250,7 +249,10 @@ issues:
|
|||
max-issues-per-linter: 0
|
||||
max-same-issues: 0
|
||||
exclude-dirs:
|
||||
- internal # TODO: Do not ignore interal packages
|
||||
- internal # TODO: Do not ignore internal packages
|
||||
exclude-files:
|
||||
- '_msgp\.go'
|
||||
- '_msgp_test\.go'
|
||||
exclude-rules:
|
||||
- linters:
|
||||
- err113
|
||||
|
@ -263,7 +265,10 @@ issues:
|
|||
linters:
|
||||
- bodyclose
|
||||
- err113
|
||||
# fix: true
|
||||
- source: 'fmt.Fprintf?'
|
||||
linters:
|
||||
- errcheck
|
||||
- revive
|
||||
|
||||
linters:
|
||||
enable:
|
||||
|
@ -358,7 +363,6 @@ linters:
|
|||
- stylecheck
|
||||
# - tagalign # TODO: Enable
|
||||
- tagliatelle
|
||||
- tenv
|
||||
- testableexamples
|
||||
- testifylint
|
||||
# - testpackage # TODO: Enable
|
||||
|
|
2
Makefile
2
Makefile
|
@ -35,7 +35,7 @@ markdown:
|
|||
## lint: 🚨 Run lint checks
|
||||
.PHONY: lint
|
||||
lint:
|
||||
go run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.2 run ./...
|
||||
golangci-lint run
|
||||
|
||||
## test: 🚦 Execute all tests
|
||||
.PHONY: test
|
||||
|
|
2
app.go
2
app.go
|
@ -1024,7 +1024,7 @@ func (app *App) Test(req *http.Request, config ...TestConfig) (*http.Response, e
|
|||
select {
|
||||
case err = <-channel:
|
||||
case <-time.After(cfg.Timeout):
|
||||
conn.Close() //nolint:errcheck, revive // It is fine to ignore the error here
|
||||
conn.Close() //nolint:errcheck // It is fine to ignore the error here
|
||||
if cfg.FailOnTimeout {
|
||||
return nil, os.ErrDeadlineExceeded
|
||||
}
|
||||
|
|
|
@ -199,7 +199,7 @@ func parserRequestBody(c *Client, req *Request) error {
|
|||
case filesBody:
|
||||
return parserRequestBodyFile(req)
|
||||
case rawBody:
|
||||
if body, ok := req.body.([]byte); ok {
|
||||
if body, ok := req.body.([]byte); ok { //nolint:revive // ignore simplicity
|
||||
req.RawRequest.SetBody(body)
|
||||
} else {
|
||||
return ErrBodyType
|
||||
|
|
10
ctx_test.go
10
ctx_test.go
|
@ -4578,14 +4578,14 @@ func Test_Ctx_SendStreamWriter(t *testing.T) {
|
|||
c := app.AcquireCtx(&fasthttp.RequestCtx{})
|
||||
|
||||
err := c.SendStreamWriter(func(w *bufio.Writer) {
|
||||
w.WriteString("Don't crash please") //nolint:errcheck, revive // It is fine to ignore the error
|
||||
w.WriteString("Don't crash please") //nolint:errcheck // It is fine to ignore the error
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "Don't crash please", string(c.Response().Body()))
|
||||
|
||||
err = c.SendStreamWriter(func(w *bufio.Writer) {
|
||||
for lineNum := 1; lineNum <= 5; lineNum++ {
|
||||
fmt.Fprintf(w, "Line %d\n", lineNum) //nolint:errcheck, revive // It is fine to ignore the error
|
||||
fmt.Fprintf(w, "Line %d\n", lineNum)
|
||||
if err := w.Flush(); err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
return
|
||||
|
@ -4607,7 +4607,7 @@ func Test_Ctx_SendStreamWriter_Interrupted(t *testing.T) {
|
|||
app.Get("/", func(c Ctx) error {
|
||||
return c.SendStreamWriter(func(w *bufio.Writer) {
|
||||
for lineNum := 1; lineNum <= 5; lineNum++ {
|
||||
fmt.Fprintf(w, "Line %d\n", lineNum) //nolint:errcheck // It is fine to ignore the error
|
||||
fmt.Fprintf(w, "Line %d\n", lineNum)
|
||||
|
||||
if err := w.Flush(); err != nil {
|
||||
if lineNum < 3 {
|
||||
|
@ -4951,11 +4951,11 @@ func Test_Ctx_BodyStreamWriter(t *testing.T) {
|
|||
ctx := &fasthttp.RequestCtx{}
|
||||
|
||||
ctx.SetBodyStreamWriter(func(w *bufio.Writer) {
|
||||
fmt.Fprintf(w, "body writer line 1\n") //nolint: errcheck // It is fine to ignore the error
|
||||
fmt.Fprintf(w, "body writer line 1\n")
|
||||
if err := w.Flush(); err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
fmt.Fprintf(w, "body writer line 2\n") //nolint: errcheck // It is fine to ignore the error
|
||||
fmt.Fprintf(w, "body writer line 2\n")
|
||||
})
|
||||
|
||||
require.True(t, ctx.IsBodyStream())
|
||||
|
|
2
go.mod
2
go.mod
|
@ -23,7 +23,7 @@ require (
|
|||
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/x448/float16 v0.8.4 // indirect
|
||||
golang.org/x/net v0.35.0 // indirect
|
||||
golang.org/x/net v0.37.0 // indirect
|
||||
golang.org/x/sys v0.31.0 // indirect
|
||||
golang.org/x/text v0.23.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
|
|
2
go.sum
2
go.sum
|
@ -36,6 +36,8 @@ golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
|
|||
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
|
||||
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
|
|
|
@ -51,16 +51,16 @@ func getTLSConfig(ln net.Listener) *tls.Config {
|
|||
}
|
||||
|
||||
// Copy value from pointer
|
||||
if val := reflect.Indirect(pointer); val.Type() != nil {
|
||||
if val := reflect.Indirect(pointer); val.IsValid() {
|
||||
// Get private field from value
|
||||
if field := val.FieldByName("config"); field.Type() != nil {
|
||||
if field := val.FieldByName("config"); field.IsValid() {
|
||||
// Copy value from pointer field (unsafe)
|
||||
newval := reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())) //nolint:gosec // Probably the only way to extract the *tls.Config from a net.Listener. TODO: Verify there really is no easier way without using unsafe.
|
||||
if newval.Type() == nil {
|
||||
if !newval.IsValid() {
|
||||
return nil
|
||||
}
|
||||
// Get element from pointer
|
||||
if elem := newval.Elem(); elem.Type() != nil {
|
||||
if elem := newval.Elem(); elem.IsValid() {
|
||||
// Cast value to *tls.Config
|
||||
c, ok := elem.Interface().(*tls.Config)
|
||||
if !ok {
|
||||
|
|
|
@ -566,7 +566,7 @@ func Test_Utils_TestConn_Closed_Write(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
// Close early, write should fail
|
||||
conn.Close() //nolint:errcheck, revive // It is fine to ignore the error here
|
||||
conn.Close() //nolint:errcheck // It is fine to ignore the error here
|
||||
_, err = conn.Write([]byte("Response 2\n"))
|
||||
require.ErrorIs(t, err, errTestConnClosed)
|
||||
|
||||
|
|
32
listen.go
32
listen.go
|
@ -366,38 +366,35 @@ func (app *App) startupMessage(addr string, isTLS bool, pids string, cfg ListenC
|
|||
out = colorable.NewNonColorable(os.Stdout)
|
||||
}
|
||||
|
||||
fmt.Fprintf(out, "%s\n", fmt.Sprintf(figletFiberText, colors.Red+"v"+Version+colors.Reset)) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, strings.Repeat("-", 50)+"\n") //nolint:errcheck,revive,govet // ignore error
|
||||
fmt.Fprintf(out, "%s\n", fmt.Sprintf(figletFiberText, colors.Red+"v"+Version+colors.Reset))
|
||||
fmt.Fprintf(out, strings.Repeat("-", 50)+"\n")
|
||||
|
||||
if host == "0.0.0.0" {
|
||||
//nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out,
|
||||
"%sINFO%s Server started on: \t%s%s://127.0.0.1:%s%s (bound on host 0.0.0.0 and port %s)\n",
|
||||
colors.Green, colors.Reset, colors.Blue, scheme, port, colors.Reset, port)
|
||||
} else {
|
||||
//nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out,
|
||||
"%sINFO%s Server started on: \t%s%s%s\n",
|
||||
colors.Green, colors.Reset, colors.Blue, fmt.Sprintf("%s://%s:%s", scheme, host, port), colors.Reset)
|
||||
}
|
||||
|
||||
if app.config.AppName != "" {
|
||||
fmt.Fprintf(out, "%sINFO%s Application name: \t\t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, app.config.AppName, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s Application name: \t\t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, app.config.AppName, colors.Reset)
|
||||
}
|
||||
|
||||
//nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out,
|
||||
"%sINFO%s Total handlers count: \t%s%s%s\n",
|
||||
colors.Green, colors.Reset, colors.Blue, strconv.Itoa(int(app.handlersCount)), colors.Reset)
|
||||
|
||||
if isPrefork == "Enabled" {
|
||||
fmt.Fprintf(out, "%sINFO%s Prefork: \t\t\t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, isPrefork, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s Prefork: \t\t\t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, isPrefork, colors.Reset)
|
||||
} else {
|
||||
fmt.Fprintf(out, "%sINFO%s Prefork: \t\t\t%s%s%s\n", colors.Green, colors.Reset, colors.Red, isPrefork, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s Prefork: \t\t\t%s%s%s\n", colors.Green, colors.Reset, colors.Red, isPrefork, colors.Reset)
|
||||
}
|
||||
|
||||
fmt.Fprintf(out, "%sINFO%s PID: \t\t\t%s%v%s\n", colors.Green, colors.Reset, colors.Blue, os.Getpid(), colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s Total process count: \t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, procs, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s PID: \t\t\t%s%v%s\n", colors.Green, colors.Reset, colors.Blue, os.Getpid(), colors.Reset)
|
||||
fmt.Fprintf(out, "%sINFO%s Total process count: \t%s%s%s\n", colors.Green, colors.Reset, colors.Blue, procs, colors.Reset)
|
||||
|
||||
if cfg.EnablePrefork {
|
||||
// Turn the `pids` variable (in the form ",a,b,c,d,e,f,etc") into a slice of PIDs
|
||||
|
@ -408,7 +405,7 @@ func (app *App) startupMessage(addr string, isTLS bool, pids string, cfg ListenC
|
|||
}
|
||||
}
|
||||
|
||||
fmt.Fprintf(out, "%sINFO%s Child PIDs: \t\t%s", colors.Green, colors.Reset, colors.Blue) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%sINFO%s Child PIDs: \t\t%s", colors.Green, colors.Reset, colors.Blue)
|
||||
totalPids := len(pidSlice)
|
||||
rowTotalPidCount := 10
|
||||
|
||||
|
@ -421,17 +418,17 @@ func (app *App) startupMessage(addr string, isTLS bool, pids string, cfg ListenC
|
|||
}
|
||||
|
||||
for n, pid := range pidSlice[start:end] {
|
||||
fmt.Fprintf(out, "%s", pid) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "%s", pid)
|
||||
if n+1 != len(pidSlice[start:end]) {
|
||||
fmt.Fprintf(out, ", ") //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, ", ")
|
||||
}
|
||||
}
|
||||
fmt.Fprintf(out, "\n%s", colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "\n%s", colors.Reset)
|
||||
}
|
||||
}
|
||||
|
||||
// add new Line as spacer
|
||||
fmt.Fprintf(out, "\n%s", colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(out, "\n%s", colors.Reset)
|
||||
}
|
||||
|
||||
// printRoutesMessage print all routes with method, path, name and handlers
|
||||
|
@ -473,11 +470,10 @@ func (app *App) printRoutesMessage() {
|
|||
return routes[i].path < routes[j].path
|
||||
})
|
||||
|
||||
fmt.Fprintf(w, "%smethod\t%s| %spath\t%s| %sname\t%s| %shandlers\t%s\n", colors.Blue, colors.White, colors.Green, colors.White, colors.Cyan, colors.White, colors.Yellow, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(w, "%s------\t%s| %s----\t%s| %s----\t%s| %s--------\t%s\n", colors.Blue, colors.White, colors.Green, colors.White, colors.Cyan, colors.White, colors.Yellow, colors.Reset) //nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(w, "%smethod\t%s| %spath\t%s| %sname\t%s| %shandlers\t%s\n", colors.Blue, colors.White, colors.Green, colors.White, colors.Cyan, colors.White, colors.Yellow, colors.Reset)
|
||||
fmt.Fprintf(w, "%s------\t%s| %s----\t%s| %s----\t%s| %s--------\t%s\n", colors.Blue, colors.White, colors.Green, colors.White, colors.Cyan, colors.White, colors.Yellow, colors.Reset)
|
||||
|
||||
for _, route := range routes {
|
||||
//nolint:errcheck,revive // ignore error
|
||||
fmt.Fprintf(w, "%s%s\t%s| %s%s\t%s| %s%s\t%s| %s%s%s\n", colors.Blue, route.method, colors.White, colors.Green, route.path, colors.White, colors.Cyan, route.name, colors.White, colors.Yellow, route.handlers, colors.Reset)
|
||||
}
|
||||
|
||||
|
|
|
@ -53,9 +53,9 @@ func (l *defaultLogger) privateLogf(lv Level, format string, fmtArgs []any) {
|
|||
buf.WriteString(level)
|
||||
|
||||
if len(fmtArgs) > 0 {
|
||||
_, _ = fmt.Fprintf(buf, format, fmtArgs...) //nolint: errcheck // It is fine to ignore the error
|
||||
_, _ = fmt.Fprintf(buf, format, fmtArgs...)
|
||||
} else {
|
||||
_, _ = fmt.Fprint(buf, fmtArgs...) //nolint: errcheck // It is fine to ignore the error
|
||||
_, _ = fmt.Fprint(buf, fmtArgs...)
|
||||
}
|
||||
|
||||
_ = l.stdlog.Output(l.depth, buf.String()) //nolint:errcheck // It is fine to ignore the error
|
||||
|
|
|
@ -68,7 +68,7 @@ func Test_HTTPHandler(t *testing.T) {
|
|||
w.Header().Set("Header1", "value1")
|
||||
w.Header().Set("Header2", "value2")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
fmt.Fprintf(w, "request body is %q", body) //nolint:errcheck // not needed
|
||||
fmt.Fprintf(w, "request body is %q", body)
|
||||
}
|
||||
fiberH := HTTPHandlerFunc(http.HandlerFunc(nethttpH))
|
||||
fiberH = setFiberContextValueMiddleware(fiberH, expectedContextKey, expectedContextValue)
|
||||
|
|
|
@ -166,7 +166,7 @@ func writeLog(w io.Writer, msg []byte) {
|
|||
// Write error to output
|
||||
if _, err := w.Write([]byte(err.Error())); err != nil {
|
||||
// There is something wrong with the given io.Writer
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err) //nolint: errcheck // It is fine to ignore the error
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -865,7 +865,7 @@ func Test_Logger_ByteSent_Streaming(t *testing.T) {
|
|||
for {
|
||||
i++
|
||||
msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg) //nolint:errcheck // ignore error
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg)
|
||||
err := w.Flush()
|
||||
if err != nil {
|
||||
break
|
||||
|
@ -1049,7 +1049,7 @@ func Benchmark_Logger(b *testing.B) {
|
|||
for {
|
||||
i++
|
||||
msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg) //nolint:errcheck // ignore error
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg)
|
||||
err := w.Flush()
|
||||
if err != nil {
|
||||
break
|
||||
|
@ -1217,7 +1217,7 @@ func Benchmark_Logger_Parallel(b *testing.B) {
|
|||
for {
|
||||
i++
|
||||
msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg) //nolint:errcheck // ignore error
|
||||
fmt.Fprintf(w, "data: Message: %s\n\n", msg)
|
||||
err := w.Flush()
|
||||
if err != nil {
|
||||
break
|
||||
|
|
|
@ -506,7 +506,10 @@ func Test_Proxy_Do_WithRealURL(t *testing.T) {
|
|||
return Do(c, "https://www.google.com")
|
||||
})
|
||||
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil))
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil), fiber.TestConfig{
|
||||
Timeout: 2 * time.Second,
|
||||
FailOnTimeout: true,
|
||||
})
|
||||
require.NoError(t, err1)
|
||||
require.Equal(t, fiber.StatusOK, resp.StatusCode)
|
||||
require.Equal(t, "/test", resp.Request.URL.String())
|
||||
|
@ -523,7 +526,10 @@ func Test_Proxy_Do_WithRedirect(t *testing.T) {
|
|||
return Do(c, "https://google.com")
|
||||
})
|
||||
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil))
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil), fiber.TestConfig{
|
||||
Timeout: 2 * time.Second,
|
||||
FailOnTimeout: true,
|
||||
})
|
||||
require.NoError(t, err1)
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
require.NoError(t, err)
|
||||
|
@ -558,7 +564,10 @@ func Test_Proxy_DoRedirects_TooManyRedirects(t *testing.T) {
|
|||
return DoRedirects(c, "http://google.com", 0)
|
||||
})
|
||||
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil))
|
||||
resp, err1 := app.Test(httptest.NewRequest(fiber.MethodGet, "/test", nil), fiber.TestConfig{
|
||||
Timeout: 2 * time.Second,
|
||||
FailOnTimeout: true,
|
||||
})
|
||||
require.NoError(t, err1)
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
require.NoError(t, err)
|
||||
|
|
Loading…
Reference in New Issue