// Copyright 2019 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package packages | |
import ( | |
"fmt" | |
"strings" | |
) | |
var allModes = []LoadMode{ | |
NeedName, | |
NeedFiles, | |
NeedCompiledGoFiles, | |
NeedImports, | |
NeedDeps, | |
NeedExportsFile, | |
NeedTypes, | |
NeedSyntax, | |
NeedTypesInfo, | |
NeedTypesSizes, | |
} | |
var modeStrings = []string{ | |
"NeedName", | |
"NeedFiles", | |
"NeedCompiledGoFiles", | |
"NeedImports", | |
"NeedDeps", | |
"NeedExportsFile", | |
"NeedTypes", | |
"NeedSyntax", | |
"NeedTypesInfo", | |
"NeedTypesSizes", | |
} | |
func (mod LoadMode) String() string { | |
m := mod | |
if m == 0 { | |
return "LoadMode(0)" | |
} | |
var out []string | |
for i, x := range allModes { | |
if x > m { | |
break | |
} | |
if (m & x) != 0 { | |
out = append(out, modeStrings[i]) | |
m = m ^ x | |
} | |
} | |
if m != 0 { | |
out = append(out, "Unknown") | |
} | |
return fmt.Sprintf("LoadMode(%s)", strings.Join(out, "|")) | |
} |