github.com/jujuyuki/gospal@v1.0.1-0.20210215170718-af79fae13b20/ssa/util.go (about)

     1  package ssa
     2  
     3  import (
     4  	"golang.org/x/tools/go/ssa"
     5  	"golang.org/x/tools/go/ssa/ssautil"
     6  )
     7  
     8  // MainPkgs returns the main packages in the program.
     9  func MainPkgs(prog *ssa.Program, tests bool) ([]*ssa.Package, error) {
    10  	pkgs := prog.AllPackages()
    11  
    12  	var mains []*ssa.Package
    13  	if tests {
    14  		for _, pkg := range pkgs {
    15  			if main := prog.CreateTestMainPackage(pkg); main != nil {
    16  				mains = append(mains, main)
    17  			}
    18  		}
    19  		if mains == nil {
    20  			return nil, ErrNoTestMainPkgs
    21  		}
    22  		return mains, nil
    23  	}
    24  
    25  	mains = append(mains, ssautil.MainPackages(pkgs)...)
    26  	if len(mains) == 0 {
    27  		return nil, ErrNoMainPkgs
    28  	}
    29  	return mains, nil
    30  }