github.com/rstandt/terraform@v0.12.32-0.20230710220336-b1063613405c/backend/remote/colorize.go (about) 1 package remote 2 3 import ( 4 "regexp" 5 6 "github.com/mitchellh/colorstring" 7 ) 8 9 // TODO SvH: This file should be deleted and the type cliColorize should be 10 // renamed back to Colorize as soon as we can pass -no-color to the backend. 11 12 // colorsRe is used to find ANSI escaped color codes. 13 var colorsRe = regexp.MustCompile("\033\\[\\d{1,3}m") 14 15 // Colorer is the interface that must be implemented to colorize strings. 16 type Colorer interface { 17 Color(v string) string 18 } 19 20 // Colorize is used to print output when the -no-color flag is used. It will 21 // strip all ANSI escaped color codes which are set while the operation was 22 // executed in Terraform Enterprise. 23 // 24 // When Terraform Enterprise supports run specific variables, this code can be 25 // removed as we can then pass the CLI flag to the backend and prevent the color 26 // codes from being written to the output. 27 type Colorize struct { 28 cliColor *colorstring.Colorize 29 } 30 31 // Color will strip all ANSI escaped color codes and return a uncolored string. 32 func (c *Colorize) Color(v string) string { 33 return colorsRe.ReplaceAllString(c.cliColor.Color(v), "") 34 } 35 36 // Colorize returns the Colorize structure that can be used for colorizing 37 // output. This is guaranteed to always return a non-nil value and so is useful 38 // as a helper to wrap any potentially colored strings. 39 func (b *Remote) Colorize() Colorer { 40 if b.CLIColor != nil && !b.CLIColor.Disable { 41 return b.CLIColor 42 } 43 if b.CLIColor != nil { 44 return &Colorize{cliColor: b.CLIColor} 45 } 46 return &Colorize{cliColor: &colorstring.Colorize{ 47 Colors: colorstring.DefaultColors, 48 Disable: true, 49 }} 50 }