prepend-statements
The prepend-statements
advice inserts new statements rendered by the provided code template before the matched AST node. This is often used to add logic in the preamble of function implementations, and the defer
keyword can be used to also introduce epilogue logic.
Examples
prepend-statements:
imports:
ddtrace: gopkg.in/DataDog/dd-trace-go.v1/ddtrace
ext: gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext
globalconfig: gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig
http: net/http
internal: gopkg.in/DataDog/dd-trace-go.v1/internal
math: math
namingschema: gopkg.in/DataDog/dd-trace-go.v1/internal/namingschema
tracer: gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer
template: "{{- $res := .Function.Result 0 -}}\ndefer func() {\n var analyticsRate float64\n if internal.BoolEnv(\"DD_TRACE_MUX_ANALYTICS_ENABLED\", false) {\n analyticsRate = 1.0\n } else {\n analyticsRate = globalconfig.AnalyticsRate()\n }\n\n {{ $res }}.__dd_config.headerTags = globalconfig.HeaderTagMap()\n {{ $res }}.__dd_config.ignoreRequest = func(*http.Request) bool { return false }\n {{ $res }}.__dd_config.resourceNamer = ddDefaultResourceNamer\n {{ $res }}.__dd_config.serviceName = namingschema.ServiceName(\"mux.router\")\n {{ $res }}.__dd_config.spanOpts = []ddtrace.StartSpanOption{\n tracer.Tag(ext.Component, \"gorilla/mux\"),\n tracer.Tag(ext.SpanKind, ext.SpanKindServer),\n }\n if !math.IsNaN(analyticsRate) {\n {{ $res }}.__dd_config.spanOpts = append(\n {{ $res }}.__dd_config.spanOpts,\n tracer.Tag(ext.EventSampleRate, analyticsRate),\n )\n }\n}()"