var DEBUG_LABEL_FILTER_PARSING … type LabelFilter … func matchLabelAction(label string) LabelFilter { … } func matchLabelRegexAction(regex *regexp.Regexp) LabelFilter { … } func notAction(filter LabelFilter) LabelFilter { … } func andAction(a, b LabelFilter) LabelFilter { … } func orAction(a, b LabelFilter) LabelFilter { … } func labelSetFor(key string, labels []string) map[string]bool { … } func isEmptyLabelSetAction(key string) LabelFilter { … } func containsAnyLabelSetAction(key string, expectedValues []string) LabelFilter { … } func containsAllLabelSetAction(key string, expectedValues []string) LabelFilter { … } func consistsOfLabelSetAction(key string, expectedValues []string) LabelFilter { … } func isSubsetOfLabelSetAction(key string, expectedValues []string) LabelFilter { … } type lfToken … const lfTokenInvalid … const lfTokenRoot … const lfTokenOpenGroup … const lfTokenCloseGroup … const lfTokenNot … const lfTokenAnd … const lfTokenOr … const lfTokenRegexp … const lfTokenLabel … const lfTokenSetKey … const lfTokenSetOperation … const lfTokenSetArgument … const lfTokenEOF … func (l lfToken) Precedence() int { … } func (l lfToken) String() string { … } type treeNode … func (tn *treeNode) setRightNode(node *treeNode) { … } func (tn *treeNode) setLeftNode(node *treeNode) { … } func (tn *treeNode) firstAncestorWithPrecedenceLEQ(precedence int) *treeNode { … } func (tn *treeNode) firstUnmatchedOpenNode() *treeNode { … } func (tn *treeNode) constructLabelFilter(input string) (LabelFilter, error) { … } func (tn *treeNode) tokenString() string { … } func (tn *treeNode) toString(indent int) string { … } var validSetOperations … func tokenize(input string) func() (*treeNode, error) { … } func MustParseLabelFilter(input string) LabelFilter { … } func ParseLabelFilter(input string) (LabelFilter, error) { … } func ValidateAndCleanupLabel(label string, cl CodeLocation) (string, error) { … }