Source File
label.go
Belonging Package
golang.org/x/tools/internal/event/label
// Copyright 2019 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package labelimport ()// Key is used as the identity of a Label.// Keys are intended to be compared by pointer only, the name should be unique// for communicating with external systems, but it is not required or enforced.type Key interface {// Name returns the key name.Name() string// Description returns a string that can be used to describe the value.Description() string// Format is used in formatting to append the value of the label to the// supplied buffer.// The formatter may use the supplied buf as a scratch area to avoid// allocations.Format(w io.Writer, buf []byte, l Label)}// Label holds a key and value pair.// It is normally used when passing around lists of labels.type Label struct {key Keypacked uint64untyped any}// Map is the interface to a collection of Labels indexed by key.type Map interface {// Find returns the label that matches the supplied key.Find(key Key) Label}// List is the interface to something that provides an iterable// list of labels.// Iteration should start from 0 and continue until Valid returns false.type List interface {// Valid returns true if the index is within range for the list.// It does not imply the label at that index will itself be valid.Valid(index int) bool// Label returns the label at the given index.Label(index int) Label}// list implements LabelList for a list of Labels.type list struct {labels []Label}// filter wraps a LabelList filtering out specific labels.type filter struct {keys []Keyunderlying List}// listMap implements LabelMap for a simple list of labels.type listMap struct {labels []Label}// mapChain implements LabelMap for a list of underlying LabelMap.type mapChain struct {maps []Map}// OfValue creates a new label from the key and value.// This method is for implementing new key types, label creation should// normally be done with the Of method of the key.func ( Key, any) Label { return Label{key: , untyped: } }// UnpackValue assumes the label was built using LabelOfValue and returns the value// that was passed to that constructor.// This method is for implementing new key types, for type safety normal// access should be done with the From method of the key.func ( Label) () any { return .untyped }// Of64 creates a new label from a key and a uint64. This is often// used for non uint64 values that can be packed into a uint64.// This method is for implementing new key types, label creation should// normally be done with the Of method of the key.func ( Key, uint64) Label { return Label{key: , packed: } }// Unpack64 assumes the label was built using LabelOf64 and returns the value that// was passed to that constructor.// This method is for implementing new key types, for type safety normal// access should be done with the From method of the key.func ( Label) () uint64 { return .packed }type stringptr unsafe.Pointer// OfString creates a new label from a key and a string.// This method is for implementing new key types, label creation should// normally be done with the Of method of the key.func ( Key, string) Label {:= (*reflect.StringHeader)(unsafe.Pointer(&))return Label{key: ,packed: uint64(.Len),untyped: stringptr(.Data),}}// UnpackString assumes the label was built using LabelOfString and returns the// value that was passed to that constructor.// This method is for implementing new key types, for type safety normal// access should be done with the From method of the key.func ( Label) () string {var string:= (*reflect.StringHeader)(unsafe.Pointer(&)).Data = uintptr(.untyped.(stringptr)).Len = int(.packed)return}// Valid returns true if the Label is a valid one (it has a key).func ( Label) () bool { return .key != nil }// Key returns the key of this Label.func ( Label) () Key { return .key }// Format is used for debug printing of labels.func ( Label) ( fmt.State, rune) {if !.Valid() {io.WriteString(, `nil`)return}io.WriteString(, .Key().Name())io.WriteString(, "=")var [128]byte.Key().Format(, [:0], )}func ( *list) ( int) bool {return >= 0 && < len(.labels)}func ( *list) ( int) Label {return .labels[]}func ( *filter) ( int) bool {return .underlying.Valid()}func ( *filter) ( int) Label {:= .underlying.Label()if slices.Contains(.keys, .Key()) {return Label{}}return}func ( listMap) ( Key) Label {for , := range .labels {if .Key() == {return}}return Label{}}func ( mapChain) ( Key) Label {for , := range .maps {:= .Find()if .Valid() {return}}return Label{}}var emptyList = &list{}func ( ...Label) List {if len() == 0 {return emptyList}return &list{labels: }}func ( List, ...Key) List {if len() == 0 {return}return &filter{keys: , underlying: }}func ( ...Label) Map {return listMap{labels: }}func ( ...Map) Map {var []Mapfor , := range {if != nil {= append(, )}}if len() == 1 {return [0]}return mapChain{maps: }}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)