Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / go / types / typeutil / imports.go
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 //
16 func Dependencies(pkgs ...*types.Package) []*types.Package {
17         var result []*types.Package
18         seen := make(map[*types.Package]bool)
19         var visit func(pkgs []*types.Package)
20         visit = func(pkgs []*types.Package) {
21                 for _, p := range pkgs {
22                         if !seen[p] {
23                                 seen[p] = true
24                                 visit(p.Imports())
25                                 result = append(result, p)
26                         }
27                 }
28         }
29         visit(pkgs)
30         return result
31 }