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}()"