loadmode_string.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2019 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. package packages
  5. import (
  6. "fmt"
  7. "strings"
  8. )
  9. var modes = [...]struct {
  10. mode LoadMode
  11. name string
  12. }{
  13. {NeedName, "NeedName"},
  14. {NeedFiles, "NeedFiles"},
  15. {NeedCompiledGoFiles, "NeedCompiledGoFiles"},
  16. {NeedImports, "NeedImports"},
  17. {NeedDeps, "NeedDeps"},
  18. {NeedExportFile, "NeedExportFile"},
  19. {NeedTypes, "NeedTypes"},
  20. {NeedSyntax, "NeedSyntax"},
  21. {NeedTypesInfo, "NeedTypesInfo"},
  22. {NeedTypesSizes, "NeedTypesSizes"},
  23. {NeedForTest, "NeedForTest"},
  24. {NeedModule, "NeedModule"},
  25. {NeedEmbedFiles, "NeedEmbedFiles"},
  26. {NeedEmbedPatterns, "NeedEmbedPatterns"},
  27. {NeedTarget, "NeedTarget"},
  28. }
  29. func (mode LoadMode) String() string {
  30. if mode == 0 {
  31. return "LoadMode(0)"
  32. }
  33. var out []string
  34. // named bits
  35. for _, item := range modes {
  36. if (mode & item.mode) != 0 {
  37. mode ^= item.mode
  38. out = append(out, item.name)
  39. }
  40. }
  41. // unnamed residue
  42. if mode != 0 {
  43. if out == nil {
  44. return fmt.Sprintf("LoadMode(%#x)", int(mode))
  45. }
  46. out = append(out, fmt.Sprintf("%#x", int(mode)))
  47. }
  48. if len(out) == 1 {
  49. return out[0]
  50. }
  51. return "(" + strings.Join(out, "|") + ")"
  52. }