code: func run(dir string, extraExts []string) error {
  	exts := defaultExts.Union(stringset.NewFromSlice(extraExts...)).ToSlice()
  	sort.Strings(exts)
  
  	pkg, err := build.ImportDir(dir, build.ImportComment)
  	if err != nil {
  		return fmt.Errorf("can't import dir %q - %s", dir, err)
  	}
  
  	assets, err := findAssets(pkg.Dir, exts)
  	if err != nil {
  		return fmt.Errorf("can't find assets in %s - %s", pkg.Dir, err)
  	}
  
  	err = generate(assetsGenGoTmpl, pkg, assets, exts, filepath.Join(pkg.Dir, "assets.gen.go"))
  	if err != nil {
  		return fmt.Errorf("can't generate assets.gen.go - %s", err)
  	}
  
  	err = generate(assetsTestTmpl, pkg, assets, exts, filepath.Join(pkg.Dir, "assets_test.go"))
  	if err != nil {
  		return fmt.Errorf("can't generate assets_test.go - %s", err)
  	}
  
  	return nil
  }
docs: // run generates assets.gen.go file with all assets discovered in the directory.