golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
124.28k stars 17.7k forks source link

x/tools/cmd/deadcode: panic in SSA construction (ast.FuncDecl defines no types.Func) (go1.22) #65608

Closed H0llyW00dzZ closed 7 months ago

H0llyW00dzZ commented 9 months ago

Go version

go version go1.22.0 windows/amd64

Output of go env in your module/workspace:

set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\erian\AppData\Local\go-build
set GOENV=C:\Users\erian\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\erian\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\erian\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.0
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=C:\h0llyw00dz\GoGenAI-Terminal-Chat\go.mod
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\erian\AppData\Local\Temp\go-build1903925403=/tmp/go-build -gno-record-gcc-switches

What did you do?

deadcode causing panic in go 1.22

What did you see happen?

image

What did you expect to see?

in go 1.21.6 it working but in go 1.22 it causing panic

findleyr commented 9 months ago

CC @adonovan

Can you please share more of that stack trace? Also, a minimal reproducer would help.

H0llyW00dzZ commented 9 months ago

CC @adonovan

Can you please share more of that stack trace?

$ deadcode .
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x28 pc=0x39e59a]

goroutine 1 [running]:
golang.org/x/tools/go/ssa.memberFromObject(0xc017195300, {0x0, 0x0?}, {0x508bb8, 0xc00d2f90e0}, {0x0, 0x0})
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:55 +0x5a
golang.org/x/tools/go/ssa.membersFromDecl(0xc017195300, {0x509220?, 0xc00d2f90e0?}, {0x0, 0x0})
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:184 +0x11b
golang.org/x/tools/go/ssa.(*Program).CreatePackage(0xc00ddf8410, 0xc00d17fc20, {0xc00cef7640, 0x2, 0x2}, 0xc00d0cadc0, 0x1)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:250 +0x865
golang.org/x/tools/go/ssa/ssautil.doPackages.func1(0xc0000f9500)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:103 +0xc5
golang.org/x/tools/go/packages.Visit.func1(0xc0000f9500)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:38 +0x158
golang.org/x/tools/go/packages.Visit.func1(0xc0005ee480)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:33 +0x29c
golang.org/x/tools/go/packages.Visit.func1(0xc0005f6300)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:33 +0x29c
golang.org/x/tools/go/packages.Visit({0xc02040a748, 0x1, 0xc0005f6300?}, 0x0, 0xc0000952a8)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:43 +0x10a
golang.org/x/tools/go/ssa/ssautil.doPackages({0xc02040a748?, 0x1, 0x1}, 0x100, 0x1)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:95 +0x419
golang.org/x/tools/go/ssa/ssautil.AllPackages(...)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:77
main.main()
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/cmd/deadcode/deadcode.go:154 +0x81a
fzipp commented 9 months ago

Your deadcode is from tools@v0.16.1. Does the panic still occur with deadcode from the latest x/tools version v0.17.0?

H0llyW00dzZ commented 9 months ago

Your deadcode is from tools@v0.16.1. Does the panic still occur with deadcode from the latest x/tools version v0.17.0?

in v0.17.0 works fine but old version it panic in go 1.22

adonovan commented 9 months ago

This is quite surprising: memberFromObject panics because of the nil Object, which was obtained from types.Info.Defs[fn] for a FuncDecl. Given that we only construct SSA for well typed packages, and that every ast.FuncDecl should have a types.Func symbol, I think this is a bug in go/types, and apparently a regression in go1.22.

@timothy-king @griesemer

findleyr commented 9 months ago

in v0.17.0 works fine but old version it panic in go 1.22

@H0llyW00dzZ can you clarify a bit? Are you saying when you build deadcode@v0.16.1 with Go 1.22, it panics, but when you build deadcode@v0.17.0 with Go 1.22, it does not? That is surprising to me, because as @adonovan pointed out this panic indicates a go/types bug in Go 1.22. I would not expect it to be fixed by a change in x/tools/cmd/deadcode.

adonovan commented 9 months ago

Also, since you are able to reproduce this bug, it would be very helpful to us if you could add the following patch to x/tools and run it again. It should print a long list of functions. The last line it prints before the crash will be of great interest. If you feel comfortable sharing the declaration of that function with us too, that would also help.

--- a/go/ssa/create.go
+++ b/go/ssa/create.go
@@ -181,6 +182,7 @@ func membersFromDecl(pkg *Package, decl ast.Decl, goversion string) {

        case *ast.FuncDecl:
                id := decl.Name
+               log.Printf("%s: %s => %v", pkg.Prog.Fset.Position(decl.Pos()), id.Name, pkg.info.Defs[id])
                memberFromObject(pkg, pkg.info.Defs[id], decl, goversion)
        }
 }
H0llyW00dzZ commented 9 months ago

in v0.17.0 works fine but old version it panic in go 1.22

@H0llyW00dzZ can you clarify a bit? Are you saying when you build deadcode@v0.16.1 with Go 1.22, it panics, but when you build deadcode@v0.17.0 with Go 1.22, it does not? That is surprising to me, because as @adonovan pointed out this panic indicates a go/types bug in Go 1.22. I would not expect it to be fixed by a change in x/tools/cmd/deadcode.

this using deadcode v0.17.0 image

env:

$ go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\erian\AppData\Local\go-build
set GOENV=C:\Users\erian\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\erian\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\erian\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.0
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=C:\h0llyw00dz\GoGenAI-Terminal-Chat\go.mod
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\erian\AppData\Local\Temp\go-build4210587048=/tmp/go-build -gno-record-gcc-switches

and this one is v0.16.1

$ deadcode .
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x28 pc=0x39e59a]

goroutine 1 [running]:
golang.org/x/tools/go/ssa.memberFromObject(0xc017195300, {0x0, 0x0?}, {0x508bb8, 0xc00d2f90e0}, {0x0, 0x0})
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:55 +0x5a
golang.org/x/tools/go/ssa.membersFromDecl(0xc017195300, {0x509220?, 0xc00d2f90e0?}, {0x0, 0x0})
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:184 +0x11b
golang.org/x/tools/go/ssa.(*Program).CreatePackage(0xc00ddf8410, 0xc00d17fc20, {0xc00cef7640, 0x2, 0x2}, 0xc00d0cadc0, 0x1)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/create.go:250 +0x865
golang.org/x/tools/go/ssa/ssautil.doPackages.func1(0xc0000f9500)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:103 +0xc5
golang.org/x/tools/go/packages.Visit.func1(0xc0000f9500)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:38 +0x158
golang.org/x/tools/go/packages.Visit.func1(0xc0005ee480)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:33 +0x29c
golang.org/x/tools/go/packages.Visit.func1(0xc0005f6300)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:33 +0x29c
golang.org/x/tools/go/packages.Visit({0xc02040a748, 0x1, 0xc0005f6300?}, 0x0, 0xc0000952a8)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/packages/visit.go:43 +0x10a
golang.org/x/tools/go/ssa/ssautil.doPackages({0xc02040a748?, 0x1, 0x1}, 0x100, 0x1)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:95 +0x419
golang.org/x/tools/go/ssa/ssautil.AllPackages(...)
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/go/ssa/ssautil/load.go:77
main.main()
        C:/Users/erian/go/pkg/mod/golang.org/x/tools@v0.16.1/cmd/deadcode/deadcode.go:154 +0x81a
findleyr commented 9 months ago

@H0llyW00dzZ since you are able to reproduce, would you be able to make the change suggested by @adonovan in https://github.com/golang/go/issues/65608#issuecomment-1934630785, and share the function declaration that it prints out? That would help us root cause this issue.

H0llyW00dzZ commented 9 months ago

@H0llyW00dzZ since you are able to reproduce, would you be able to make the change suggested by @adonovan in #65608 (comment), and share the function declaration that it prints out? That would help us root cause this issue.

its like this right ?

$ go run ../...
go: pattern ../... matches multiple packages:
        golang.org/x/tools/go/analysis/passes/defers/cmd/defers
        golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment
        golang.org/x/tools/go/analysis/passes/findcall/cmd/findcall
        golang.org/x/tools/go/analysis/passes/httpmux/cmd/httpmux
        golang.org/x/tools/go/analysis/passes/ifaceassert/cmd/ifaceassert
        golang.org/x/tools/go/analysis/passes/lostcancel/cmd/lostcancel
        golang.org/x/tools/go/analysis/passes/nilness/cmd/nilness
        golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
        golang.org/x/tools/go/analysis/passes/stringintconv/cmd/stringintconv
        golang.org/x/tools/go/analysis/passes/unmarshal/cmd/unmarshal
        golang.org/x/tools/go/analysis/passes/unusedresult/cmd/unusedresult
        golang.org/x/tools/go/packages/gopackages
        golang.org/x/tools/go/packages/internal/nodecount
        golang.org/x/tools/go/types/internal/play
H0llyW00dzZ commented 9 months ago

also I don't have experience how to run this large package, since it not my source

adonovan commented 9 months ago

Can you run these commands?

$ git clone https://go.googlesource.com/tools /tmp/tools
$ cd /tmp/tools
$ edit go/ssa/create.go  # and add the one line shown above
$ go install ./cmd/deadcode

Then run the deadcode command as you did when you observe the crash.

When you're finished debugging, you can revert like so:

$ git checkout -f master && go install ./cmd/deadcode

Thanks!

H0llyW00dzZ commented 9 months ago

Can you run these commands?

$ git clone https://go.googlesource.com/tools /tmp/tools
$ cd /tmp/tools
$ edit go/ssa/create.go  # and add the one line shown above
$ go install ./cmd/deadcode

Then run the deadcode command as you did when you observe the crash.

When you're finished debugging, you can revert like so:

$ git checkout -f master && go install ./cmd/deadcode

Thanks!

it show like this

deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\handler.go:244:1: setAfterServeAttributes => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.setAfterServeAttributes(span go.opentelemetry.io/otel/trace.Span, read int64, wrote int64, statusCode int, rerr error, werr error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\handler.go:271:1: WithRouteTag => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.WithRouteTag(route string, h net/http.Handler) net/http.Handler
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\labeler.go:32:1: Add => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Labeler).Add(ls ...go.opentelemetry.io/otel/attribute.KeyValue)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\labeler.go:39:1: Get => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Labeler).Get() []go.opentelemetry.io/otel/attribute.KeyValue
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\labeler.go:51:1: injectLabeler => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.injectLabeler(ctx context.Context, l *go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Labeler) context.Context
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\labeler.go:59:1: LabelerFromContext => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.LabelerFromContext(ctx context.Context) (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Labeler, bool)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:50:1: NewTransport => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.NewTransport(base net/http.RoundTripper, opts ...go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Option) *go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Transport
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:70:1: applyConfig => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Transport).applyConfig(c *go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.config)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:79:1: defaultTransportFormatter => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.defaultTransportFormatter(_ string, r *net/http.Request) string
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:86:1: RoundTrip => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Transport).RoundTrip(r *net/http.Request) (*net/http.Response, error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:134:1: newWrappedBody => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.newWrappedBody(span go.opentelemetry.io/otel/trace.Span, body io.ReadCloser) io.ReadCloser
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:162:1: Write => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.wrappedBody).Write(p []byte) (int, error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:172:1: Read => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.wrappedBody).Read(b []byte) (int, error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\transport.go:187:1: Close => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.wrappedBody).Close() error
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\version.go:18:1: Version => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.Version() string      
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\version.go:26:1: SemVersion => func go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.SemVersion() string
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\wrap.go:37:1: Read => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.bodyWrapper).Read(b []byte) (int, error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\wrap.go:46:1: Close => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.bodyWrapper).Close() error
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\wrap.go:72:1: Header => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.respWriterWrapper).Header() net/http.Header
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\wrap.go:76:1: Write => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.respWriterWrapper).Write(p []byte) (int, error)
deadcode: C:\Users\erian\go\pkg\mod\go.opentelemetry.io\contrib\instrumentation\net\http\otelhttp@v0.47.0\wrap.go:93:1: WriteHeader => func (*go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.respWriterWrapper).WriteHeader(statusCode int)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\googleapi\transport\apikey.go:31:1: RoundTrip => func (*google.golang.org/api/googleapi/transport.APIKey).RoundTrip(req *net/http.Request) (*net/http.Response, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\internal\propagation\http.go:36:1: SpanContextFromRequest => func (*google.golang.org/api/transport/http/internal/propagation.HTTPFormat).SpanContextFromRequest(req *net/http.Request) (sc go.opencensus.io/trace.SpanContext, ok bool)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\internal\propagation\http.go:83:1: SpanContextToRequest => func (*google.golang.org/api/transport/http/internal/propagation.HTTPFormat).SpanContextToRequest(sc go.opencensus.io/trace.SpanContext, req *net/http.Request)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:32:1: NewClient => func google.golang.org/api/transport/http.NewClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*net/http.Client, string, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:55:1: NewTransport => func google.golang.org/api/transport/http.NewTransport(ctx context.Context, base net/http.RoundTripper, opts ...google.golang.org/api/option.ClientOption) (net/http.RoundTripper, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:66:1: newTransport => func google.golang.org/api/transport/http.newTransport(ctx context.Context, base net/http.RoundTripper, settings *google.golang.org/api/internal.DialSettings) (net/http.RoundTripper, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:115:1: newSettings => func google.golang.org/api/transport/http.newSettings(opts []google.golang.org/api/option.ClientOption) (*google.golang.org/api/internal.DialSettings, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:137:1: RoundTrip => func (*google.golang.org/api/transport/http.parameterTransport).RoundTrip(req *net/http.Request) (*net/http.Response, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:166:1: defaultBaseTransport => func google.golang.org/api/transport/http.defaultBaseTransport(ctx context.Context, clientCertSource google.golang.org/api/internal/cert.Source, dialTLSContext func(context.Context, string, string) (net.Conn, error)) net/http.RoundTripper
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:195:1: configureHTTP2 => func google.golang.org/api/transport/http.configureHTTP2(trans *net/http.Transport)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:205:1: fallbackBaseTransport => func google.golang.org/api/transport/http.fallbackBaseTransport() *net/http.Transport
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:221:1: addOpenTelemetryTransport => func google.golang.org/api/transport/http.addOpenTelemetryTransport(trans net/http.RoundTripper, settings *google.golang.org/api/internal.DialSettings) net/http.RoundTripper
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:228:1: addOCTransport => func google.golang.org/api/transport/http.addOCTransport(trans net/http.RoundTripper, settings *google.golang.org/api/internal.DialSettings) net/http.RoundTripper
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\api@v0.163.0\transport\http\dial.go:241:1: clonedTransport => func google.golang.org/api/transport/http.clonedTransport(rt net/http.RoundTripper) *net/http.Transport    
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:46:1: PageInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator).PageInfo() *google.golang.org/api/iterator.PageInfo
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:52:1: Next => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator).Next() (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:62:1: bufLen => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator).bufLen() int
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:66:1: takeBuf => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator).takeBuf() interface{}
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:93:1: PageInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator).PageInfo() *google.golang.org/api/iterator.PageInfo
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:99:1: Next => func (*cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator).Next() (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:109:1: bufLen => func (*cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator).bufLen() int
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\auxiliary.go:113:1: takeBuf => func (*cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator).takeBuf() interface{}      
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\doc.go:119:1: getVersionClient => func cloud.google.com/go/ai/generativelanguage/apiv1.getVersionClient() string
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\doc.go:127:1: DefaultAuthScopes => func cloud.google.com/go/ai/generativelanguage/apiv1.DefaultAuthScopes() []string
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:59:1: defaultGenerativeGRPCClientOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultGenerativeGRPCClientOptions() []google.golang.org/api/option.ClientOption
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:71:1: defaultGenerativeCallOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultGenerativeCallOptions() *cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeCallOptions
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:138:1: defaultGenerativeRESTCallOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultGenerativeRESTCallOptions() *cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeCallOptions
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:233:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).Close() error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:240:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:248:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:254:1: GenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).GenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:260:1: StreamGenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).StreamGenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerativeService_StreamGenerateContentClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:265:1: EmbedContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).EmbedContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:271:1: BatchEmbedContents => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).BatchEmbedContents(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:276:1: CountTokens => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).CountTokens(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:281:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:286:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:291:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:319:1: NewGenerativeClient => func cloud.google.com/go/ai/generativelanguage/apiv1.NewGenerativeClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:352:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:359:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:367:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).Close() error     
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:390:1: NewGenerativeRESTClient => func cloud.google.com/go/ai/generativelanguage/apiv1.NewGenerativeRESTClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:408:1: defaultGenerativeRESTClientOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultGenerativeRESTClientOptions() []google.golang.org/api/option.ClientOption
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:420:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:428:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).Close() error     
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:437:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:440:1: GenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).GenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:458:1: StreamGenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).StreamGenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerativeService_StreamGenerateContentClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:476:1: EmbedContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).EmbedContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:494:1: BatchEmbedContents => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).BatchEmbedContents(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:512:1: CountTokens => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).CountTokens(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:530:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:544:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:562:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeGRPCClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:610:1: GenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).GenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:677:1: StreamGenerateContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).StreamGenerateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerativeService_StreamGenerateContentClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:741:1: Recv => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).Recv() (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:755:1: Header => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).Header() (google.golang.org/grpc/metadata.MD, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:759:1: Trailer => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).Trailer() google.golang.org/grpc/metadata.MD
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:763:1: CloseSend => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).CloseSend() error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:768:1: Context => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).Context() context.Context
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:772:1: SendMsg => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).SendMsg(m interface{}) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:777:1: RecvMsg => func (*cloud.google.com/go/ai/generativelanguage/apiv1.streamGenerateContentRESTClient).RecvMsg(m interface{}) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:783:1: EmbedContent => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).EmbedContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:850:1: BatchEmbedContents => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).BatchEmbedContents(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:916:1: CountTokens => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).CountTokens(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:982:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:1030:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\generative_client.go:1090:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.generativeRESTClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\info.go:23:1: SetGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.GenerativeClient).SetGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:53:1: defaultModelGRPCClientOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultModelGRPCClientOptions() []google.golang.org/api/option.ClientOption
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:65:1: defaultModelCallOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultModelCallOptions() *cloud.google.com/go/ai/generativelanguage/apiv1.ModelCallOptions
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:75:1: defaultModelRESTCallOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultModelRESTCallOptions() *cloud.google.com/go/ai/generativelanguage/apiv1.ModelCallOptions
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:113:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).Close() error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:120:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:128:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:133:1: GetModel => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).GetModel(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GetModelRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:138:1: ListModels => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).ListModels(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.ListModelsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:143:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:148:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:153:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:180:1: NewModelClient => func cloud.google.com/go/ai/generativelanguage/apiv1.NewModelClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:213:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:220:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:228:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).Close() error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:250:1: NewModelRESTClient => func cloud.google.com/go/ai/generativelanguage/apiv1.NewModelRESTClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*cloud.google.com/go/ai/generativelanguage/apiv1.ModelClient, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:268:1: defaultModelRESTClientOptions => func cloud.google.com/go/ai/generativelanguage/apiv1.defaultModelRESTClientOptions() []google.golang.org/api/option.ClientOption
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:280:1: setGoogleClientInfo => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).setGoogleClientInfo(keyval ...string)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:288:1: Close => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).Close() error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:297:1: Connection => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).Connection() *google.golang.org/grpc.ClientConn
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:300:1: GetModel => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).GetModel(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GetModelRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:318:1: ListModels => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).ListModels(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.ListModelsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator       
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:361:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:375:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)     
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:393:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelGRPCClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator      
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:440:1: GetModel => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).GetModel(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GetModelRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model, error)
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:500:1: ListModels => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).ListModels(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.ListModelsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.ModelIterator       
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:589:1: CancelOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).CancelOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.CancelOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) error
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:637:1: GetOperation => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).GetOperation(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.GetOperationRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) (*cloud.google.com/go/longrunning/autogen/longrunningpb.Operation, error)     
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\model_client.go:697:1: ListOperations => func (*cloud.google.com/go/ai/generativelanguage/apiv1.modelRESTClient).ListOperations(ctx context.Context, req *cloud.google.com/go/longrunning/autogen/longrunningpb.ListOperationsRequest, opts ...github.com/googleapis/gax-go/v2.CallOption) *cloud.google.com/go/ai/generativelanguage/apiv1.OperationIterator      
deadcode: C:\Users\erian\go\pkg\mod\cloud.google.com\go\ai@v0.3.0\generativelanguage\apiv1\version.go:21:1: init => func cloud.google.com/go/ai/generativelanguage/apiv1.init()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:153:1: Enum => func (google.golang.org/protobuf/types/known/structpb.NullValue).Enum() *google.golang.org/protobuf/types/known/structpb.NullValue
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:159:1: String => func (google.golang.org/protobuf/types/known/structpb.NullValue).String() string
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:163:1: Descriptor => func (google.golang.org/protobuf/types/known/structpb.NullValue).Descriptor() google.golang.org/protobuf/reflect/protoreflect.EnumDescriptor
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:167:1: Type => func (google.golang.org/protobuf/types/known/structpb.NullValue).Type() google.golang.org/protobuf/reflect/protoreflect.EnumType
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:171:1: Number => func (google.golang.org/protobuf/types/known/structpb.NullValue).Number() google.golang.org/protobuf/reflect/protoreflect.EnumNumber
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:176:1: EnumDescriptor => func (google.golang.org/protobuf/types/known/structpb.NullValue).EnumDescriptor() ([]byte, []int)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:200:1: NewStruct => func google.golang.org/protobuf/types/known/structpb.NewStruct(v map[string]interface{}) (*google.golang.org/protobuf/types/known/structpb.Struct, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:217:1: AsMap => func (*google.golang.org/protobuf/types/known/structpb.Struct).AsMap() map[string]interface{}
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:226:1: MarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.Struct).MarshalJSON() ([]byte, error)    
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:230:1: UnmarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.Struct).UnmarshalJSON(b []byte) error  
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:234:1: Reset => func (*google.golang.org/protobuf/types/known/structpb.Struct).Reset()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:243:1: String => func (*google.golang.org/protobuf/types/known/structpb.Struct).String() string
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:247:1: ProtoMessage => func (*google.golang.org/protobuf/types/known/structpb.Struct).ProtoMessage()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:249:1: ProtoReflect => func (*google.golang.org/protobuf/types/known/structpb.Struct).ProtoReflect() google.golang.org/protobuf/reflect/protoreflect.Message
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:262:1: Descriptor => func (*google.golang.org/protobuf/types/known/structpb.Struct).Descriptor() ([]byte, []int)      
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:266:1: GetFields => func (*google.golang.org/protobuf/types/known/structpb.Struct).GetFields() map[string]*google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:315:1: NewValue => func google.golang.org/protobuf/types/known/structpb.NewValue(v interface{}) (*google.golang.org/protobuf/types/known/structpb.Value, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:363:1: NewNullValue => func google.golang.org/protobuf/types/known/structpb.NewNullValue() *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:368:1: NewBoolValue => func google.golang.org/protobuf/types/known/structpb.NewBoolValue(v bool) *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:373:1: NewNumberValue => func google.golang.org/protobuf/types/known/structpb.NewNumberValue(v float64) *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:378:1: NewStringValue => func google.golang.org/protobuf/types/known/structpb.NewStringValue(v string) *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:383:1: NewStructValue => func google.golang.org/protobuf/types/known/structpb.NewStructValue(v *google.golang.org/protobuf/types/known/structpb.Struct) *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:388:1: NewListValue => func google.golang.org/protobuf/types/known/structpb.NewListValue(v *google.golang.org/protobuf/types/known/structpb.ListValue) *google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:399:1: AsInterface => func (*google.golang.org/protobuf/types/known/structpb.Value).AsInterface() interface{}
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:434:1: MarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.Value).MarshalJSON() ([]byte, error)     
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:438:1: UnmarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.Value).UnmarshalJSON(b []byte) error   
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:442:1: Reset => func (*google.golang.org/protobuf/types/known/structpb.Value).Reset()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:451:1: String => func (*google.golang.org/protobuf/types/known/structpb.Value).String() string
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:455:1: ProtoMessage => func (*google.golang.org/protobuf/types/known/structpb.Value).ProtoMessage()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:457:1: ProtoReflect => func (*google.golang.org/protobuf/types/known/structpb.Value).ProtoReflect() google.golang.org/protobuf/reflect/protoreflect.Message
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:470:1: Descriptor => func (*google.golang.org/protobuf/types/known/structpb.Value).Descriptor() ([]byte, []int)       
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:474:1: GetKind => func (*google.golang.org/protobuf/types/known/structpb.Value).GetKind() google.golang.org/protobuf/types/known/structpb.isValue_Kind
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:481:1: GetNullValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetNullValue() google.golang.org/protobuf/types/known/structpb.NullValue
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:488:1: GetNumberValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetNumberValue() float64       
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:495:1: GetStringValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetStringValue() string        
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:502:1: GetBoolValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetBoolValue() bool
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:509:1: GetStructValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetStructValue() *google.golang.org/protobuf/types/known/structpb.Struct
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:516:1: GetListValue => func (*google.golang.org/protobuf/types/known/structpb.Value).GetListValue() *google.golang.org/protobuf/types/known/structpb.ListValue
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:557:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_NullValue).isValue_Kind()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:559:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_NumberValue).isValue_Kind()       
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:561:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_StringValue).isValue_Kind()       
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:563:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_BoolValue).isValue_Kind()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:565:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_StructValue).isValue_Kind()       
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:567:1: isValue_Kind => func (*google.golang.org/protobuf/types/known/structpb.Value_ListValue).isValue_Kind()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:583:1: NewList => func google.golang.org/protobuf/types/known/structpb.NewList(v []interface{}) (*google.golang.org/protobuf/types/known/structpb.ListValue, error)
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:597:1: AsSlice => func (*google.golang.org/protobuf/types/known/structpb.ListValue).AsSlice() []interface{}
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:606:1: MarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.ListValue).MarshalJSON() ([]byte, error) 
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:610:1: UnmarshalJSON => func (*google.golang.org/protobuf/types/known/structpb.ListValue).UnmarshalJSON(b []byte) error
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:614:1: Reset => func (*google.golang.org/protobuf/types/known/structpb.ListValue).Reset()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:623:1: String => func (*google.golang.org/protobuf/types/known/structpb.ListValue).String() string
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:627:1: ProtoMessage => func (*google.golang.org/protobuf/types/known/structpb.ListValue).ProtoMessage()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:629:1: ProtoReflect => func (*google.golang.org/protobuf/types/known/structpb.ListValue).ProtoReflect() google.golang.org/protobuf/reflect/protoreflect.Message
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:642:1: Descriptor => func (*google.golang.org/protobuf/types/known/structpb.ListValue).Descriptor() ([]byte, []int)   
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:646:1: GetValues => func (*google.golang.org/protobuf/types/known/structpb.ListValue).GetValues() []*google.golang.org/protobuf/types/known/structpb.Value
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:710:1: file_google_protobuf_struct_proto_rawDescGZIP => func google.golang.org/protobuf/types/known/structpb.file_google_protobuf_struct_proto_rawDescGZIP() []byte
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:740:1: init => func google.golang.org/protobuf/types/known/structpb.init()
deadcode: C:\Users\erian\go\pkg\mod\google.golang.org\protobuf@v1.32.0\types\known\structpb\struct.pb.go:741:1: file_google_protobuf_struct_proto_init => func google.golang.org/protobuf/types/known/structpb.file_google_protobuf_struct_proto_init()
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:26:1: TransformSlice => func github.com/google/generative-ai-go/internal/support.TransformSlice[From, To any](from []From, f func(From) To) []To
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:39:1: TransformMapValues => func github.com/google/generative-ai-go/internal/support.TransformMapValues[K comparable, VFrom, VTo any](from map[K]VFrom, f func(VFrom) VTo) map[K]VTo
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:52:1: AddrOrNil => func github.com/google/generative-ai-go/internal/support.AddrOrNil[T comparable](x T) *T
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:62:1: DerefOrZero => func github.com/google/generative-ai-go/internal/support.DerefOrZero[T any](x *T) T
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:71:1: MapToStructPB => func github.com/google/generative-ai-go/internal/support.MapToStructPB(m map[string]any) *google.golang.org/protobuf/types/known/structpb.Struct
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\internal\support\support.go:83:1: MapFromStructPB => func github.com/google/generative-ai-go/internal/support.MapFromStructPB(p *google.golang.org/protobuf/types/known/structpb.Struct) map[string]any
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\chat.go:28:1: StartChat => func (*github.com/google/generative-ai-go/genai.GenerativeModel).StartChat() *github.com/google/generative-ai-go/genai.ChatSession
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\chat.go:33:1: SendMessage => func (*github.com/google/generative-ai-go/genai.ChatSession).SendMessage(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) (*github.com/google/generative-ai-go/genai.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\chat.go:47:1: SendMessageStream => func (*github.com/google/generative-ai-go/genai.ChatSession).SendMessageStream(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) *github.com/google/generative-ai-go/genai.GenerateContentResponseIterator
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\chat.go:60:1: addToHistory => func (*github.com/google/generative-ai-go/genai.ChatSession).addToHistory(cands []*github.com/google/generative-ai-go/genai.Candidate) bool
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:50:1: NewClient => func github.com/google/generative-ai-go/genai.NewClient(ctx context.Context, opts ...google.golang.org/api/option.ClientOption) (*github.com/google/generative-ai-go/genai.Client, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:64:1: Close => func (*github.com/google/generative-ai-go/genai.Client).Close() error
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:81:1: GenerativeModel => func (*github.com/google/generative-ai-go/genai.Client).GenerativeModel(name string) *github.com/google/generative-ai-go/genai.GenerativeModel
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:88:1: fullModelName => func github.com/google/generative-ai-go/genai.fullModelName(name string) string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:96:1: GenerateContent => func (*github.com/google/generative-ai-go/genai.GenerativeModel).GenerateContent(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) (*github.com/google/generative-ai-go/genai.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:107:1: GenerateContentStream => func (*github.com/google/generative-ai-go/genai.GenerativeModel).GenerateContentStream(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) *github.com/google/generative-ai-go/genai.GenerateContentResponseIterator
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:115:1: generateContent => func (*github.com/google/generative-ai-go/genai.GenerativeModel).generateContent(ctx context.Context, req *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest) (*github.com/google/generative-ai-go/genai.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:132:1: newGenerateContentRequest => func (*github.com/google/generative-ai-go/genai.GenerativeModel).newGenerateContentRequest(contents ...*github.com/google/generative-ai-go/genai.Content) *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentRequest
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:141:1: newUserContent => func github.com/google/generative-ai-go/genai.newUserContent(parts []github.com/google/generative-ai-go/genai.Part) *github.com/google/generative-ai-go/genai.Content
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:154:1: Next => func (*github.com/google/generative-ai-go/genai.GenerateContentResponseIterator).Next() (*github.com/google/generative-ai-go/genai.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:180:1: protoToResponse => func github.com/google/generative-ai-go/genai.protoToResponse(resp *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse) (*github.com/google/generative-ai-go/genai.GenerateContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:199:1: CountTokens => func (*github.com/google/generative-ai-go/genai.GenerativeModel).CountTokens(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) (*github.com/google/generative-ai-go/genai.CountTokensResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:209:1: newCountTokensRequest => func (*github.com/google/generative-ai-go/genai.GenerativeModel).newCountTokensRequest(contents ...*github.com/google/generative-ai-go/genai.Content) *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensRequest
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:217:1: Info => func (*github.com/google/generative-ai-go/genai.GenerativeModel).Info(ctx context.Context) (*github.com/google/generative-ai-go/genai.ModelInfo, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:221:1: modelInfo => func (*github.com/google/generative-ai-go/genai.Client).modelInfo(ctx context.Context, fullName string) (*github.com/google/generative-ai-go/genai.ModelInfo, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:241:1: Error => func (*github.com/google/generative-ai-go/genai.BlockedError).Error() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:258:1: joinResponses => func github.com/google/generative-ai-go/genai.joinResponses(dest *github.com/google/generative-ai-go/genai.GenerateContentResponse, src *github.com/google/generative-ai-go/genai.GenerateContentResponse) *github.com/google/generative-ai-go/genai.GenerateContentResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:268:1: joinCandidateLists => func github.com/google/generative-ai-go/genai.joinCandidateLists(dest []*github.com/google/generative-ai-go/genai.Candidate, src []*github.com/google/generative-ai-go/genai.Candidate) []*github.com/google/generative-ai-go/genai.Candidate
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:287:1: joinCitationMetadata => func github.com/google/generative-ai-go/genai.joinCitationMetadata(dest *github.com/google/generative-ai-go/genai.CitationMetadata, src *github.com/google/generative-ai-go/genai.CitationMetadata) *github.com/google/generative-ai-go/genai.CitationMetadata
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:298:1: joinContent => func github.com/google/generative-ai-go/genai.joinContent(dest *github.com/google/generative-ai-go/genai.Content, src *github.com/google/generative-ai-go/genai.Content) *github.com/google/generative-ai-go/genai.Content
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:310:1: joinParts => func github.com/google/generative-ai-go/genai.joinParts(dest []github.com/google/generative-ai-go/genai.Part, src []github.com/google/generative-ai-go/genai.Part) []github.com/google/generative-ai-go/genai.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\client.go:314:1: mergeTexts => func github.com/google/generative-ai-go/genai.mergeTexts(in []github.com/google/generative-ai-go/genai.Part) []github.com/google/generative-ai-go/genai.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:33:1: partToProto => func github.com/google/generative-ai-go/genai.partToProto(p github.com/google/generative-ai-go/genai.Part) *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:40:1: partFromProto => func github.com/google/generative-ai-go/genai.partFromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Part) github.com/google/generative-ai-go/genai.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:57:1: toPart => func (github.com/google/generative-ai-go/genai.Text).toPart() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:63:1: toPart => func (github.com/google/generative-ai-go/genai.Blob).toPart() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Part
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:75:1: ImageData => func github.com/google/generative-ai-go/genai.ImageData(format string, data []byte) github.com/google/generative-ai-go/genai.Blob
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:86:1: Ptr => func github.com/google/generative-ai-go/genai.Ptr[T any](t T) *T
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:89:1: SetCandidateCount => func (*github.com/google/generative-ai-go/genai.GenerationConfig).SetCandidateCount(x int32)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:92:1: SetMaxOutputTokens => func (*github.com/google/generative-ai-go/genai.GenerationConfig).SetMaxOutputTokens(x int32)       
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:95:1: SetTemperature => func (*github.com/google/generative-ai-go/genai.GenerationConfig).SetTemperature(x float32)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:98:1: SetTopP => func (*github.com/google/generative-ai-go/genai.GenerationConfig).SetTopP(x float32)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\content.go:101:1: SetTopK => func (*github.com/google/generative-ai-go/genai.GenerationConfig).SetTopK(x int32)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:25:1: EmbeddingModel => func (*github.com/google/generative-ai-go/genai.Client).EmbeddingModel(name string) *github.com/google/generative-ai-go/genai.EmbeddingModel
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:44:1: Name => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).Name() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:49:1: EmbedContent => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).EmbedContent(ctx context.Context, parts ...github.com/google/generative-ai-go/genai.Part) (*github.com/google/generative-ai-go/genai.EmbedContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:56:1: EmbedContentWithTitle => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).EmbedContentWithTitle(ctx context.Context, title string, parts ...github.com/google/generative-ai-go/genai.Part) (*github.com/google/generative-ai-go/genai.EmbedContentResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:65:1: newEmbedContentRequest => func github.com/google/generative-ai-go/genai.newEmbedContentRequest(model string, tt github.com/google/generative-ai-go/genai.TaskType, title string, parts []github.com/google/generative-ai-go/genai.Part) *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentRequest
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:92:1: NewBatch => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).NewBatch() *github.com/google/generative-ai-go/genai.EmbeddingBatch
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:102:1: AddContent => func (*github.com/google/generative-ai-go/genai.EmbeddingBatch).AddContent(parts ...github.com/google/generative-ai-go/genai.Part) *github.com/google/generative-ai-go/genai.EmbeddingBatch
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:108:1: AddContentWithTitle => func (*github.com/google/generative-ai-go/genai.EmbeddingBatch).AddContentWithTitle(title string, parts ...github.com/google/generative-ai-go/genai.Part) *github.com/google/generative-ai-go/genai.EmbeddingBatch
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:114:1: BatchEmbedContents => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).BatchEmbedContents(ctx context.Context, b *github.com/google/generative-ai-go/genai.EmbeddingBatch) (*github.com/google/generative-ai-go/genai.BatchEmbedContentsResponse, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\embed.go:123:1: Info => func (*github.com/google/generative-ai-go/genai.EmbeddingModel).Info(ctx context.Context) (*github.com/google/generative-ai-go/genai.ModelInfo, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:33:1: toProto => func (*github.com/google/generative-ai-go/genai.BatchEmbedContentsResponse).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:42:1: fromProto => func (github.com/google/generative-ai-go/genai.BatchEmbedContentsResponse).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.BatchEmbedContentsResponse) *github.com/google/generative-ai-go/genai.BatchEmbedContentsResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:63:1: toProto => func (*github.com/google/generative-ai-go/genai.Blob).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Blob
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:73:1: fromProto => func (github.com/google/generative-ai-go/genai.Blob).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Blob) *github.com/google/generative-ai-go/genai.Blob
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:102:1: String => func (github.com/google/generative-ai-go/genai.BlockReason).String() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:133:1: toProto => func (*github.com/google/generative-ai-go/genai.Candidate).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Candidate
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:147:1: fromProto => func (github.com/google/generative-ai-go/genai.Candidate).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Candidate) *github.com/google/generative-ai-go/genai.Candidate
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:167:1: toProto => func (*github.com/google/generative-ai-go/genai.CitationMetadata).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CitationMetadata
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:176:1: fromProto => func (github.com/google/generative-ai-go/genai.CitationMetadata).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CitationMetadata) *github.com/google/generative-ai-go/genai.CitationMetadata
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:203:1: toProto => func (*github.com/google/generative-ai-go/genai.CitationSource).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CitationSource
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:215:1: fromProto => func (github.com/google/generative-ai-go/genai.CitationSource).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CitationSource) *github.com/google/generative-ai-go/genai.CitationSource
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:243:1: toProto => func (*github.com/google/generative-ai-go/genai.Content).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Content
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:253:1: fromProto => func (github.com/google/generative-ai-go/genai.Content).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Content) *github.com/google/generative-ai-go/genai.Content
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:269:1: toProto => func (*github.com/google/generative-ai-go/genai.ContentEmbedding).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.ContentEmbedding
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:278:1: fromProto => func (github.com/google/generative-ai-go/genai.ContentEmbedding).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.ContentEmbedding) *github.com/google/generative-ai-go/genai.ContentEmbedding
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:297:1: toProto => func (*github.com/google/generative-ai-go/genai.CountTokensResponse).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:306:1: fromProto => func (github.com/google/generative-ai-go/genai.CountTokensResponse).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.CountTokensResponse) *github.com/google/generative-ai-go/genai.CountTokensResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:321:1: toProto => func (*github.com/google/generative-ai-go/genai.EmbedContentResponse).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:330:1: fromProto => func (github.com/google/generative-ai-go/genai.EmbedContentResponse).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.EmbedContentResponse) *github.com/google/generative-ai-go/genai.EmbedContentResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:366:1: String => func (github.com/google/generative-ai-go/genai.FinishReason).String() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:390:1: toProto => func (*github.com/google/generative-ai-go/genai.GenerateContentResponse).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:400:1: fromProto => func (github.com/google/generative-ai-go/genai.GenerateContentResponse).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse) *github.com/google/generative-ai-go/genai.GenerateContentResponse
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:462:1: toProto => func (*github.com/google/generative-ai-go/genai.GenerationConfig).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerationConfig
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:476:1: fromProto => func (github.com/google/generative-ai-go/genai.GenerationConfig).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerationConfig) *github.com/google/generative-ai-go/genai.GenerationConfig
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:514:1: String => func (github.com/google/generative-ai-go/genai.HarmBlockThreshold).String() string     
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:567:1: String => func (github.com/google/generative-ai-go/genai.HarmCategory).String() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:601:1: String => func (github.com/google/generative-ai-go/genai.HarmProbability).String() string        
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:669:1: toProto => func (*github.com/google/generative-ai-go/genai.ModelInfo).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:688:1: fromProto => func (github.com/google/generative-ai-go/genai.ModelInfo).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.Model) *github.com/google/generative-ai-go/genai.ModelInfo
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:718:1: toProto => func (*github.com/google/generative-ai-go/genai.PromptFeedback).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse_PromptFeedback
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:728:1: fromProto => func (github.com/google/generative-ai-go/genai.PromptFeedback).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.GenerateContentResponse_PromptFeedback) *github.com/google/generative-ai-go/genai.PromptFeedback
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:754:1: toProto => func (*github.com/google/generative-ai-go/genai.SafetyRating).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.SafetyRating
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:765:1: fromProto => func (github.com/google/generative-ai-go/genai.SafetyRating).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.SafetyRating) *github.com/google/generative-ai-go/genai.SafetyRating
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:787:1: toProto => func (*github.com/google/generative-ai-go/genai.SafetySetting).toProto() *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.SafetySetting
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:797:1: fromProto => func (github.com/google/generative-ai-go/genai.SafetySetting).fromProto(p *cloud.google.com/go/ai/generativelanguage/apiv1/generativelanguagepb.SafetySetting) *github.com/google/generative-ai-go/genai.SafetySetting
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\generativelanguagepb_veneer.gen.go:834:1: String => func (github.com/google/generative-ai-go/genai.TaskType).String() string
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\list_models.go:26:1: ListModels => func (*github.com/google/generative-ai-go/genai.Client).ListModels(ctx context.Context) *github.com/google/generative-ai-go/genai.ModelInfoIterator
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\list_models.go:39:1: Next => func (*github.com/google/generative-ai-go/genai.ModelInfoIterator).Next() (*github.com/google/generative-ai-go/genai.ModelInfo, error)
deadcode: C:\Users\erian\go\pkg\mod\github.com\google\generative-ai-go@v0.7.0\genai\list_models.go:48:1: PageInfo => func (*github.com/google/generative-ai-go/genai.ModelInfoIterator).PageInfo() *google.golang.org/api/iterator.PageInfo
deadcode: C:\Program Files\Go\src\os\signal\signal.go:36:1: want => func (*os/signal.handler).want(sig int) bool
deadcode: C:\Program Files\Go\src\os\signal\signal.go:40:1: set => func (*os/signal.handler).set(sig int)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:44:1: clear => func (*os/signal.handler).clear(sig int)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:51:1: cancel => func os/signal.cancel(sigs []os.Signal, action func(int))
deadcode: C:\Program Files\Go\src\os\signal\signal.go:86:1: Ignore => func os/signal.Ignore(sig ...os.Signal)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:91:1: Ignored => func os/signal.Ignored(sig os.Signal) bool
deadcode: C:\Program Files\Go\src\os\signal\signal.go:121:1: Notify => func os/signal.Notify(c chan<- os.Signal, sig ...os.Signal)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:173:1: Reset => func os/signal.Reset(sig ...os.Signal)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:180:1: Stop => func os/signal.Stop(c chan<- os.Signal)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:230:1: signalWaitUntilIdle => func os/signal.signalWaitUntilIdle()
deadcode: C:\Program Files\Go\src\os\signal\signal.go:232:1: process => func os/signal.process(sig os.Signal)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:277:1: NotifyContext => func os/signal.NotifyContext(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc)
deadcode: C:\Program Files\Go\src\os\signal\signal.go:306:1: stop => func (*os/signal.signalCtx).stop()
deadcode: C:\Program Files\Go\src\os\signal\signal.go:315:1: String => func (*os/signal.signalCtx).String() string
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:15:1: signal_disable => func os/signal.signal_disable(uint32)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:16:1: signal_enable => func os/signal.signal_enable(uint32)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:17:1: signal_ignore => func os/signal.signal_ignore(uint32)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:18:1: signal_ignored => func os/signal.signal_ignored(uint32) bool
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:19:1: signal_recv => func os/signal.signal_recv() uint32
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:21:1: loop => func os/signal.loop()
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:27:1: init => func os/signal.init()
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:35:1: signum => func os/signal.signum(sig os.Signal) int
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:48:1: enableSignal => func os/signal.enableSignal(sig int)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:52:1: disableSignal => func os/signal.disableSignal(sig int)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:56:1: ignoreSignal => func os/signal.ignoreSignal(sig int)
deadcode: C:\Program Files\Go\src\os\signal\signal_unix.go:60:1: signalIgnored => func os/signal.signalIgnored(sig int) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:15:1: addMessageWithContext => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.addMessageWithContext(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, sender string, message string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:20:1: executeCommand => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.executeCommand(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, command string, constructPrompt func(string) string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:33:1: sendCommandToAI => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sendCommandToAI(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, command string, constructPrompt func(string) string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:42:1: sendMessageToAI => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sendMessageToAI(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, message string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:49:1: sendShutdownMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sendShutdownMessage(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:68:1: constructSummarizePrompt => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).constructSummarizePrompt() string    
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:73:1: sendSummarizePrompt => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).sendSummarizePrompt(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, sanitizedMessage string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:90:1: handleAIResponse => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).handleAIResponse(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, sanitizedMessage string, aiResponse string, customText string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:105:1: handleTokenCount => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).handleTokenCount(apiKey string, filePath string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:124:1: prepareTokenCountParams => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).prepareTokenCountParams(apiKey string, filePath string) (github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:141:1: readImageFile => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).readImageFile(filePath string, params *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:155:1: readTextFile => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).readTextFile(filePath string, params *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:172:1: constructAITranslatePrompt => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.constructAITranslatePrompt(applicationName string, command string, text string, targetLanguage string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:181:1: handleAIInteraction => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleAIInteraction(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, aiPrompt string, postProcess func(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, aiResponse string) error) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\ai_stuff.go:204:1: postProcessAITranslate => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.postProcessAITranslate(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, aiResponse string) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:16:1: DetermineMessageType => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DetermineMessageType(message string) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.MessageType
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:33:1: NewChatHistory => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewChatHistory() *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:52:1: AddMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).AddMessage(user string, text string, config *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatConfig)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:79:1: handleSystemMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).handleSystemMessage(sanitizedText string, message string, hashValue string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:97:1: handleAIMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).handleAIMessage(message string, hashValue string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:108:1: handleUserMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).handleUserMessage(user string, message string, hashValue string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:118:1: updateMessageCounts => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).updateMessageCounts(user string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:130:1: updateSystemMessageCount => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).updateSystemMessageCount()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:137:1: addMessageToHistory => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).addMessageToHistory(message string, hashValue string)   
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:145:1: isExistingSysMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).isExistingSysMessage(hashValue string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:151:1: replaceExistingSysMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).replaceExistingSysMessage(message string, hashValue string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:157:1: addNewSysMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).addNewSysMessage(message string, hashValue string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:163:1: cleanupOldSysMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).cleanupOldSysMessages()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:177:1: manageHistorySize => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).manageHistorySize(config *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatConfig)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:199:1: SanitizeMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).SanitizeMessage(message string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:214:1: GetHistory => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).GetHistory(config *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatConfig) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:232:1: buildHistoryString => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).buildHistoryString(historySubset []string) string        
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:245:1: appendSystemMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).appendSystemMessages(builder *strings.Builder, sysMsgs []string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:272:1: appendChatMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).appendChatMessages(builder *strings.Builder, chatMsgs []string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:303:1: shouldAppendSeparator => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).shouldAppendSeparator(currentMessage string, nextMessage string, currentIndex int, totalMessages int) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:311:1: separateSystemMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).separateSystemMessages(messages []string) (sysMsgs []string, chatMsgs []string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:323:1: isUserMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.isUserMessage(message string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:329:1: isAIMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.isAIMessage(message string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:334:1: isSysMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.isSysMessage(message string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:339:1: hashMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).hashMessage(message string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:360:1: RemoveMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).RemoveMessages(numMessages int, messageContent string)       
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:373:1: removeMessagesByContent => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).removeMessagesByContent(content string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:388:1: removeRecentMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).removeRecentMessages(num int)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:411:1: FilterMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).FilterMessages(predicate func(string) bool) []string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:425:1: Clear => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).Clear()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:437:1: cleanup => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).cleanup()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:449:1: ClearAllSystemMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).ClearAllSystemMessages()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:474:1: GetMessageStats => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).GetMessageStats() github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.MessageStats
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\chat.go:487:1: HasSystemMessages => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).HasSystemMessages() bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:30:1: Colorize => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Colorize(options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ColorizationOptions) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:82:1: applyColorToDelimitedText => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.applyColorToDelimitedText(options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ColorizationPartOptions) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:95:1: processPart => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.processPart(result *strings.Builder, index int, partsLen int, part string, options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ColorizationPartOptions)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:105:1: colorizePart => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.colorizePart(result *strings.Builder, part string, options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ColorizationPartOptions)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:124:1: appendDelimiterIfNeeded => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.appendDelimiterIfNeeded(result *strings.Builder, index int, partsLen int, options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ColorizationPartOptions)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:133:1: shouldKeepDelimiter => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.shouldKeepDelimiter(delimiter string, keepDelimiters map[string]bool) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:148:1: ApplyFormatting => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ApplyFormatting(options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.FormattingOptions) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:169:1: processDelimiters => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.processDelimiters(options github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.FormattingOptions, keepDelimiters map[string]bool) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\colorize.go:214:1: SingleCharColorize => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SingleCharColorize(text string, delimiter string, color string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:39:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleQuitCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:74:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleHelpCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:125:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCheckVersionCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:168:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handlepingCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string, subcommand string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:193:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleClearCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:202:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleClearCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:222:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSafetyCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:227:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSafetyCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:256:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleAITranslateCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:281:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCryptoRandCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:286:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCryptoRandCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:309:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleShowChatCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:314:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleShowChatCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:328:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:358:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleStatsCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:367:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleStatsCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:380:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands.go:385:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:31:1: RegisterSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandRegistry).RegisterSubcommand(baseCommand string, subcommand string, handler github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandHandler)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:44:1: NewCommandRegistry => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewCommandRegistry() *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandRegistry
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:58:1: Register => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandRegistry).Register(name string, cmd github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandHandler)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:82:1: ExecuteCommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandRegistry).ExecuteCommand(name string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:106:1: executeSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CommandRegistry).executeSubcommand(baseCommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:119:1: isCommand => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.isCommand(input string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:125:1: handleCommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).handleCommand(input string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:147:1: HandleCommand => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.HandleCommand(input string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:184:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleQuitCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:189:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleQuitCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:203:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleHelpCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:208:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleHelpCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:215:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCheckVersionCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:227:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCheckVersionCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:241:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleClearCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:251:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSafetyCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:260:1: setSafetyLevel => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSafetyCommand).setSafetyLevel(level string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:275:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleAITranslateCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:282:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleAITranslateCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:297:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCryptoRandCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:312:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleShowChatCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:321:1: HandleSubcommand => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).HandleSubcommand(subcommand string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:327:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSummarizeCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:334:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleStatsCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:340:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokeCountingCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\commands_types.go:364:1: IsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handlepingCommand).IsValid(parts []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:21:1: DefaultChatConfig => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DefaultChatConfig() *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatConfig
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:44:1: ConfigureModel => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ConfigureModel(model *github.com/google/generative-ai-go/genai.GenerativeModel, opts ...github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:61:1: WithTemperature => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.WithTemperature(temperature float32) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:78:1: WithTopP => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.WithTopP(topP float32) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:95:1: WithTopK => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.WithTopK(topK int32) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:113:1: WithMaxOutputTokens => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.WithMaxOutputTokens(maxOutputTokens int32) (github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:142:1: WithSafetyOptions => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.WithSafetyOptions(safety *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SafetySettings, modelName string) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\config.go:162:1: ApplyOptions => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ApplyOptions(m *github.com/google/generative-ai-go/genai.GenerativeModel, configs ...github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ModelConfig) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:22:1: PrintHistory => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).PrintHistory()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:42:1: RecoverFromPanic => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.RecoverFromPanic() func()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:55:1: IsANSISequence => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.IsANSISequence(runes []rune, index int) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:63:1: PrintANSISequence => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.PrintANSISequence(runes []rune, index int) int
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:79:1: ApplyBold => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ApplyBold(text string, delimiter string, color string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:106:1: HandleUnrecognizedCommand => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.HandleUnrecognizedCommand(command string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, parts []string) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:165:1: PrintAnotherVisualSeparator => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.PrintAnotherVisualSeparator()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:172:1: ReplaceTripleBackticks => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ReplaceTripleBackticks(text string, placeholder string) string  
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:186:1: IsLastMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.IsLastMessage(index int, messages []string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\deadcode.go:195:1: IncrementMessageTypeCount => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatHistory).IncrementMessageTypeCount(messageType github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.MessageType) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:23:1: NewDebugOrErrorLogger => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewDebugOrErrorLogger() *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:39:1: Debug => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).Debug(format string, v ...interface{})
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:67:1: Error => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).Error(format string, v ...interface{})
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:107:1: RecoverFromPanic => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).RecoverFromPanic()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:157:1: HandleGoogleAPIError => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).HandleGoogleAPIError(err error) bool  
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:180:1: HandleOtherStupidAPIError => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).HandleOtherStupidAPIError(err error, apiName string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:198:1: Info => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).Info(format string, v ...interface{})
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\debug_or_error.go:220:1: Any => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DebugOrErrorLogger).Any(format string, v ...interface{})
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\executecmd_stuff.go:13:1: checkVersionAndGetPrompt => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleCheckVersionCommand).checkVersionAndGetPrompt() (aiPrompt string, err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\executecmd_stuff.go:35:1: clearChatHistory => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleClearCommand).clearChatHistory(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\executecmd_stuff.go:53:1: clearSummarizeHistory => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleClearCommand).clearSummarizeHistory(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\executecmd_stuff.go:65:1: showChatStats => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleStatsCommand).showChatStats(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:15:1: NewASCIIArtStyle => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewASCIIArtStyle() github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:28:1: AddChar => func (github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle).AddChar(char rune, pattern []string, color string)       
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:33:1: applyColor => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.applyColor(artChar github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtChar, line string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:66:1: ToASCIIArt => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ToASCIIArt(input string, style github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle) (string, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:95:1: checkStyle => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.checkStyle(style github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:114:1: maxPatternHeight => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.maxPatternHeight(style github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle) int
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:138:1: buildOutput => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.buildOutput(output *[]string, char rune, style github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\figlet_frontend.go:166:1: MergeStyles => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.MergeStyles(styles ...github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle) github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ASCIIArtStyle
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:40:1: FilterLanguageFromCodeBlock => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.FilterLanguageFromCodeBlock(text string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:55:1: PrintPrefixWithTimeStamp => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.PrintPrefixWithTimeStamp(prefix string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:69:1: isFirstCharacterWide => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.isFirstCharacterWide(s string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:79:1: printPromptFeedback => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printPromptFeedback(feedback *github.com/google/generative-ai-go/genai.PromptFeedback)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:100:1: printTokenCount => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printTokenCount(apiKey string, aiResponse string, chatHistory ...string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:138:1: handleTokenCountError => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleTokenCountError(err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:143:1: printCurrentTokenCount => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printCurrentTokenCount(tokenCount int)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:151:1: updateAndPrintTotalTokenCount => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.updateAndPrintTotalTokenCount(tokenCount int)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:159:1: printVisualSeparator => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printVisualSeparator()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:166:1: printnewlineAscii => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printnewlineAscii()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:173:1: removeAIPrefix => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.removeAIPrefix(content string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:182:1: colorizeResponse => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.colorizeResponse(content string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:211:1: handleSingleAsterisks => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleSingleAsterisks(content string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:220:1: printAIResponse => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printAIResponse(response string, isSystemMessage bool)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\front_end.go:234:1: printResponseFooter => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.printResponseFooter(resp *github.com/google/generative-ai-go/genai.GenerateContentResponse, aiResponse string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:32:1: PrintTypingChat => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.PrintTypingChat(message string, delay time.Duration)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:74:1: ConfigureModelForSession => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ConfigureModelForSession(ctx context.Context, client *github.com/google/generative-ai-go/genai.Client, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session, modelName string) *github.com/google/generative-ai-go/genai.GenerativeModel
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:113:1: SendMessage => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).SendMessage(ctx context.Context, client *github.com/google/generative-ai-go/genai.Client, chatContext string) (string, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:151:1: SendDummyMessage => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SendDummyMessage(client *github.com/google/generative-ai-go/genai.Client) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:197:1: printResponse => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).printResponse(resp *github.com/google/generative-ai-go/genai.GenerateContentResponse) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:235:1: concatenateChatHistory => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.concatenateChatHistory(aiResponse string, chatHistory ...string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:243:1: sanitizeAIResponse => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sanitizeAIResponse(response string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:256:1: sendToAIWithoutDisplay => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sendToAIWithoutDisplay(ctx context.Context, client *github.com/google/generative-ai-go/genai.Client, chatContext string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:273:1: sendMessageAndProcessResponse => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.sendMessageAndProcessResponse(ctx context.Context, model *github.com/google/generative-ai-go/genai.GenerativeModel, fullContext string, session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai.go:294:1: processAIResponse => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.processAIResponse(resp *github.com/google/generative-ai-go/genai.GenerateContentResponse) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\genai_embedding.go:40:1: GetEmbedding => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.GetEmbedding(ctx context.Context, client *github.com/google/generative-ai-go/genai.Client, modelID string, text string) ([]float32, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\init.go:120:1: verifyFileExtension => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.verifyFileExtension(filePath string) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\init.go:158:1: verifyImageFileExtension => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.verifyImageFileExtension(filePath string) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\init.go:188:1: getImageFormat => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.getImageFormat(filePath string) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\init.go:211:1: readImageFile => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.readImageFile(filePath string) ([]byte, string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\init.go:221:1: init => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.init()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:27:1: CheckLatestVersion => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CheckLatestVersion(currentVersion string) (isLatest bool, latestVersion string, err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:67:1: GetFullReleaseInfo => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.GetFullReleaseInfo(tagName string) (release *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.GitHubRelease, err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:92:1: checkLatestVersionWithBackoff => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.checkLatestVersionWithBackoff() (isLatest bool, latestVersion string, err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:108:1: fetchAndFormatReleaseInfo => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.fetchAndFormatReleaseInfo(latestVersion string) (aiPrompt string, err error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:125:1: fetchReleaseWithBackoff => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.fetchReleaseWithBackoff(latestVersion string) (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.GitHubRelease, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:143:1: formatReleaseDate => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.formatReleaseDate(dateStr string) (string, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\release.go:152:1: formatReleasePrompt => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.formatReleasePrompt(releaseInfo *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.GitHubRelease) string
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\retry_policy.go:18:1: retryWithExponentialBackoff => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.retryWithExponentialBackoff(retryFunc github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.RetryableFunc, handleError github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ErrorHandlerFunc) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\retry_policy.go:49:1: standardAPIErrorHandler => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.standardAPIErrorHandler(err error) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\retry_policy.go:55:1: standardOtherAPIErrorHandler => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.standardOtherAPIErrorHandler(err error) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\safety_settings.go:18:1: DefaultSafetySettings => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.DefaultSafetySettings() *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SafetySettings
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\safety_settings.go:35:1: SetLowSafety => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SafetySettings).SetLowSafety()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\safety_settings.go:50:1: SetHighSafety => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SafetySettings).SetHighSafety()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\safety_settings.go:64:1: ApplyToModel => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.SafetySettings).ApplyToModel(model *github.com/google/generative-ai-go/genai.GenerativeModel, modelName string)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:30:1: NewSession => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewSession(apiKey string) *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:73:1: Start => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).Start()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:112:1: setupSignalHandling => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).setupSignalHandling()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:136:1: processInput => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).processInput() bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:156:1: handleUserInput => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).handleUserInput(input string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:172:1: ensureClientIsValid => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).ensureClientIsValid() bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:186:1: sendInputToAI => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).sendInputToAI(input string) bool
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:207:1: cleanup => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).cleanup()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:218:1: endSession => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).endSession()
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:231:1: HasEnded => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).HasEnded() (ended bool)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:254:1: RenewSession => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session).RenewSession(apiKey string) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\session.go:287:1: handleGenAIError => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleGenAIError(err error) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\token_counter.go:17:1: CountTokens => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.CountTokens(params github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams) (int, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\token_counter.go:24:1: countTokensWithClient => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.countTokensWithClient(ctx context.Context, params github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams) (int, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\token_counter.go:40:1: performTokenCount => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.performTokenCount(ctx context.Context, params github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams, tokenCount *int) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\token_counter.go:50:1: makeTokenCountRequest => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.makeTokenCountRequest(ctx context.Context, params github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams, tokenCount *int) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\token_counter.go:70:1: prepareAndCountTokens => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.prepareAndCountTokens(ctx context.Context, model *github.com/google/generative-ai-go/genai.GenerativeModel, params github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.TokenCountParams) (*github.com/google/generative-ai-go/genai.CountTokensResponse, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:9:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleK8sCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:15:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.storageCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:21:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.savehistorytostorageCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:27:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.loadhistoryfromstorageCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:33:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.reportshitFunctionthatTooComplexCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:40:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.translateCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:50:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.fixDocsFormattingCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:57:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handlePromptfileCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\unimplemented.go:64:1: Execute => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.handleKaliDocsCommand).Execute(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) (bool, error)
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\worker.go:13:1: NewChatWorker => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.NewChatWorker(session *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.Session) *github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatWorker
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\worker.go:22:1: Start => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatWorker).Start(ctx context.Context) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\terminal\worker.go:43:1: Stop => func (*github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal.ChatWorker).Stop() error
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:24:1: re => func (*internal/lazyregexp.Regexp).re() *regexp.Regexp
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:29:1: build => func (*internal/lazyregexp.Regexp).build()
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:34:1: FindSubmatch => func (*internal/lazyregexp.Regexp).FindSubmatch(s []byte) [][]byte
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:38:1: FindStringSubmatch => func (*internal/lazyregexp.Regexp).FindStringSubmatch(s string) []string
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:42:1: FindStringSubmatchIndex => func (*internal/lazyregexp.Regexp).FindStringSubmatchIndex(s string) []int
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:46:1: ReplaceAllString => func (*internal/lazyregexp.Regexp).ReplaceAllString(src string, repl string) string
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:50:1: FindString => func (*internal/lazyregexp.Regexp).FindString(s string) string
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:54:1: FindAllString => func (*internal/lazyregexp.Regexp).FindAllString(s string, n int) []string
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:58:1: MatchString => func (*internal/lazyregexp.Regexp).MatchString(s string) bool
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:62:1: SubexpNames => func (*internal/lazyregexp.Regexp).SubexpNames() []string
deadcode: C:\Program Files\Go\src\internal\lazyregexp\lazyre.go:71:1: New => func internal/lazyregexp.New(str string) *internal/lazyregexp.Regexp
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:13:1: decoder => func (*internal/profile.Profile).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:20:1: preEncode => func (*internal/profile.Profile).preEncode()
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:108:1: encode => func (*internal/profile.Profile).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:209:1: postDecode => func (*internal/profile.Profile).postDecode() error
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:297:1: decoder => func (*internal/profile.ValueType).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:301:1: encode => func (*internal/profile.ValueType).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:314:1: decoder => func (*internal/profile.Sample).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:318:1: encode => func (*internal/profile.Sample).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:343:1: decoder => func (internal/profile.Label).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:347:1: encode => func (internal/profile.Label).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:363:1: decoder => func (*internal/profile.Mapping).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:367:1: encode => func (*internal/profile.Mapping).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:394:1: decoder => func (*internal/profile.Location).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:398:1: encode => func (*internal/profile.Location).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:420:1: decoder => func (*internal/profile.Line).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:424:1: encode => func (*internal/profile.Line).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:437:1: decoder => func (*internal/profile.Function).decoder() []internal/profile.decoder
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:441:1: encode => func (*internal/profile.Function).encode(b *internal/profile.buffer)
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:463:1: addString => func internal/profile.addString(strings map[string]int, s string) int64
deadcode: C:\Program Files\Go\src\internal\profile\encode.go:472:1: getString => func internal/profile.getString(strings []string, strng *int64, err error) (string, error)
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:14:1: FilterSamplesByName => func (*internal/profile.Profile).FilterSamplesByName(focus *regexp.Regexp, ignore *regexp.Regexp, hide *regexp.Regexp) (fm bool, im bool, hm bool)
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:60:1: matchesName => func (*internal/profile.Location).matchesName(re *regexp.Regexp) bool
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:76:1: unmatchedLines => func (*internal/profile.Location).unmatchedLines(re *regexp.Regexp) []internal/profile.Line
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:96:1: focusedAndNotIgnored => func internal/profile.focusedAndNotIgnored(locs []*internal/profile.Location, m map[uint64]bool) bool
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:119:1: FilterSamplesByTag => func (*internal/profile.Profile).FilterSamplesByTag(focus internal/profile.TagMatch, ignore internal/profile.TagMatch) (fm bool, im bool)
deadcode: C:\Program Files\Go\src\internal\profile\filter.go:135:1: focusedSample => func internal/profile.focusedSample(s *internal/profile.Sample, focus internal/profile.TagMatch, ignore internal/profile.TagMatch) (fm bool, im bool)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:50:1: isSpaceOrComment => func internal/profile.isSpaceOrComment(line string) bool
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:57:1: parseGoCount => func internal/profile.parseGoCount(b []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:140:1: remapLocationIDs => func (*internal/profile.Profile).remapLocationIDs()
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:157:1: remapFunctionIDs => func (*internal/profile.Profile).remapFunctionIDs()
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:179:1: remapMappingIDs => func (*internal/profile.Profile).remapMappingIDs()
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:219:1: get32l => func internal/profile.get32l(b []byte) (uint64, []byte)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:226:1: get32b => func internal/profile.get32b(b []byte) (uint64, []byte)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:233:1: get64l => func internal/profile.get64l(b []byte) (uint64, []byte)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:240:1: get64b => func internal/profile.get64b(b []byte) (uint64, []byte)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:252:1: ParseTracebacks => func internal/profile.ParseTracebacks(b []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:316:1: addTracebackSample => func internal/profile.addTracebackSample(l []*internal/profile.Location, s []string, p *internal/profile.Profile)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:336:1: parseCPU => func internal/profile.parseCPU(b []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:359:1: cpuProfile => func internal/profile.cpuProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*internal/profile.Profile, error)   
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:422:1: parseCPUSamples => func internal/profile.parseCPUSamples(b []byte, parse func(b []byte) (uint64, []byte), adjust bool, p *internal/profile.Profile) ([]byte, map[uint64]*internal/profile.Location, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:467:1: parseHeap => func internal/profile.parseHeap(b []byte) (p *internal/profile.Profile, err error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:590:1: parseHeapSample => func internal/profile.parseHeapSample(line string, rate int64, sampling string) (value []int64, blocksize int64, addrs []uint64, err error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:631:1: extractHexAddresses => func internal/profile.extractHexAddresses(s string) ([]string, []uint64)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:647:1: parseHexAddresses => func internal/profile.parseHexAddresses(s string) []uint64
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:661:1: scaleHeapSample => func internal/profile.scaleHeapSample(count int64, size int64, rate int64) (int64, int64)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:683:1: parseContention => func internal/profile.parseContention(b []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:711:1: parseCppContention => func internal/profile.parseCppContention(r *bytes.Buffer) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:835:1: parseContentionSample => func internal/profile.parseContentionSample(line string, period int64, cpuHz int64) (value []int64, addrs []uint64, err error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:868:1: parseThread => func internal/profile.parseThread(b []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:968:1: parseThreadSample => func internal/profile.parseThreadSample(b *bytes.Buffer) (nextl string, addrs []uint64, err error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1003:1: parseAdditionalSections => func internal/profile.parseAdditionalSections(l string, b *bytes.Buffer, p *internal/profile.Profile) (err error)      
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1024:1: ParseMemoryMap => func (*internal/profile.Profile).ParseMemoryMap(rd io.Reader) error
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1083:1: parseMappingEntry => func internal/profile.parseMappingEntry(l string) (*internal/profile.Mapping, error)
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1137:1: sectionTrigger => func internal/profile.sectionTrigger(line string) internal/profile.sectionType
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1146:1: addLegacyFrameInfo => func (*internal/profile.Profile).addLegacyFrameInfo()
deadcode: C:\Program Files\Go\src\internal\profile\legacy_profile.go:1164:1: isProfileType => func internal/profile.isProfileType(p *internal/profile.Profile, t []string) bool
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:21:1: Merge => func internal/profile.Merge(srcs []*internal/profile.Profile) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:73:1: Normalize => func (*internal/profile.Profile).Normalize(pb *internal/profile.Profile) error
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:105:1: isZeroSample => func internal/profile.isZeroSample(s *internal/profile.Sample) bool
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:134:1: mapSample => func (*internal/profile.profileMerger).mapSample(src *internal/profile.Sample) *internal/profile.Sample
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:176:1: key => func (*internal/profile.Sample).key() internal/profile.sampleKey
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:207:1: mapLocation => func (*internal/profile.profileMerger).mapLocation(src *internal/profile.Location) *internal/profile.Location
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:242:1: key => func (*internal/profile.Location).key() internal/profile.locationKey
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:269:1: mapMapping => func (*internal/profile.profileMerger).mapMapping(src *internal/profile.Mapping) internal/profile.mapInfo
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:308:1: key => func (*internal/profile.Mapping).key() internal/profile.mappingKey
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:339:1: mapLine => func (*internal/profile.profileMerger).mapLine(src internal/profile.Line) internal/profile.Line
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:347:1: mapFunction => func (*internal/profile.profileMerger).mapFunction(src *internal/profile.Function) *internal/profile.Function
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:373:1: key => func (*internal/profile.Function).key() internal/profile.functionKey
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:389:1: combineHeaders => func internal/profile.combineHeaders(srcs []*internal/profile.Profile) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:440:1: compatible => func (*internal/profile.Profile).compatible(pb *internal/profile.Profile) error
deadcode: C:\Program Files\Go\src\internal\profile\merge.go:459:1: equalValueType => func internal/profile.equalValueType(st1 *internal/profile.ValueType, st2 *internal/profile.ValueType) bool
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:126:1: Parse => func internal/profile.Parse(r io.Reader) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:164:1: parseLegacy => func internal/profile.parseLegacy(data []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:187:1: parseUncompressed => func internal/profile.parseUncompressed(data []byte) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:209:1: setMain => func (*internal/profile.Profile).setMain()
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:228:1: Write => func (*internal/profile.Profile).Write(w io.Writer) error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:241:1: CheckValid => func (*internal/profile.Profile).CheckValid() error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:303:1: Aggregate => func (*internal/profile.Profile).Aggregate(inlineFrame bool, function bool, filename bool, linenumber bool, address bool) error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:346:1: String => func (*internal/profile.Profile).String() string
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:450:1: Merge => func (*internal/profile.Profile).Merge(pb *internal/profile.Profile, r float64) error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:491:1: Compatible => func (*internal/profile.Profile).Compatible(pb *internal/profile.Profile) error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:511:1: HasFunctions => func (*internal/profile.Profile).HasFunctions() bool
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:522:1: HasFileLines => func (*internal/profile.Profile).HasFileLines() bool
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:531:1: compatibleValueTypes => func internal/profile.compatibleValueTypes(v1 *internal/profile.ValueType, v2 *internal/profile.ValueType) bool
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:539:1: Copy => func (*internal/profile.Profile).Copy() *internal/profile.Profile
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:562:1: Demangle => func (*internal/profile.Profile).Demangle(d internal/profile.Demangler) error
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:583:1: Empty => func (*internal/profile.Profile).Empty() bool
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:588:1: Scale => func (*internal/profile.Profile).Scale(ratio float64)
deadcode: C:\Program Files\Go\src\internal\profile\profile.go:600:1: ScaleN => func (*internal/profile.Profile).ScaleN(ratios []float64) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:44:1: marshal => func internal/profile.marshal(m internal/profile.message) []byte
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:50:1: encodeVarint => func internal/profile.encodeVarint(b *internal/profile.buffer, x uint64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:58:1: encodeLength => func internal/profile.encodeLength(b *internal/profile.buffer, tag int, len int)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:63:1: encodeUint64 => func internal/profile.encodeUint64(b *internal/profile.buffer, tag int, x uint64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:69:1: encodeUint64s => func internal/profile.encodeUint64s(b *internal/profile.buffer, tag int, x []uint64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:89:1: encodeUint64Opt => func internal/profile.encodeUint64Opt(b *internal/profile.buffer, tag int, x uint64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:96:1: encodeInt64 => func internal/profile.encodeInt64(b *internal/profile.buffer, tag int, x int64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:101:1: encodeInt64Opt => func internal/profile.encodeInt64Opt(b *internal/profile.buffer, tag int, x int64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:108:1: encodeInt64s => func internal/profile.encodeInt64s(b *internal/profile.buffer, tag int, x []int64)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:128:1: encodeString => func internal/profile.encodeString(b *internal/profile.buffer, tag int, x string)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:133:1: encodeStrings => func internal/profile.encodeStrings(b *internal/profile.buffer, tag int, x []string)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:139:1: encodeBool => func internal/profile.encodeBool(b *internal/profile.buffer, tag int, x bool)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:147:1: encodeBoolOpt => func internal/profile.encodeBoolOpt(b *internal/profile.buffer, tag int, x bool)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:154:1: encodeMessage => func internal/profile.encodeMessage(b *internal/profile.buffer, tag int, m internal/profile.message)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:165:1: unmarshal => func internal/profile.unmarshal(data []byte, m internal/profile.message) (err error)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:170:1: le64 => func internal/profile.le64(p []byte) uint64
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:174:1: le32 => func internal/profile.le32(p []byte) uint32
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:178:1: decodeVarint => func internal/profile.decodeVarint(data []byte) (uint64, []byte, error)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:192:1: decodeField => func internal/profile.decodeField(b *internal/profile.buffer, data []byte) ([]byte, error)
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:237:1: checkType => func internal/profile.checkType(b *internal/profile.buffer, typ int) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:244:1: decodeMessage => func internal/profile.decodeMessage(b *internal/profile.buffer, m internal/profile.message) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:267:1: decodeInt64 => func internal/profile.decodeInt64(b *internal/profile.buffer, x *int64) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:275:1: decodeInt64s => func internal/profile.decodeInt64s(b *internal/profile.buffer, x *[]int64) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:298:1: decodeUint64 => func internal/profile.decodeUint64(b *internal/profile.buffer, x *uint64) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:306:1: decodeUint64s => func internal/profile.decodeUint64s(b *internal/profile.buffer, x *[]uint64) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:329:1: decodeString => func internal/profile.decodeString(b *internal/profile.buffer, x *string) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:337:1: decodeStrings => func internal/profile.decodeStrings(b *internal/profile.buffer, x *[]string) error
deadcode: C:\Program Files\Go\src\internal\profile\proto.go:346:1: decodeBool => func internal/profile.decodeBool(b *internal/profile.buffer, x *bool) error
deadcode: C:\Program Files\Go\src\internal\profile\prune.go:17:1: Prune => func (*internal/profile.Profile).Prune(dropRx *regexp.Regexp, keepRx *regexp.Regexp)
deadcode: C:\Program Files\Go\src\internal\profile\prune.go:81:1: RemoveUninteresting => func (*internal/profile.Profile).RemoveUninteresting() error
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:93:1: init => func net/http/pprof.init()
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:104:1: Cmdline => func net/http/pprof.Cmdline(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:110:1: sleep => func net/http/pprof.sleep(r *net/http.Request, d time.Duration)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:117:1: durationExceedsWriteTimeout => func net/http/pprof.durationExceedsWriteTimeout(r *net/http.Request, seconds float64) bool
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:122:1: serveError => func net/http/pprof.serveError(w net/http.ResponseWriter, status int, txt string)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:133:1: Profile => func net/http/pprof.Profile(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:162:1: Trace => func net/http/pprof.Trace(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:191:1: Symbol => func net/http/pprof.Symbol(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:239:1: Handler => func net/http/pprof.Handler(name string) net/http.Handler
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:245:1: ServeHTTP => func (net/http/pprof.handler).ServeHTTP(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:270:1: serveDeltaProfile => func (net/http/pprof.handler).serveDeltaProfile(w net/http.ResponseWriter, r *net/http.Request, p *runtime/pprof.Profile, secStr string) 
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:335:1: collectProfile => func net/http/pprof.collectProfile(p *runtime/pprof.Profile) (*internal/profile.Profile, error)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:381:1: Index => func net/http/pprof.Index(w net/http.ResponseWriter, r *net/http.Request)
deadcode: C:\Program Files\Go\src\net\http\pprof\pprof.go:420:1: indexTmplExecute => func net/http/pprof.indexTmplExecute(w io.Writer, profiles []net/http/pprof.profileEntry) error
deadcode: C:\h0llyw00dz\GoGenAI-Terminal-Chat\pprof_debug.go:23:1: main => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat.main()
H0llyW00dzZ commented 9 months ago

@adonovan here is full logs, it's so many

function_declarations.log

timothy-king commented 9 months ago

@H0llyW00dzZ The last line is:

C:\h0llyw00dz\GoGenAI-Terminal-Chat\pprof_debug.go:23:1: main => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat.main()

is this immediately before a crash or did this run not crash?

H0llyW00dzZ commented 9 months ago

@H0llyW00dzZ The last line is:

C:\h0llyw00dz\GoGenAI-Terminal-Chat\pprof_debug.go:23:1: main => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat.main()

is this immediately before a crash or did this run not crash?

not crash, its only this

    go func() {
        log.Println("Starting pprof server on http://localhost:6060")
        fmt.Println()
        if err := http.ListenAndServe("localhost:6060", nil); err != nil {
            log.Fatalf("pprof server failed to start: %v", err)
        }
    }()
timothy-king commented 9 months ago

Did the crash in https://github.com/golang/go/issues/65608#issuecomment-1934640458 happen in the process that you ran that generated https://github.com/golang/go/files/14225476/function_declarations.log ? I am trying to know if the last line C:\h0llyw00dz\GoGenAI-Terminal-Chat\pprof_debug.go:23:1: main => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat.main() is the function for the *ast.FuncDecl that caused the crash.

What is curious is that this is a main package and a main function. So it is plausible there was no crash in this execution. It is also plausible that special handling for main is root cause.

H0llyW00dzZ commented 9 months ago

Did the crash in #65608 (comment) happen in the process that you ran that generated https://github.com/golang/go/files/14225476/function_declarations.log ? I am trying to know if the last line C:\h0llyw00dz\GoGenAI-Terminal-Chat\pprof_debug.go:23:1: main => func github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat.main() is the function for the *ast.FuncDecl that caused the crash.

What is curious is that this is a main package and a main function. So it is plausible there was no crash in this execution. It is also plausible that special handling for main is root cause.

package main

import (
    "fmt"
    "log"
    "net/http"
    _ "net/http/pprof"
    "os"
    "time"

    "github.com/H0llyW00dzZ/GoGenAI-Terminal-Chat/terminal"
)

const (
    apiKeyEnvVar = "API_KEY"
    logFatal     = "API_KEY environment variable is not set"
)

func main() {
    // Start profiling server in a new goroutine
    go func() {
        log.Println("Starting pprof server on http://localhost:6060")
        fmt.Println()
        if err := http.ListenAndServe("localhost:6060", nil); err != nil {
            log.Fatalf("pprof server failed to start: %v", err)
        }
    }()

    // Give a moment for the log to flush before starting the interactive session
    time.Sleep(60 * time.Millisecond)

    // Initialize the logger
    logger := terminal.NewDebugOrErrorLogger()
    // Defer RecoverFromPanic to handle any panics gracefully throughout the main function
    defer logger.RecoverFromPanic()

    // Retrieve the API key from environment variable
    apiKey := os.Getenv(apiKeyEnvVar)
    if apiKey == "" {
        logger.Error(logFatal)
        return // Exit the main function if there's no API key
    }

    // Initialize a new chat session
    session := terminal.NewSession(apiKey)
    if session == nil {
        // Handle the error appropriately, knowing it's already been logged
        return // Exit the main function since session creation failed
    }

    // Start the chat session
    session.Start()
}
adonovan commented 9 months ago

Are you able to reproduce the crash ("panic: runtime error", etc) with the modified binary? The log you attached looks like a successful run, which is why it got all the way to main (the last package to be processed) and there was no sign of panic.

H0llyW00dzZ commented 9 months ago

Are you able to reproduce the crash ("panic: runtime error", etc) with the modified binary? The log you attached looks like a successful run, which is why it got all the way to main (the last package to be processed) and there was no sign of panic.

Yes, but yesterday there was an issue causing panic related to this: https://github.com/golang/go/issues/65608#issuecomment-1934640458

adonovan commented 9 months ago

Yes, but yesterday there was an issue causing panic related to this: https://github.com/golang/go/issues/65608#issuecomment-1934640458

So, are you unable to reproduce the crash using the deadcode that you built locally with the extra log statement?

If so, could you try adding the command git checkout -f v0.16.1 after the git clone command and see if that makes any difference? That will ensure that you are running the same version of deadcode as before; the only difference will then be the logging.

Thanks for your patience.

koddr commented 9 months ago

It still here.

screen

go env:

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/user/Library/Caches/go-build'
GOENV='/Users/user/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/user/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/user/sdk/go1.22.0'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/user/sdk/go1.22.0/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.0'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/user/Code/koddr/project/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/ts/ccz1gbk57jq52s4nzhd3l3740000gp/T/go-build2093984824=/tmp/go-build -gno-record-gcc-switches -fno-common'

go run golang.org/x/tools/cmd/deadcode@latest ./...:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x28 pc=0x10502350c]

goroutine 1 [running]:
golang.org/x/tools/go/ssa.memberFromObject(0x14020799580, {0x0, 0x0?}, {0x105184878, 0x1401f8b3a10}, {0x0, 0x0})
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:55 +0x3c
golang.org/x/tools/go/ssa.membersFromDecl(0x14020799580, {0x105184eb0?, 0x1401f8b3a10?}, {0x0, 0x0})
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:184 +0xf4
golang.org/x/tools/go/ssa.(*Program).CreatePackage(0x14000098c30, 0x1401f6e6ea0, {0x1401f6e3b40, 0x7, 0x7}, 0x1401f6d9040, 0x1)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:250 +0x7e8
golang.org/x/tools/go/ssa/ssautil.doPackages.func1(0x1400051d500)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:103 +0xb8
golang.org/x/tools/go/packages.Visit.func1(0x1400051d500)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/packages/visit.go:38 +0x134
golang.org/x/tools/go/packages.Visit({0x1400b888aa0, 0x13, 0x140005acc00?}, 0x0, 0x140001032a8)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/packages/visit.go:43 +0xcc
golang.org/x/tools/go/ssa/ssautil.doPackages({0x1400b888aa0?, 0x13, 0x13}, 0x100, 0x1)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:95 +0x314
golang.org/x/tools/go/ssa/ssautil.AllPackages(...)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:77
main.main()
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/cmd/deadcode/deadcode.go:154 +0x6f8
exit status 2
H0llyW00dzZ commented 9 months ago

It still here.

screen

go env:

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/user/Library/Caches/go-build'
GOENV='/Users/user/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/user/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/user/sdk/go1.22.0'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/user/sdk/go1.22.0/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.0'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/user/Code/koddr/project/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/ts/ccz1gbk57jq52s4nzhd3l3740000gp/T/go-build2093984824=/tmp/go-build -gno-record-gcc-switches -fno-common'

go run golang.org/x/tools/cmd/deadcode@latest ./...:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x28 pc=0x10502350c]

goroutine 1 [running]:
golang.org/x/tools/go/ssa.memberFromObject(0x14020799580, {0x0, 0x0?}, {0x105184878, 0x1401f8b3a10}, {0x0, 0x0})
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:55 +0x3c
golang.org/x/tools/go/ssa.membersFromDecl(0x14020799580, {0x105184eb0?, 0x1401f8b3a10?}, {0x0, 0x0})
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:184 +0xf4
golang.org/x/tools/go/ssa.(*Program).CreatePackage(0x14000098c30, 0x1401f6e6ea0, {0x1401f6e3b40, 0x7, 0x7}, 0x1401f6d9040, 0x1)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/create.go:250 +0x7e8
golang.org/x/tools/go/ssa/ssautil.doPackages.func1(0x1400051d500)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:103 +0xb8
golang.org/x/tools/go/packages.Visit.func1(0x1400051d500)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/packages/visit.go:38 +0x134
golang.org/x/tools/go/packages.Visit({0x1400b888aa0, 0x13, 0x140005acc00?}, 0x0, 0x140001032a8)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/packages/visit.go:43 +0xcc
golang.org/x/tools/go/ssa/ssautil.doPackages({0x1400b888aa0?, 0x13, 0x13}, 0x100, 0x1)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:95 +0x314
golang.org/x/tools/go/ssa/ssautil.AllPackages(...)
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/go/ssa/ssautil/load.go:77
main.main()
        /Users/user/go/pkg/mod/golang.org/x/tools@v0.17.0/cmd/deadcode/deadcode.go:154 +0x6f8
exit status 2

try do this

--- a/go/ssa/create.go
+++ b/go/ssa/create.go
@@ -12,6 +12,7 @@ import (
        "go/ast"
        "go/token"
        "go/types"
+       "log"
        "os"
        "sync"

@@ -181,8 +182,29 @@ func membersFromDecl(pkg *Package, decl ast.Decl, goversion string) {

        case *ast.FuncDecl:
                id := decl.Name
-               memberFromObject(pkg, pkg.info.Defs[id], decl, goversion)
+               pos := pkg.Prog.Fset.Position(decl.Pos()).String()
+               def := pkg.info.Defs[id]
+               logEntry := fmt.Sprintf("%s: %s => %v", pos, id.Name, def)
+               // Replace log.Printf with appendToFile
+               if err := appendToFile("function_declarations.log", logEntry); err != nil {
+                       log.Printf("error writing to log file: %v", err)
+               }
+               memberFromObject(pkg, def, decl, goversion)
+       }
+}
+
+// another method dumping all function declarations instead of using `log.Printf` directly
+func appendToFile(filename, text string) error {
+       f, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+       if err != nil {
+               return err
+       }
+       defer f.Close()
+
+       if _, err := f.WriteString(text + "\n"); err != nil {
+               return err
        }
+       return nil
 }
H0llyW00dzZ commented 9 months ago

Yes, but yesterday there was an issue causing panic related to this: #65608 (comment)

So, are you unable to reproduce the crash using the deadcode that you built locally with the extra log statement?

If so, could you try adding the command git checkout -f v0.16.1 after the git clone command and see if that makes any difference? That will ensure that you are running the same version of deadcode as before; the only difference will then be the logging.

Thanks for your patience.

it's weird Logs: function_declarations.log

$ deadcode .
terminal\config.go:44:6: unreachable func: ConfigureModel
terminal\config.go:142:6: unreachable func: WithSafetyOptions
terminal\deadcode.go:42:6: unreachable func: RecoverFromPanic
terminal\deadcode.go:55:6: unreachable func: IsANSISequence
terminal\deadcode.go:63:6: unreachable func: PrintANSISequence
terminal\deadcode.go:79:6: unreachable func: ApplyBold
terminal\deadcode.go:106:6: unreachable func: HandleUnrecognizedCommand
terminal\deadcode.go:165:6: unreachable func: PrintAnotherVisualSeparator
terminal\deadcode.go:172:6: unreachable func: ReplaceTripleBackticks
terminal\deadcode.go:186:6: unreachable func: IsLastMessage
terminal\debug_or_error.go:180:30: unreachable func: DebugOrErrorLogger.HandleOtherStupidAPIError
terminal\genai.go:256:6: unreachable func: sendToAIWithoutDisplay
terminal\genai.go:273:6: unreachable func: sendMessageAndProcessResponse
terminal\genai.go:294:6: unreachable func: processAIResponse
terminal\genai_embedding.go:40:6: unreachable func: GetEmbedding
terminal\worker.go:13:6: unreachable func: NewChatWorker
terminal\worker.go:22:23: unreachable func: ChatWorker.Start
terminal\worker.go:43:23: unreachable func: ChatWorker.Stop
terminal\fun_stuff\ping.go:12:6: unreachable func: PingIP

it works fine now

adonovan commented 9 months ago

The @latest suffix will select the latest version of the x/tools module (currently v0.17.0), whereas @master will use the latest git commit. The version you were using in the original bug report is v0.16.1, so I suggest you continue to use that while attempting to reproduce the problem (with the extra logging). In v0.16.0, the deadcode command was still internal, hence the message in pkg.go.dev.

H0llyW00dzZ commented 9 months ago

INFO Regarding this issue, I'm not exactly sure how, but it seems to work fine again, even in older versions of the deadcode.

$ deadcode .
terminal\config.go:44:6: unreachable func: ConfigureModel
terminal\config.go:142:6: unreachable func: WithSafetyOptions
terminal\deadcode.go:42:6: unreachable func: RecoverFromPanic
terminal\deadcode.go:55:6: unreachable func: IsANSISequence
terminal\deadcode.go:63:6: unreachable func: PrintANSISequence
terminal\deadcode.go:79:6: unreachable func: ApplyBold
terminal\deadcode.go:106:6: unreachable func: HandleUnrecognizedCommand
terminal\deadcode.go:165:6: unreachable func: PrintAnotherVisualSeparator
terminal\deadcode.go:172:6: unreachable func: ReplaceTripleBackticks
terminal\deadcode.go:186:6: unreachable func: IsLastMessage
terminal\debug_or_error.go:180:30: unreachable func: DebugOrErrorLogger.HandleOtherStupidAPIError
terminal\genai.go:255:19: unreachable func: Session.sendToAIWithoutDisplay
terminal\genai.go:272:19: unreachable func: Session.sendMessageAndProcessResponse
terminal\genai.go:293:19: unreachable func: Session.processAIResponse
terminal\genai_embedding.go:40:6: unreachable func: GetEmbedding
terminal\worker.go:13:6: unreachable func: NewChatWorker
terminal\worker.go:22:23: unreachable func: ChatWorker.Start
terminal\worker.go:43:23: unreachable func: ChatWorker.Stop
terminal\fun_stuff\ping.go:12:6: unreachable func: PingIP
findleyr commented 9 months ago

@adonovan I wonder if we somehow hit this codepath: https://cs.opensource.google/go/x/tools/+/master:go/packages/packages.go;l=963;drc=afe526599a05761410afebbda97cb7b134e8117f

That could result in a package with empty types.Info, even if NeedTypesInfo was set. Perhaps there's something broken involving cgo packages, and the Go version upgrade?

adonovan commented 9 months ago

@adonovan I wonder if we somehow hit this codepath: https://cs.opensource.google/go/x/tools/+/master:go/packages/packages.go;l=963;drc=afe526599a05761410afebbda97cb7b134e8117f

That could result in a package with empty types.Info, even if NeedTypesInfo was set. Perhaps there's something broken involving cgo packages, and the Go version upgrade?

But that would result in a package with errors, and deadcode (as all go/ssa-based tools must) does not attempt SSA construction if there were errors.

adonovan commented 9 months ago

@findleyr and I (well, mostly Rob) just tested this on a Windows machine, but were unable to reproduce the crash.

H0llyW00dzZ commented 9 months ago

@findleyr and I (well, mostly Rob) just tested this on a Windows machine, but were unable to reproduce the crash.

same thing occurred here. Despite the previous crash/panic, it's now functioning correctly even on older versions of deadcode.

image

myitcv commented 9 months ago

@findley and I (well, mostly Rob) just tested this on a Windows machine, but were unable to reproduce the crash.

I think you probably meant @findleyr?

(might be worth you editing the comment in response to your to avoid renaming the wrong @findley)

adonovan commented 9 months ago

I think you probably meant @findleyr?

(might be worth you editing the comment in response to your to avoid renaming the wrong @findley)

Done; thanks.

mvdan commented 8 months ago

Here are reproduction steps following the report we got for CUE at https://github.com/cue-lang/cue/issues/2802. Note that we "fixed" this by doing a bugfix release that rebuilt our binaries with Go 1.22, but as you can see below, the underlying bug persists.

$ git clone https://github.com/ikawaha/cuepanicsample
$ cd cuepanicsample
$ export GOTOOLCHAIN=go1.22.0
$ go install cuelang.org/go/cmd/cue@v0.7.0
$ cue get go .
$ export GOTOOLCHAIN=go1.21.0
$ go install cuelang.org/go/cmd/cue@v0.7.0
$ cue get go .
err: exit status 1: stderr: go: go.mod requires go >= 1.22.0 (running go 1.21.0; GOTOOLCHAIN=go1.21.0)

$ export GOTOOLCHAIN=go1.22.0
$ cue get go .
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xbe0ac5]

goroutine 1 [running]:
cuelang.org/go/cmd/cue/cmd.recoverError(0xc00059de78)
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/root.go:323 +0x76
panic({0xcabd60?, 0x1441880?})
    /home/mvdan/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.0.linux-amd64/src/runtime/panic.go:914 +0x21f
cuelang.org/go/cmd/cue/cmd.(*extractor).recordConsts(0xc0005134d0, 0xc000192480?)
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/get_go.go:621 +0x105
cuelang.org/go/cmd/cue/cmd.(*extractor).extractPkg(0xc0005134d0, {0xc00003c094, 0x1e}, 0xc000192480)
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/get_go.go:447 +0xfad
cuelang.org/go/cmd/cue/cmd.extract(0xc00048eae0, {0xc0004b0290, 0x1, 0x1})
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/get_go.go:416 +0x3b8
cuelang.org/go/cmd/cue/cmd.newGoCmd.mkRunE.func1(0xc000489f00?, {0xc0004b0290, 0x1, 0x1})
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/root.go:92 +0xb6
github.com/spf13/cobra.(*Command).execute(0xc00049b800, {0xc0004b0250, 0x1, 0x1})
    /home/mvdan/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:940 +0x87c
github.com/spf13/cobra.(*Command).ExecuteC(0xc000005b00)
    /home/mvdan/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:1068 +0x3a5
github.com/spf13/cobra.(*Command).Execute(...)
    /home/mvdan/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:992
cuelang.org/go/cmd/cue/cmd.(*Command).Run(0xc00048eae0, {0x3?, 0x3?})
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/root.go:308 +0x65
cuelang.org/go/cmd/cue/cmd.Main()
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/cmd/root.go:236 +0x72
main.main()
    /home/mvdan/go/pkg/mod/cuelang.org/go@v0.7.0/cmd/cue/main.go:24 +0x13

As you can see, building and running with 1.22 works. Building and running with 1.21 fails, as cmd/go is too old - fair enough. But building with 1.21 and running with 1.22 leads to the crash.

gopherbot commented 8 months ago

Change https://go.dev/cl/574255 mentions this issue: go/packages: report type errors unconditionally

timothy-king commented 7 months ago

golang.org/x/vuln 1.10 should now have https://go.dev/cl/574255 included.