func()

in cmd/kazel/generator.go [58:111]


func (v *Vendorer) findGeneratorTags(root string, requestedTags map[string]bool) (tagsValuesPkgs, tagsPkgsValues generatorTagsMap, err error) {
	tagsValuesPkgs = make(generatorTagsMap)
	tagsPkgsValues = make(generatorTagsMap)

	err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		pkg := filepath.Dir(path)

		for _, r := range v.skippedK8sCodegenPaths {
			if r.MatchString(pkg) {
				return filepath.SkipDir
			}
		}

		if !strings.HasSuffix(path, ".go") || strings.HasSuffix(path, "_test.go") {
			return nil
		}

		b, err := ioutil.ReadFile(path)
		if err != nil {
			return err
		}

		for tag, values := range extractTags(b, requestedTags) {
			if _, present := tagsValuesPkgs[tag]; !present {
				tagsValuesPkgs[tag] = make(map[string]map[string]bool)
			}
			if _, present := tagsPkgsValues[tag]; !present {
				tagsPkgsValues[tag] = make(map[string]map[string]bool)
			}
			if _, present := tagsPkgsValues[tag][pkg]; !present {
				tagsPkgsValues[tag][pkg] = make(map[string]bool)
			}
			for _, v := range values {
				if _, present := tagsValuesPkgs[tag][v]; !present {
					tagsValuesPkgs[tag][v] = make(map[string]bool)
				}
				// Since multiple files in the same package may list a given tag/value, use a set to deduplicate.
				tagsValuesPkgs[tag][v][pkg] = true
				tagsPkgsValues[tag][pkg][v] = true
			}
		}

		return nil
	})

	if err != nil {
		return nil, nil, err
	}

	return
}