/internal/util/util.go

https://gitlab.com/tSURooT/peco · Go · 92 lines · 77 code · 13 blank · 2 comment · 13 complexity · 832c401c4abafc458b160cf6803a978d MD5 · raw file

  1. package util
  2. import (
  3. "regexp"
  4. "unicode"
  5. )
  6. type fder interface {
  7. Fd() uintptr
  8. }
  9. func CaseInsensitiveIndexFunc(r rune) func(rune) bool {
  10. lr := unicode.ToUpper(r)
  11. return func(v rune) bool {
  12. return lr == unicode.ToUpper(v)
  13. }
  14. }
  15. func ContainsUpper(query string) bool {
  16. for _, c := range query {
  17. if unicode.IsUpper(c) {
  18. return true
  19. }
  20. }
  21. return false
  22. }
  23. // Global var used to strips ansi sequences
  24. var reANSIEscapeChars = regexp.MustCompile("\x1B\\[(?:[0-9]{1,2}(?:;[0-9]{1,2})?)*[a-zA-Z]")
  25. // Function who strips ansi sequences
  26. func StripANSISequence(s string) string {
  27. return reANSIEscapeChars.ReplaceAllString(s, "")
  28. }
  29. type causer interface {
  30. Cause() error
  31. }
  32. type ignorable interface {
  33. Ignorable() bool
  34. }
  35. type collectResults interface {
  36. CollectResults() bool
  37. }
  38. type exitStatuser interface {
  39. ExitStatus() int
  40. }
  41. func IsIgnorableError(err error) bool {
  42. for e := err; e != nil; {
  43. switch e.(type) {
  44. case ignorable:
  45. return e.(ignorable).Ignorable()
  46. case causer:
  47. e = e.(causer).Cause()
  48. default:
  49. return false
  50. }
  51. }
  52. return false
  53. }
  54. func IsCollectResultsError(err error) bool {
  55. for e := err; e != nil; {
  56. switch e.(type) {
  57. case collectResults:
  58. return e.(collectResults).CollectResults()
  59. case causer:
  60. e = e.(causer).Cause()
  61. default:
  62. return false
  63. }
  64. }
  65. return false
  66. }
  67. func GetExitStatus(err error) (int, bool) {
  68. for e := err; e != nil; {
  69. if ese, ok := e.(exitStatuser); ok {
  70. return ese.ExitStatus(), true
  71. }
  72. if cerr, ok := e.(causer); ok {
  73. e = cerr.Cause()
  74. continue
  75. }
  76. break
  77. }
  78. return 1, false
  79. }