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.

Execution Order: Multiple prepend-statements are executed in reverse order (last prepended executes first). Use namespace and order properties to control the relative execution order across different aspects.

Examples

prepend-statements:
  imports:
    ddtrace: github.com/DataDog/dd-trace-go/v2/ddtrace
    ext: github.com/DataDog/dd-trace-go/v2/ddtrace/ext
    globalconfig: github.com/DataDog/dd-trace-go/v2/internal/globalconfig
    http: net/http
    internal: github.com/DataDog/dd-trace-go/v2/internal
    math: math
    namingschema: github.com/DataDog/dd-trace-go/v2/internal/namingschema
    tracer: github.com/DataDog/dd-trace-go/v2/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}()"