//golangcitest:args -Espancheck package spancheck import ( "context" "errors" "fmt" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/codes" ) type testDefaultError struct{} func (e *testDefaultError) Error() string { return "foo" } // incorrect func _() { otel.Tracer("foo").Start(context.Background(), "bar") // want "span is unassigned, probable memory leak" ctx, _ := otel.Tracer("foo").Start(context.Background(), "bar") // want "span is unassigned, probable memory leak" fmt.Print(ctx) } func _() { ctx, span := otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak" print(ctx.Done(), span.IsRecording()) } // want "return can be reached without calling span.End" func _() { var ctx, span = otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak" print(ctx.Done(), span.IsRecording()) } // want "return can be reached without calling span.End" func _() { _, span := otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak" _, span = otel.Tracer("foo").Start(context.Background(), "bar") fmt.Print(span) defer span.End() } // want "return can be reached without calling span.End" // correct func _() error { _, span := otel.Tracer("foo").Start(context.Background(), "bar") defer span.End() return nil } func _() error { _, span := otel.Tracer("foo").Start(context.Background(), "bar") defer span.End() if true { return nil } return nil } func _() error { _, span := otel.Tracer("foo").Start(context.Background(), "bar") defer span.End() if false { err := errors.New("foo") span.SetStatus(codes.Error, err.Error()) span.RecordError(err) return err } if true { span.SetStatus(codes.Error, "foo") span.RecordError(errors.New("foo")) return errors.New("bar") } return nil } func _() { _, span := otel.Tracer("foo").Start(context.Background(), "bar") defer span.End() _, span = otel.Tracer("foo").Start(context.Background(), "bar") defer span.End() }