dominikh / go-tools

Staticcheck - The advanced Go linter
https://staticcheck.dev
MIT License
6.01k stars 361 forks source link

unused: false positive: private embedded marker #1312

Open Antonboom opened 1 year ago

Antonboom commented 1 year ago

Hello!

$ golangci-lint version   
golangci-lint has version 1.48.0 built from 2d8fea81 on 2022-08-04T18:44:38Z
# .golangci.yml
linters:
  disable-all: true
  enable:
    - unused
// internal/events/events.go
package events

type Event interface {
    eventMarker()
}

type event struct{}         //
func (*event) eventMarker() {}

type SomeEvent struct {
    event
    ID string
}
// main.go
package main

import (
    "fmt"

    "example/internal/events"
)

func main() {
    var ev events.Event = &events.SomeEvent{ID: "123"}
    fmt.Println(ev)
}
$ golangci-lint run  ./...  
internal/events/events.go:11:2: field `event` is unused (unused)
        event
        ^
internal/events/events.go:8:15: func `(*event).eventMarker` is unused (unused)
func (*event) eventMarker() {}
              ^
internal/events/events.go:7:6: type `event` is unused (unused)
type event struct{}         //
     ^
go env ``` ▶ go env GO111MODULE="on" GOARCH="arm64" GOBIN="/Users/anthony/golang_workspace/bin" GOCACHE="/Users/anthony/Library/Caches/go-build" GOENV="/Users/anthony/Library/Application Support/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="arm64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/anthony/golang_workspace/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/anthony/golang_workspace" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64" GOVCS="" GOVERSION="go1.18.2" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/private/tmp/example/go.mod" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/6t/v80c8sfs5zqf38b2yhzq592h0000gn/T/go-build1593840402=/tmp/go-build -gno-record-gcc-switches -fno-common" ```
Antonboom commented 1 year ago

issue1312.zip

dominikh commented 1 year ago

A simple workaround for now is to include var _ Event = (*SomeEvent)(nil) in your events package.