1 | |
2 | |
3 | |
4 | |
5 | package export |
6 | |
7 | import ( |
8 | "context" |
9 | |
10 | "golang.org/x/tools/internal/event" |
11 | "golang.org/x/tools/internal/event/core" |
12 | "golang.org/x/tools/internal/event/label" |
13 | ) |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | func Labels(output event.Exporter) event.Exporter { |
21 | return func(ctx context.Context, ev core.Event, lm label.Map) context.Context { |
22 | stored, _ := ctx.Value(labelContextKey).(label.Map) |
23 | if event.IsLabel(ev) || event.IsStart(ev) { |
24 | |
25 | fromEvent := label.Map(ev) |
26 | if stored == nil { |
27 | stored = fromEvent |
28 | } else { |
29 | stored = label.MergeMaps(fromEvent, stored) |
30 | } |
31 | ctx = context.WithValue(ctx, labelContextKey, stored) |
32 | } |
33 | |
34 | lm = label.MergeMaps(lm, stored) |
35 | return output(ctx, ev, lm) |
36 | } |
37 | } |
38 | |