...

Source file src/golang.org/x/tools/go/types/typeutil/imports.go

Documentation: golang.org/x/tools/go/types/typeutil

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package typeutil
     6  
     7  import "go/types"
     8  
     9  // Dependencies returns all dependencies of the specified packages.
    10  //
    11  // Dependent packages appear in topological order: if package P imports
    12  // package Q, Q appears earlier than P in the result.
    13  // The algorithm follows import statements in the order they
    14  // appear in the source code, so the result is a total order.
    15  func Dependencies(pkgs ...*types.Package) []*types.Package {
    16  	var result []*types.Package
    17  	seen := make(map[*types.Package]bool)
    18  	var visit func(pkgs []*types.Package)
    19  	visit = func(pkgs []*types.Package) {
    20  		for _, p := range pkgs {
    21  			if !seen[p] {
    22  				seen[p] = true
    23  				visit(p.Imports())
    24  				result = append(result, p)
    25  			}
    26  		}
    27  	}
    28  	visit(pkgs)
    29  	return result
    30  }
    31  

View as plain text