func()

in parser/parse.go [244:284]


func (b *Builder) AddDirRecursive(dir string) error {
	// Add the root.
	if _, err := b.importPackage(dir, true); err != nil {
		klog.Warningf("Ignoring directory %v: %v", dir, err)
	}

	// filepath.Walk does not follow symlinks. We therefore evaluate symlinks and use that with
	// filepath.Walk.
	buildPkg, ok := b.getLoadedBuildPackage(dir)
	if !ok {
		return fmt.Errorf("no loaded build package for %s", dir)
	}
	realPath, err := filepath.EvalSymlinks(buildPkg.Dir)
	if err != nil {
		return err
	}

	fn := func(filePath string, info os.FileInfo, err error) error {
		if info != nil && info.IsDir() {
			rel := filepath.ToSlash(strings.TrimPrefix(filePath, realPath))
			if rel != "" {
				// Make a pkg path.
				buildPkg, ok := b.getLoadedBuildPackage(dir)
				if !ok {
					return fmt.Errorf("no loaded build package for %s", dir)
				}
				pkg := path.Join(string(canonicalizeImportPath(buildPkg.ImportPath)), rel)

				// Add it.
				if _, err := b.importPackage(pkg, true); err != nil {
					klog.Warningf("Ignoring child directory %v: %v", pkg, err)
				}
			}
		}
		return nil
	}
	if err := filepath.Walk(realPath, fn); err != nil {
		return err
	}
	return nil
}