From 12ebc30b8e8934616630fa140207bb49bd4d9a7c Mon Sep 17 00:00:00 2001 From: Joshua Pritchard Date: Wed, 25 Jan 2023 11:12:39 -0500 Subject: [PATCH] Fix most data race conditions & run tests with --race enabled --- .github/workflows/go.yml | 5 +- barchart.go | 2 +- bigtext_printer.go | 2 +- center_printer.go | 2 +- color.go | 16 +- coverage.txt | 2009 +++++++++++++---------- go.mod | 1 + go.sum | 2 + header_printer.go | 2 +- interactive_confirm_printer_test.go | 2 + interactive_continue_printer_test.go | 2 + interactive_multiselect_printer_test.go | 2 + interactive_select_printer_test.go | 2 + interactive_textinput_printer_test.go | 2 + panel_printer.go | 2 +- paragraph_printer.go | 2 +- prefix_printer.go | 18 +- print.go | 60 +- print_test.go | 54 +- progressbar_printer.go | 23 +- progressbar_printer_test.go | 35 +- pterm.go | 24 +- pterm_test.go | 21 +- spinner_printer.go | 131 +- spinner_printer_test.go | 4 +- terminal.go | 21 +- utils_test.go | 29 +- 27 files changed, 1456 insertions(+), 1019 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 7092d3547..3c0e25604 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -31,8 +31,11 @@ jobs: - name: Build run: go build -v . + - name: Test Race + run: go test -race -p 1 . + - name: Test - run: go test -coverprofile="coverage.txt" -covermode=atomic -p 1 . + run: go test -race -coverprofile="coverage.txt" -covermode=atomic -p 1 . - name: Upload coverage to Codecov if: success() && matrix.os == 'ubuntu-latest' diff --git a/barchart.go b/barchart.go index 888671935..4069e6424 100644 --- a/barchart.go +++ b/barchart.go @@ -245,7 +245,7 @@ func (p BarChartPrinter) Srender() (string, error) { } // ================================================================================================================= - if RawOutput { + if RawOutput.Load() { return p.getRawOutput(), nil } for i, bar := range p.Bars { diff --git a/bigtext_printer.go b/bigtext_printer.go index d80d96eeb..5c99928d2 100644 --- a/bigtext_printer.go +++ b/bigtext_printer.go @@ -74,7 +74,7 @@ func (p BigTextPrinter) WithWriter(writer io.Writer) *BigTextPrinter { func (p BigTextPrinter) Srender() (string, error) { var ret string - if RawOutput { + if RawOutput.Load() { for _, letter := range p.Letters { ret += letter.String } diff --git a/center_printer.go b/center_printer.go index 7bf27586d..503a60a8c 100644 --- a/center_printer.go +++ b/center_printer.go @@ -37,7 +37,7 @@ func (p CenterPrinter) WithWriter(writer io.Writer) *CenterPrinter { // Sprint formats using the default formats for its operands and returns the resulting string. // Spaces are added between operands when neither is a string. func (p CenterPrinter) Sprint(a ...interface{}) string { - if RawOutput { + if RawOutput.Load() { return Sprint(a...) } diff --git a/color.go b/color.go index 5f7eeef3a..4640c13ae 100644 --- a/color.go +++ b/color.go @@ -12,12 +12,16 @@ var PrintColor = true // EnableColor enables colors. func EnableColor() { + pLock.Lock() + defer pLock.Unlock() color.Enable = true PrintColor = true } // DisableColor disables colors. func DisableColor() { + pLock.Lock() + defer pLock.Unlock() color.Enable = false PrintColor = false } @@ -148,10 +152,12 @@ func (c Color) Sprintln(a ...interface{}) string { // Spaces are added between operands when neither is a string. // Input will be colored with the parent Color. func (c Color) Sprint(a ...interface{}) string { - message := Sprint(a...) + pLock.Lock() + defer pLock.Unlock() + message := color.Sprint(a...) messageLines := strings.Split(message, "\n") for i, line := range messageLines { - messageLines[i] = color.RenderCode(c.String(), strings.ReplaceAll(line, color.ResetSet, Sprintf("\x1b[0m\u001B[%sm", c.String()))) + messageLines[i] = color.RenderCode(c.String(), strings.ReplaceAll(line, color.ResetSet, color.Sprintf("\x1b[0m\u001B[%sm", c.String()))) } message = strings.Join(messageLines, "\n") return message @@ -280,10 +286,12 @@ func (s Style) Add(styles ...Style) Style { // Spaces are added between operands when neither is a string. // Input will be colored with the parent Style. func (s Style) Sprint(a ...interface{}) string { - message := Sprint(a...) + pLock.Lock() + defer pLock.Unlock() + message := color.Sprint(a...) messageLines := strings.Split(message, "\n") for i, line := range messageLines { - messageLines[i] = color.RenderCode(s.String(), strings.ReplaceAll(line, color.ResetSet, Sprintf("\x1b[0m\u001B[%sm", s.String()))) + messageLines[i] = color.RenderCode(s.String(), strings.ReplaceAll(line, color.ResetSet, color.Sprintf("\x1b[0m\u001B[%sm", s.String()))) } message = strings.Join(messageLines, "\n") return color.RenderCode(s.String(), message) diff --git a/coverage.txt b/coverage.txt index 330b7db4f..7fb26e0ea 100644 --- a/coverage.txt +++ b/coverage.txt @@ -1,589 +1,10 @@ mode: atomic -github.com/pterm/pterm/internal/percentage.go:6.49,8.2 1 8 -github.com/pterm/pterm/internal/percentage.go:11.54,13.2 1 4 -github.com/pterm/pterm/internal/remove_and_count_prefix.go:7.66,11.2 3 0 -github.com/pterm/pterm/internal/title_in_line.go:10.71,12.10 2 0 -github.com/pterm/pterm/internal/title_in_line.go:18.2,18.12 1 0 -github.com/pterm/pterm/internal/title_in_line.go:12.10,14.3 1 0 -github.com/pterm/pterm/internal/title_in_line.go:14.8,16.3 1 0 -github.com/pterm/pterm/internal/title_in_line.go:22.66,30.2 5 0 -github.com/pterm/pterm/internal/map_range_to_range.go:3.75,4.26 1 4 -github.com/pterm/pterm/internal/map_range_to_range.go:7.2,7.73 1 4 -github.com/pterm/pterm/internal/map_range_to_range.go:4.26,6.3 1 0 -github.com/pterm/pterm/internal/max_text_width.go:11.38,14.24 3 0 -github.com/pterm/pterm/internal/max_text_width.go:19.2,19.12 1 0 -github.com/pterm/pterm/internal/max_text_width.go:14.24,15.55 1 0 -github.com/pterm/pterm/internal/max_text_width.go:15.55,17.4 1 0 -github.com/pterm/pterm/internal/center_text.go:10.48,13.32 3 2 -github.com/pterm/pterm/internal/center_text.go:36.2,37.26 2 2 -github.com/pterm/pterm/internal/center_text.go:41.2,41.39 1 2 -github.com/pterm/pterm/internal/center_text.go:13.32,14.41 1 4 -github.com/pterm/pterm/internal/center_text.go:14.41,17.32 3 1 -github.com/pterm/pterm/internal/center_text.go:24.4,24.41 1 1 -github.com/pterm/pterm/internal/center_text.go:17.32,18.31 1 11 -github.com/pterm/pterm/internal/center_text.go:22.5,22.52 1 11 -github.com/pterm/pterm/internal/center_text.go:18.31,21.6 2 2 -github.com/pterm/pterm/internal/center_text.go:24.41,28.5 3 3 -github.com/pterm/pterm/internal/center_text.go:29.9,33.4 3 3 -github.com/pterm/pterm/internal/center_text.go:37.26,39.3 1 6 -github.com/pterm/pterm/internal/longest_line.go:11.49,14.29 3 0 -github.com/pterm/pterm/internal/longest_line.go:20.2,20.16 1 0 -github.com/pterm/pterm/internal/longest_line.go:14.29,15.101 1 0 -github.com/pterm/pterm/internal/longest_line.go:15.101,17.4 1 0 -github.com/pterm/pterm/internal/with_boolean.go:4.33,5.17 1 0 -github.com/pterm/pterm/internal/with_boolean.go:8.2,8.13 1 0 -github.com/pterm/pterm/internal/with_boolean.go:5.17,7.3 1 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:20.58,25.2 4 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:29.121,32.16 3 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:36.2,37.16 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:41.2,45.16 4 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:49.2,50.73 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:55.2,56.16 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:60.2,61.12 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:32.16,34.3 1 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:37.16,40.3 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:45.16,47.3 1 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:50.73,53.3 2 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:56.16,58.3 1 0 -github.com/pterm/pterm/putils/download-with-progressbar.go:66.96,68.2 1 0 -github.com/pterm/pterm/putils/run-with-spinner.go:6.103,8.16 2 0 -github.com/pterm/pterm/putils/run-with-spinner.go:12.2,15.12 3 0 -github.com/pterm/pterm/putils/run-with-spinner.go:8.16,10.3 1 0 -github.com/pterm/pterm/putils/run-with-spinner.go:19.107,21.2 1 0 -github.com/pterm/pterm/putils/stats.go:11.70,13.29 2 0 -github.com/pterm/pterm/putils/stats.go:25.2,29.12 3 0 -github.com/pterm/pterm/putils/stats.go:13.29,18.17 4 0 -github.com/pterm/pterm/putils/stats.go:22.3,22.20 1 0 -github.com/pterm/pterm/putils/stats.go:18.17,20.4 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:13.105,15.32 2 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:18.2,21.30 3 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:26.2,26.33 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:30.2,33.33 3 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:37.2,44.33 4 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:52.2,52.26 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:61.2,63.22 2 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:15.32,17.3 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:21.30,24.3 2 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:26.33,28.3 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:33.33,35.3 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:44.33,45.16 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:45.16,47.4 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:47.9,49.4 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:52.26,55.34 3 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:59.3,59.36 1 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:55.34,58.4 2 0 -github.com/pterm/pterm/putils/tabledata-from-struct-slice.go:69.79,71.2 1 0 -github.com/pterm/pterm/putils/tabledata_from_csv.go:11.56,13.2 1 1 -github.com/pterm/pterm/putils/tabledata_from_separated_values.go:13.99,14.57 1 3 -github.com/pterm/pterm/putils/tabledata_from_separated_values.go:18.2,18.8 1 3 -github.com/pterm/pterm/putils/tabledata_from_separated_values.go:14.57,16.3 1 6 -github.com/pterm/pterm/putils/tabledata_from_tsv.go:11.56,13.2 1 1 -github.com/pterm/pterm/rgb.go:23.42,25.2 1 14316 -github.com/pterm/pterm/rgb.go:28.32,30.2 1 28640 -github.com/pterm/pterm/rgb.go:33.45,38.19 4 12 -github.com/pterm/pterm/rgb.go:41.2,41.19 1 12 -github.com/pterm/pterm/rgb.go:45.2,46.16 2 8 -github.com/pterm/pterm/rgb.go:49.2,55.8 2 7 -github.com/pterm/pterm/rgb.go:38.19,40.3 1 4 -github.com/pterm/pterm/rgb.go:41.19,43.3 1 4 -github.com/pterm/pterm/rgb.go:46.16,48.3 1 1 -github.com/pterm/pterm/rgb.go:59.62,60.13 1 14416 -github.com/pterm/pterm/rgb.go:65.2,65.19 1 14416 -github.com/pterm/pterm/rgb.go:85.2,85.10 1 1 -github.com/pterm/pterm/rgb.go:60.13,64.3 3 2 -github.com/pterm/pterm/rgb.go:65.19,71.3 1 14411 -github.com/pterm/pterm/rgb.go:71.8,71.25 1 5 -github.com/pterm/pterm/rgb.go:71.25,74.18 3 4 -github.com/pterm/pterm/rgb.go:74.18,76.4 1 1 -github.com/pterm/pterm/rgb.go:76.9,77.36 1 3 -github.com/pterm/pterm/rgb.go:77.36,79.24 2 3 -github.com/pterm/pterm/rgb.go:79.24,81.6 1 3 -github.com/pterm/pterm/rgb.go:90.46,92.2 1 4224 -github.com/pterm/pterm/rgb.go:96.48,98.2 1 1950 -github.com/pterm/pterm/rgb.go:101.62,103.2 1 2052 -github.com/pterm/pterm/rgb.go:107.64,109.2 1 1944 -github.com/pterm/pterm/rgb.go:114.51,118.2 3 54 -github.com/pterm/pterm/rgb.go:123.53,127.2 3 978 -github.com/pterm/pterm/rgb.go:131.67,135.2 3 54 -github.com/pterm/pterm/rgb.go:140.69,144.2 3 972 -github.com/pterm/pterm/rgb.go:149.58,150.24 1 6 -github.com/pterm/pterm/rgb.go:158.2,159.12 2 6 -github.com/pterm/pterm/rgb.go:150.24,151.33 1 6 -github.com/pterm/pterm/rgb.go:151.33,152.18 1 3 -github.com/pterm/pterm/rgb.go:152.18,154.5 1 3 -github.com/pterm/pterm/rgb.go:165.74,166.24 1 6 -github.com/pterm/pterm/rgb.go:174.2,175.12 2 6 -github.com/pterm/pterm/rgb.go:166.24,167.33 1 6 -github.com/pterm/pterm/rgb.go:167.33,168.18 1 3 -github.com/pterm/pterm/rgb.go:168.18,170.5 1 3 -github.com/pterm/pterm/bigtext_printer.go:17.48,19.2 1 3 -github.com/pterm/pterm/bigtext_printer.go:22.71,26.23 3 6 -github.com/pterm/pterm/bigtext_printer.go:33.2,33.10 1 6 -github.com/pterm/pterm/bigtext_printer.go:26.23,31.3 1 19 -github.com/pterm/pterm/bigtext_printer.go:37.64,41.23 3 2 -github.com/pterm/pterm/bigtext_printer.go:49.2,49.10 1 2 -github.com/pterm/pterm/bigtext_printer.go:41.23,47.3 1 7 -github.com/pterm/pterm/bigtext_printer.go:60.49,63.2 2 1 -github.com/pterm/pterm/bigtext_printer.go:66.42,69.2 2 1 -github.com/pterm/pterm/bigtext_printer.go:72.46,75.2 2 1 -github.com/pterm/pterm/bigtext_printer.go:87.84,90.2 2 1 -github.com/pterm/pterm/bigtext_printer.go:93.73,95.33 2 5 -github.com/pterm/pterm/bigtext_printer.go:98.2,99.11 2 5 -github.com/pterm/pterm/bigtext_printer.go:95.33,97.3 1 6 -github.com/pterm/pterm/bigtext_printer.go:103.76,106.2 2 0 -github.com/pterm/pterm/bigtext_printer.go:109.51,112.15 2 8 -github.com/pterm/pterm/bigtext_printer.go:119.2,120.30 2 5 -github.com/pterm/pterm/bigtext_printer.go:130.2,132.31 2 5 -github.com/pterm/pterm/bigtext_printer.go:139.2,139.34 1 5 -github.com/pterm/pterm/bigtext_printer.go:161.2,161.17 1 5 -github.com/pterm/pterm/bigtext_printer.go:112.15,113.36 1 3 -github.com/pterm/pterm/bigtext_printer.go:116.3,116.18 1 3 -github.com/pterm/pterm/bigtext_printer.go:113.36,115.4 1 15 -github.com/pterm/pterm/bigtext_printer.go:120.30,121.47 1 20 -github.com/pterm/pterm/bigtext_printer.go:121.47,127.4 1 20 -github.com/pterm/pterm/bigtext_printer.go:132.31,134.20 2 20 -github.com/pterm/pterm/bigtext_printer.go:134.20,136.4 1 4 -github.com/pterm/pterm/bigtext_printer.go:139.34,140.37 1 21 -github.com/pterm/pterm/bigtext_printer.go:158.3,158.14 1 21 -github.com/pterm/pterm/bigtext_printer.go:140.37,144.28 4 100 -github.com/pterm/pterm/bigtext_printer.go:147.4,148.41 2 100 -github.com/pterm/pterm/bigtext_printer.go:152.4,152.29 1 100 -github.com/pterm/pterm/bigtext_printer.go:144.28,146.5 1 100 -github.com/pterm/pterm/bigtext_printer.go:148.41,150.5 1 7 -github.com/pterm/pterm/bigtext_printer.go:152.29,154.5 1 25 -github.com/pterm/pterm/bigtext_printer.go:154.10,156.5 1 75 -github.com/pterm/pterm/bigtext_printer.go:165.40,170.2 3 7 -github.com/pterm/pterm/panel_printer.go:36.63,39.2 2 96 -github.com/pterm/pterm/panel_printer.go:42.62,43.17 1 2 -github.com/pterm/pterm/panel_printer.go:46.2,47.11 2 2 -github.com/pterm/pterm/panel_printer.go:43.17,45.3 1 1 -github.com/pterm/pterm/panel_printer.go:51.74,52.23 1 20 -github.com/pterm/pterm/panel_printer.go:55.2,56.11 2 20 -github.com/pterm/pterm/panel_printer.go:52.23,54.3 1 1 -github.com/pterm/pterm/panel_printer.go:60.68,64.2 3 19 -github.com/pterm/pterm/panel_printer.go:67.75,70.2 2 19 -github.com/pterm/pterm/panel_printer.go:73.72,76.2 2 0 -github.com/pterm/pterm/panel_printer.go:78.45,80.33 2 45 -github.com/pterm/pterm/panel_printer.go:86.2,86.12 1 45 -github.com/pterm/pterm/panel_printer.go:80.33,81.32 1 99 -github.com/pterm/pterm/panel_printer.go:84.3,84.14 1 99 -github.com/pterm/pterm/panel_printer.go:81.32,83.4 1 117 -github.com/pterm/pterm/panel_printer.go:90.49,93.15 2 96 -github.com/pterm/pterm/panel_printer.go:97.2,97.26 1 51 -github.com/pterm/pterm/panel_printer.go:103.2,103.36 1 51 -github.com/pterm/pterm/panel_printer.go:111.2,111.26 1 51 -github.com/pterm/pterm/panel_printer.go:119.2,121.23 2 51 -github.com/pterm/pterm/panel_printer.go:131.2,131.35 1 51 -github.com/pterm/pterm/panel_printer.go:181.2,181.17 1 51 -github.com/pterm/pterm/panel_printer.go:93.15,95.3 1 45 -github.com/pterm/pterm/panel_printer.go:97.26,98.31 1 104 -github.com/pterm/pterm/panel_printer.go:98.31,100.4 1 126 -github.com/pterm/pterm/panel_printer.go:103.36,104.27 1 9 -github.com/pterm/pterm/panel_printer.go:104.27,105.32 1 18 -github.com/pterm/pterm/panel_printer.go:105.32,107.5 1 27 -github.com/pterm/pterm/panel_printer.go:111.26,112.27 1 104 -github.com/pterm/pterm/panel_printer.go:112.27,113.32 1 54 -github.com/pterm/pterm/panel_printer.go:113.32,115.5 1 72 -github.com/pterm/pterm/panel_printer.go:121.23,122.34 1 9 -github.com/pterm/pterm/panel_printer.go:122.34,123.29 1 27 -github.com/pterm/pterm/panel_printer.go:123.29,124.68 1 27 -github.com/pterm/pterm/panel_printer.go:124.68,126.6 1 21 -github.com/pterm/pterm/panel_printer.go:131.35,136.31 3 104 -github.com/pterm/pterm/panel_printer.go:140.3,140.40 1 104 -github.com/pterm/pterm/panel_printer.go:144.3,144.38 1 104 -github.com/pterm/pterm/panel_printer.go:151.3,151.34 1 104 -github.com/pterm/pterm/panel_printer.go:136.31,138.4 1 126 -github.com/pterm/pterm/panel_printer.go:140.40,142.4 1 126 -github.com/pterm/pterm/panel_printer.go:144.38,146.26 2 126 -github.com/pterm/pterm/panel_printer.go:146.26,148.5 1 104 -github.com/pterm/pterm/panel_printer.go:151.34,152.22 1 215 -github.com/pterm/pterm/panel_printer.go:152.22,153.43 1 215 -github.com/pterm/pterm/panel_printer.go:176.5,176.16 1 215 -github.com/pterm/pterm/panel_printer.go:153.43,157.28 4 312 -github.com/pterm/pterm/panel_printer.go:160.6,160.30 1 312 -github.com/pterm/pterm/panel_printer.go:163.6,164.28 2 312 -github.com/pterm/pterm/panel_printer.go:173.6,174.23 2 312 -github.com/pterm/pterm/panel_printer.go:157.28,159.7 1 285 -github.com/pterm/pterm/panel_printer.go:160.30,162.7 1 276 -github.com/pterm/pterm/panel_printer.go:164.28,165.44 1 285 -github.com/pterm/pterm/panel_printer.go:165.44,167.8 1 87 -github.com/pterm/pterm/panel_printer.go:168.12,169.51 1 27 -github.com/pterm/pterm/panel_printer.go:169.51,171.8 1 17 -github.com/pterm/pterm/panel_printer.go:185.38,190.2 3 92 -github.com/pterm/pterm/tree_printer.go:51.63,54.2 2 1 -github.com/pterm/pterm/tree_printer.go:57.63,60.2 2 1 -github.com/pterm/pterm/tree_printer.go:63.70,66.2 2 1 -github.com/pterm/pterm/tree_printer.go:69.75,72.2 2 1 -github.com/pterm/pterm/tree_printer.go:75.66,78.2 2 1 -github.com/pterm/pterm/tree_printer.go:81.64,84.2 2 1 -github.com/pterm/pterm/tree_printer.go:87.59,90.2 2 8 -github.com/pterm/pterm/tree_printer.go:94.58,95.16 1 2 -github.com/pterm/pterm/tree_printer.go:98.2,99.11 2 2 -github.com/pterm/pterm/tree_printer.go:95.16,97.3 1 1 -github.com/pterm/pterm/tree_printer.go:103.70,106.2 2 0 -github.com/pterm/pterm/tree_printer.go:109.37,114.2 3 3 -github.com/pterm/pterm/tree_printer.go:117.48,118.24 1 4 -github.com/pterm/pterm/tree_printer.go:121.2,121.24 1 4 -github.com/pterm/pterm/tree_printer.go:125.2,125.50 1 4 -github.com/pterm/pterm/tree_printer.go:118.24,120.3 1 2 -github.com/pterm/pterm/tree_printer.go:121.24,123.3 1 2 -github.com/pterm/pterm/tree_printer.go:131.73,133.28 2 12 -github.com/pterm/pterm/tree_printer.go:154.2,154.12 1 12 -github.com/pterm/pterm/tree_printer.go:133.28,134.22 1 32 -github.com/pterm/pterm/tree_printer.go:134.22,135.31 1 21 -github.com/pterm/pterm/tree_printer.go:135.31,138.5 1 17 -github.com/pterm/pterm/tree_printer.go:138.10,142.5 2 4 -github.com/pterm/pterm/tree_printer.go:143.9,143.30 1 11 -github.com/pterm/pterm/tree_printer.go:143.30,144.31 1 11 -github.com/pterm/pterm/tree_printer.go:144.31,147.5 1 7 -github.com/pterm/pterm/tree_printer.go:147.10,151.5 2 4 -github.com/pterm/pterm/tree_printer.go:158.68,159.32 1 11 -github.com/pterm/pterm/tree_printer.go:163.2,168.42 2 9 -github.com/pterm/pterm/tree_printer.go:192.2,192.14 1 9 -github.com/pterm/pterm/tree_printer.go:159.32,161.3 1 2 -github.com/pterm/pterm/tree_printer.go:168.42,171.23 2 86 -github.com/pterm/pterm/tree_printer.go:176.3,176.35 1 86 -github.com/pterm/pterm/tree_printer.go:182.3,182.37 1 86 -github.com/pterm/pterm/tree_printer.go:186.3,189.5 1 86 -github.com/pterm/pterm/tree_printer.go:171.23,174.4 2 1 -github.com/pterm/pterm/tree_printer.go:176.35,177.52 1 77 -github.com/pterm/pterm/tree_printer.go:177.52,179.5 1 1 -github.com/pterm/pterm/tree_printer.go:182.37,185.4 2 97 -github.com/pterm/pterm/basic_text_printer.go:21.69,24.2 2 1 -github.com/pterm/pterm/basic_text_printer.go:26.80,29.2 2 0 -github.com/pterm/pterm/basic_text_printer.go:33.59,34.20 1 1371 -github.com/pterm/pterm/basic_text_printer.go:37.2,37.29 1 1371 -github.com/pterm/pterm/basic_text_printer.go:34.20,36.3 1 1371 -github.com/pterm/pterm/basic_text_printer.go:42.61,45.2 2 651 -github.com/pterm/pterm/basic_text_printer.go:48.75,50.2 1 684 -github.com/pterm/pterm/basic_text_printer.go:54.77,56.2 1 648 -github.com/pterm/pterm/basic_text_printer.go:61.65,65.2 3 18 -github.com/pterm/pterm/basic_text_printer.go:70.67,74.2 3 327 -github.com/pterm/pterm/basic_text_printer.go:78.81,82.2 3 18 -github.com/pterm/pterm/basic_text_printer.go:87.83,91.2 3 324 -github.com/pterm/pterm/basic_text_printer.go:96.72,97.24 1 2 -github.com/pterm/pterm/basic_text_printer.go:105.2,106.12 2 2 -github.com/pterm/pterm/basic_text_printer.go:97.24,98.33 1 2 -github.com/pterm/pterm/basic_text_printer.go:98.33,99.18 1 1 -github.com/pterm/pterm/basic_text_printer.go:99.18,101.5 1 1 -github.com/pterm/pterm/basic_text_printer.go:112.88,113.24 1 2 -github.com/pterm/pterm/basic_text_printer.go:121.2,122.12 2 2 -github.com/pterm/pterm/basic_text_printer.go:113.24,114.33 1 2 -github.com/pterm/pterm/basic_text_printer.go:114.33,115.18 1 1 -github.com/pterm/pterm/basic_text_printer.go:115.18,117.5 1 1 -github.com/pterm/pterm/print.go:12.36,14.2 1 13790 -github.com/pterm/pterm/print.go:18.38,20.2 1 253647 -github.com/pterm/pterm/print.go:23.54,25.2 1 139826 -github.com/pterm/pterm/print.go:29.56,31.2 1 30 -github.com/pterm/pterm/print.go:34.40,37.2 2 6291 -github.com/pterm/pterm/print.go:40.39,42.2 1 29128 -github.com/pterm/pterm/print.go:47.30,49.2 1 3576 -github.com/pterm/pterm/print.go:54.32,56.2 1 432 -github.com/pterm/pterm/print.go:60.46,62.2 1 14 -github.com/pterm/pterm/print.go:67.48,69.2 1 14 -github.com/pterm/pterm/print.go:74.37,75.24 1 2 -github.com/pterm/pterm/print.go:75.24,76.33 1 2 -github.com/pterm/pterm/print.go:76.33,77.18 1 1 -github.com/pterm/pterm/print.go:77.18,79.5 1 1 -github.com/pterm/pterm/print.go:87.53,88.24 1 2 -github.com/pterm/pterm/print.go:88.24,89.33 1 2 -github.com/pterm/pterm/print.go:89.33,90.18 1 1 -github.com/pterm/pterm/print.go:90.18,92.5 1 1 -github.com/pterm/pterm/print.go:100.49,101.13 1 13753 -github.com/pterm/pterm/print.go:105.2,108.48 3 13715 -github.com/pterm/pterm/print.go:116.2,116.48 1 13715 -github.com/pterm/pterm/print.go:124.2,124.14 1 13715 -github.com/pterm/pterm/print.go:128.2,131.48 2 13715 -github.com/pterm/pterm/print.go:101.13,103.3 1 38 -github.com/pterm/pterm/print.go:108.48,109.19 1 19966 -github.com/pterm/pterm/print.go:109.19,113.4 3 14278 -github.com/pterm/pterm/print.go:116.48,117.23 1 3131 -github.com/pterm/pterm/print.go:117.23,121.4 3 283 -github.com/pterm/pterm/print.go:124.14,126.3 1 10861 -github.com/pterm/pterm/print.go:131.48,132.19 1 19966 -github.com/pterm/pterm/print.go:132.19,134.4 1 14278 -github.com/pterm/pterm/print.go:141.51,144.2 1 173 -github.com/pterm/pterm/print.go:152.31,153.13 1 12 -github.com/pterm/pterm/print.go:157.2,157.34 1 6 -github.com/pterm/pterm/print.go:153.13,155.3 1 6 -github.com/pterm/pterm/print.go:161.45,162.13 1 7041 -github.com/pterm/pterm/print.go:166.2,166.37 1 7035 -github.com/pterm/pterm/print.go:162.13,164.3 1 6 -github.com/pterm/pterm/print.go:170.53,172.2 1 36443 -github.com/pterm/pterm/print.go:174.35,176.2 1 76 -github.com/pterm/pterm/print.go:178.26,180.2 1 14561 -github.com/pterm/pterm/progressbar_printer.go:63.72,66.2 2 3 -github.com/pterm/pterm/progressbar_printer.go:71.76,74.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:77.70,80.2 2 9 -github.com/pterm/pterm/progressbar_printer.go:83.74,86.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:89.79,92.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:95.80,98.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:101.103,104.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:107.80,110.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:113.74,116.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:119.74,122.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:125.79,128.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:131.78,134.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:137.76,140.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:143.79,146.2 2 2 -github.com/pterm/pterm/progressbar_printer.go:149.76,152.2 2 1 -github.com/pterm/pterm/progressbar_printer.go:155.84,158.2 2 0 -github.com/pterm/pterm/progressbar_printer.go:161.62,164.2 2 12 -github.com/pterm/pterm/progressbar_printer.go:167.76,171.2 3 14291 -github.com/pterm/pterm/progressbar_printer.go:174.67,175.25 1 14315 -github.com/pterm/pterm/progressbar_printer.go:178.2,178.23 1 14315 -github.com/pterm/pterm/progressbar_printer.go:181.2,181.18 1 14315 -github.com/pterm/pterm/progressbar_printer.go:185.2,189.21 4 14314 -github.com/pterm/pterm/progressbar_printer.go:197.2,206.17 5 14314 -github.com/pterm/pterm/progressbar_printer.go:209.2,209.17 1 14314 -github.com/pterm/pterm/progressbar_printer.go:213.2,215.22 2 14314 -github.com/pterm/pterm/progressbar_printer.go:218.2,218.23 1 14314 -github.com/pterm/pterm/progressbar_printer.go:222.2,226.39 4 14314 -github.com/pterm/pterm/progressbar_printer.go:230.2,231.26 2 14314 -github.com/pterm/pterm/progressbar_printer.go:237.2,237.16 1 14314 -github.com/pterm/pterm/progressbar_printer.go:240.2,240.10 1 14314 -github.com/pterm/pterm/progressbar_printer.go:175.25,177.3 1 2 -github.com/pterm/pterm/progressbar_printer.go:178.23,180.3 1 2 -github.com/pterm/pterm/progressbar_printer.go:181.18,183.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:189.21,191.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:191.8,191.44 1 14313 -github.com/pterm/pterm/progressbar_printer.go:191.44,193.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:193.8,195.3 1 14312 -github.com/pterm/pterm/progressbar_printer.go:206.17,208.3 1 14313 -github.com/pterm/pterm/progressbar_printer.go:209.17,211.3 1 14313 -github.com/pterm/pterm/progressbar_printer.go:215.22,217.3 1 14313 -github.com/pterm/pterm/progressbar_printer.go:218.23,220.3 1 14313 -github.com/pterm/pterm/progressbar_printer.go:226.39,228.3 1 14312 -github.com/pterm/pterm/progressbar_printer.go:231.26,233.3 1 37 -github.com/pterm/pterm/progressbar_printer.go:233.8,235.3 1 14277 -github.com/pterm/pterm/progressbar_printer.go:237.16,239.3 1 6871 -github.com/pterm/pterm/progressbar_printer.go:244.65,245.18 1 18 -github.com/pterm/pterm/progressbar_printer.go:249.2,252.26 3 17 -github.com/pterm/pterm/progressbar_printer.go:255.2,255.10 1 17 -github.com/pterm/pterm/progressbar_printer.go:245.18,247.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:252.26,254.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:259.66,260.30 1 7 -github.com/pterm/pterm/progressbar_printer.go:263.2,269.16 5 7 -github.com/pterm/pterm/progressbar_printer.go:260.30,262.3 1 1 -github.com/pterm/pterm/progressbar_printer.go:273.66,274.17 1 10 -github.com/pterm/pterm/progressbar_printer.go:277.2,278.22 2 3 -github.com/pterm/pterm/progressbar_printer.go:284.2,284.15 1 3 -github.com/pterm/pterm/progressbar_printer.go:274.17,276.3 1 7 -github.com/pterm/pterm/progressbar_printer.go:278.22,281.3 2 1 -github.com/pterm/pterm/progressbar_printer.go:281.8,283.3 1 2 -github.com/pterm/pterm/progressbar_printer.go:290.66,294.2 3 2 -github.com/pterm/pterm/progressbar_printer.go:299.65,303.2 3 1 -github.com/pterm/pterm/progressbar_printer.go:306.61,308.2 1 14314 -github.com/pterm/pterm/progressbar_printer.go:310.56,313.2 2 14313 -github.com/pterm/pterm/prefix_printer.go:101.65,104.2 2 10 -github.com/pterm/pterm/prefix_printer.go:107.62,110.2 2 100 -github.com/pterm/pterm/prefix_printer.go:113.70,116.2 2 5 -github.com/pterm/pterm/prefix_printer.go:122.60,125.2 2 11 -github.com/pterm/pterm/prefix_printer.go:128.69,131.2 2 95 -github.com/pterm/pterm/prefix_printer.go:136.63,139.2 2 75 -github.com/pterm/pterm/prefix_printer.go:144.72,147.2 2 5 -github.com/pterm/pterm/prefix_printer.go:150.74,153.2 2 0 -github.com/pterm/pterm/prefix_printer.go:157.57,159.39 2 10852 -github.com/pterm/pterm/prefix_printer.go:163.2,163.15 1 10762 -github.com/pterm/pterm/prefix_printer.go:171.2,171.27 1 5110 -github.com/pterm/pterm/prefix_printer.go:174.2,174.26 1 5110 -github.com/pterm/pterm/prefix_printer.go:177.2,177.27 1 5110 -github.com/pterm/pterm/prefix_printer.go:181.2,184.32 3 5110 -github.com/pterm/pterm/prefix_printer.go:189.2,190.33 2 5110 -github.com/pterm/pterm/prefix_printer.go:202.2,204.22 2 5110 -github.com/pterm/pterm/prefix_printer.go:209.2,209.13 1 5110 -github.com/pterm/pterm/prefix_printer.go:213.2,213.20 1 5110 -github.com/pterm/pterm/prefix_printer.go:159.39,161.3 1 90 -github.com/pterm/pterm/prefix_printer.go:163.15,164.26 1 5652 -github.com/pterm/pterm/prefix_printer.go:164.26,166.4 1 5607 -github.com/pterm/pterm/prefix_printer.go:166.9,168.4 1 45 -github.com/pterm/pterm/prefix_printer.go:171.27,173.3 1 1 -github.com/pterm/pterm/prefix_printer.go:174.26,176.3 1 1663 -github.com/pterm/pterm/prefix_printer.go:177.27,179.3 1 1 -github.com/pterm/pterm/prefix_printer.go:184.32,187.3 2 3095 -github.com/pterm/pterm/prefix_printer.go:190.33,191.13 1 5133 -github.com/pterm/pterm/prefix_printer.go:191.13,193.26 2 5110 -github.com/pterm/pterm/prefix_printer.go:196.4,196.35 1 5110 -github.com/pterm/pterm/prefix_printer.go:193.26,195.5 1 50 -github.com/pterm/pterm/prefix_printer.go:197.9,199.4 1 23 -github.com/pterm/pterm/prefix_printer.go:204.22,207.3 2 45 -github.com/pterm/pterm/prefix_printer.go:209.13,211.3 1 3095 -github.com/pterm/pterm/prefix_printer.go:218.58,219.39 1 6600 -github.com/pterm/pterm/prefix_printer.go:222.2,223.22 2 6510 -github.com/pterm/pterm/prefix_printer.go:219.39,221.3 1 90 -github.com/pterm/pterm/prefix_printer.go:227.72,228.39 1 3695 -github.com/pterm/pterm/prefix_printer.go:231.2,231.40 1 3605 -github.com/pterm/pterm/prefix_printer.go:228.39,230.3 1 90 -github.com/pterm/pterm/prefix_printer.go:236.74,237.39 1 3330 -github.com/pterm/pterm/prefix_printer.go:240.2,240.39 1 3240 -github.com/pterm/pterm/prefix_printer.go:237.39,239.3 1 90 -github.com/pterm/pterm/prefix_printer.go:246.62,248.39 2 420 -github.com/pterm/pterm/prefix_printer.go:251.2,253.12 3 410 -github.com/pterm/pterm/prefix_printer.go:248.39,250.3 1 10 -github.com/pterm/pterm/prefix_printer.go:259.64,261.39 2 3280 -github.com/pterm/pterm/prefix_printer.go:264.2,266.12 3 3270 -github.com/pterm/pterm/prefix_printer.go:261.39,263.3 1 10 -github.com/pterm/pterm/prefix_printer.go:271.78,273.39 2 190 -github.com/pterm/pterm/prefix_printer.go:276.2,278.12 3 180 -github.com/pterm/pterm/prefix_printer.go:273.39,275.3 1 10 -github.com/pterm/pterm/prefix_printer.go:284.80,286.39 2 1630 -github.com/pterm/pterm/prefix_printer.go:289.2,291.12 3 1620 -github.com/pterm/pterm/prefix_printer.go:286.39,288.3 1 10 -github.com/pterm/pterm/prefix_printer.go:299.69,300.24 1 10 -github.com/pterm/pterm/prefix_printer.go:308.2,309.12 2 10 -github.com/pterm/pterm/prefix_printer.go:300.24,301.33 1 10 -github.com/pterm/pterm/prefix_printer.go:301.33,302.18 1 5 -github.com/pterm/pterm/prefix_printer.go:302.18,304.5 1 5 -github.com/pterm/pterm/prefix_printer.go:315.85,316.24 1 10 -github.com/pterm/pterm/prefix_printer.go:324.2,325.12 2 10 -github.com/pterm/pterm/prefix_printer.go:316.24,317.33 1 10 -github.com/pterm/pterm/prefix_printer.go:317.33,318.18 1 5 -github.com/pterm/pterm/prefix_printer.go:318.18,320.5 1 5 -github.com/pterm/pterm/prefix_printer.go:329.52,331.2 1 5115 -github.com/pterm/pterm/prefix_printer.go:346.35,347.13 1 5480 -github.com/pterm/pterm/prefix_printer.go:347.13,348.12 1 5 -github.com/pterm/pterm/area_printer.go:28.43,30.2 1 9 -github.com/pterm/pterm/area_printer.go:33.65,36.2 2 3 -github.com/pterm/pterm/area_printer.go:39.61,42.2 2 2 -github.com/pterm/pterm/area_printer.go:45.57,48.2 2 1 -github.com/pterm/pterm/area_printer.go:52.51,53.19 1 18 -github.com/pterm/pterm/area_printer.go:57.2,60.14 3 18 -github.com/pterm/pterm/area_printer.go:64.2,64.18 1 18 -github.com/pterm/pterm/area_printer.go:82.2,82.20 1 18 -github.com/pterm/pterm/area_printer.go:53.19,56.3 2 2 -github.com/pterm/pterm/area_printer.go:60.14,62.3 1 2 -github.com/pterm/pterm/area_printer.go:64.18,72.15 6 2 -github.com/pterm/pterm/area_printer.go:77.3,77.29 1 2 -github.com/pterm/pterm/area_printer.go:72.15,75.4 2 2 -github.com/pterm/pterm/area_printer.go:77.29,80.4 2 2 -github.com/pterm/pterm/area_printer.go:86.72,95.2 6 5 -github.com/pterm/pterm/area_printer.go:99.36,101.22 2 4 -github.com/pterm/pterm/area_printer.go:104.2,104.12 1 4 -github.com/pterm/pterm/area_printer.go:101.22,103.3 1 2 -github.com/pterm/pterm/area_printer.go:110.60,114.2 3 2 -github.com/pterm/pterm/area_printer.go:119.59,123.2 3 1 -github.com/pterm/pterm/area_printer.go:128.31,130.2 1 3 -github.com/pterm/pterm/bulletlist_printer.go:11.77,13.25 2 2 -github.com/pterm/pterm/bulletlist_printer.go:16.2,16.42 1 2 -github.com/pterm/pterm/bulletlist_printer.go:13.25,15.3 1 8 -github.com/pterm/pterm/bulletlist_printer.go:20.78,26.2 2 8 -github.com/pterm/pterm/bulletlist_printer.go:38.62,41.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:44.63,47.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:50.69,53.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:56.67,59.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:62.71,65.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:68.74,70.2 1 2 -github.com/pterm/pterm/bulletlist_printer.go:89.81,92.2 2 76 -github.com/pterm/pterm/bulletlist_printer.go:95.75,98.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:101.73,104.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:107.77,110.2 2 1 -github.com/pterm/pterm/bulletlist_printer.go:113.82,116.2 2 0 -github.com/pterm/pterm/bulletlist_printer.go:119.43,124.2 3 56 -github.com/pterm/pterm/bulletlist_printer.go:127.54,129.31 2 74 -github.com/pterm/pterm/bulletlist_printer.go:150.2,150.17 1 74 -github.com/pterm/pterm/bulletlist_printer.go:129.31,130.28 1 74 -github.com/pterm/pterm/bulletlist_printer.go:137.3,137.30 1 74 -github.com/pterm/pterm/bulletlist_printer.go:144.3,144.24 1 74 -github.com/pterm/pterm/bulletlist_printer.go:130.28,131.26 1 74 -github.com/pterm/pterm/bulletlist_printer.go:131.26,133.5 1 18 -github.com/pterm/pterm/bulletlist_printer.go:133.10,135.5 1 56 -github.com/pterm/pterm/bulletlist_printer.go:137.30,138.28 1 74 -github.com/pterm/pterm/bulletlist_printer.go:138.28,140.5 1 18 -github.com/pterm/pterm/bulletlist_printer.go:140.10,142.5 1 56 -github.com/pterm/pterm/bulletlist_printer.go:144.24,146.4 1 56 -github.com/pterm/pterm/bulletlist_printer.go:146.9,148.4 1 18 -github.com/pterm/pterm/header_printer.go:35.67,38.2 2 1 -github.com/pterm/pterm/header_printer.go:41.73,44.2 2 3 -github.com/pterm/pterm/header_printer.go:47.62,50.2 2 3 -github.com/pterm/pterm/header_printer.go:53.64,56.2 2 21 -github.com/pterm/pterm/header_printer.go:59.74,62.2 2 0 -github.com/pterm/pterm/header_printer.go:66.56,67.15 1 1393 -github.com/pterm/pterm/header_printer.go:71.2,71.24 1 664 -github.com/pterm/pterm/header_printer.go:74.2,74.30 1 664 -github.com/pterm/pterm/header_printer.go:78.2,85.17 5 664 -github.com/pterm/pterm/header_printer.go:98.2,101.17 3 664 -github.com/pterm/pterm/header_printer.go:108.2,109.49 2 664 -github.com/pterm/pterm/header_printer.go:117.2,119.12 2 664 -github.com/pterm/pterm/header_printer.go:67.15,69.3 1 729 -github.com/pterm/pterm/header_printer.go:71.24,73.3 1 3 -github.com/pterm/pterm/header_printer.go:74.30,76.3 1 3 -github.com/pterm/pterm/header_printer.go:85.17,88.3 2 11 -github.com/pterm/pterm/header_printer.go:88.8,89.42 1 653 -github.com/pterm/pterm/header_printer.go:89.42,92.4 2 1 -github.com/pterm/pterm/header_printer.go:92.9,95.4 2 652 -github.com/pterm/pterm/header_printer.go:101.17,104.3 2 11 -github.com/pterm/pterm/header_printer.go:104.8,106.3 1 653 -github.com/pterm/pterm/header_printer.go:109.49,112.69 3 666 -github.com/pterm/pterm/header_printer.go:115.3,115.67 1 666 -github.com/pterm/pterm/header_printer.go:112.69,114.4 1 8 -github.com/pterm/pterm/header_printer.go:122.47,125.32 3 664 -github.com/pterm/pterm/header_printer.go:146.2,147.26 2 664 -github.com/pterm/pterm/header_printer.go:151.2,151.39 1 664 -github.com/pterm/pterm/header_printer.go:125.32,126.65 1 664 -github.com/pterm/pterm/header_printer.go:126.65,129.32 3 2 -github.com/pterm/pterm/header_printer.go:136.4,136.41 1 2 -github.com/pterm/pterm/header_printer.go:129.32,130.31 1 272 -github.com/pterm/pterm/header_printer.go:134.5,134.52 1 272 -github.com/pterm/pterm/header_printer.go:130.31,133.6 2 2 -github.com/pterm/pterm/header_printer.go:136.41,139.5 2 4 -github.com/pterm/pterm/header_printer.go:140.9,143.4 2 662 -github.com/pterm/pterm/header_printer.go:147.26,149.3 1 666 -github.com/pterm/pterm/header_printer.go:156.58,158.2 1 652 -github.com/pterm/pterm/header_printer.go:161.72,163.2 1 684 -github.com/pterm/pterm/header_printer.go:167.74,169.2 1 648 -github.com/pterm/pterm/header_printer.go:174.62,178.2 3 36 -github.com/pterm/pterm/header_printer.go:183.64,187.2 3 328 -github.com/pterm/pterm/header_printer.go:191.78,195.2 3 18 -github.com/pterm/pterm/header_printer.go:200.80,204.2 3 324 -github.com/pterm/pterm/header_printer.go:209.69,210.24 1 2 -github.com/pterm/pterm/header_printer.go:218.2,219.12 2 2 -github.com/pterm/pterm/header_printer.go:210.24,211.33 1 2 -github.com/pterm/pterm/header_printer.go:211.33,212.18 1 1 -github.com/pterm/pterm/header_printer.go:212.18,214.5 1 1 -github.com/pterm/pterm/header_printer.go:225.85,226.24 1 2 -github.com/pterm/pterm/header_printer.go:234.2,235.12 2 2 -github.com/pterm/pterm/header_printer.go:226.24,227.33 1 2 -github.com/pterm/pterm/header_printer.go:227.33,228.18 1 1 -github.com/pterm/pterm/header_printer.go:228.18,230.5 1 1 -github.com/pterm/pterm/center_printer.go:25.79,29.2 3 3 -github.com/pterm/pterm/center_printer.go:32.74,35.2 2 0 -github.com/pterm/pterm/center_printer.go:39.56,40.15 1 2096 -github.com/pterm/pterm/center_printer.go:44.2,48.32 3 998 -github.com/pterm/pterm/center_printer.go:60.2,62.29 2 655 -github.com/pterm/pterm/center_printer.go:69.2,71.18 2 655 -github.com/pterm/pterm/center_printer.go:79.2,79.29 1 653 -github.com/pterm/pterm/center_printer.go:83.2,83.12 1 653 -github.com/pterm/pterm/center_printer.go:40.15,42.3 1 1098 -github.com/pterm/pterm/center_printer.go:48.32,49.30 1 343 -github.com/pterm/pterm/center_printer.go:57.3,57.13 1 343 -github.com/pterm/pterm/center_printer.go:49.30,51.18 2 649 -github.com/pterm/pterm/center_printer.go:51.18,53.5 1 1 -github.com/pterm/pterm/center_printer.go:53.10,55.5 1 648 -github.com/pterm/pterm/center_printer.go:62.29,64.32 2 971 -github.com/pterm/pterm/center_printer.go:64.32,66.4 1 654 -github.com/pterm/pterm/center_printer.go:71.18,72.30 1 2 -github.com/pterm/pterm/center_printer.go:76.3,76.13 1 2 -github.com/pterm/pterm/center_printer.go:72.30,74.4 1 5 -github.com/pterm/pterm/center_printer.go:79.29,81.3 1 966 -github.com/pterm/pterm/center_printer.go:88.58,90.2 1 1298 -github.com/pterm/pterm/center_printer.go:93.72,95.2 1 720 -github.com/pterm/pterm/center_printer.go:99.74,101.2 1 648 -github.com/pterm/pterm/center_printer.go:106.61,110.2 3 38 -github.com/pterm/pterm/center_printer.go:115.63,119.2 3 650 -github.com/pterm/pterm/center_printer.go:123.77,127.2 3 36 -github.com/pterm/pterm/center_printer.go:132.79,136.2 3 324 -github.com/pterm/pterm/center_printer.go:141.68,142.24 1 2 -github.com/pterm/pterm/center_printer.go:150.2,151.12 2 2 -github.com/pterm/pterm/center_printer.go:142.24,143.33 1 2 -github.com/pterm/pterm/center_printer.go:143.33,144.18 1 1 -github.com/pterm/pterm/center_printer.go:144.18,146.5 1 1 -github.com/pterm/pterm/center_printer.go:157.84,158.24 1 2 -github.com/pterm/pterm/center_printer.go:166.2,167.12 2 2 -github.com/pterm/pterm/center_printer.go:158.24,159.33 1 2 -github.com/pterm/pterm/center_printer.go:159.33,160.18 1 1 -github.com/pterm/pterm/center_printer.go:160.18,162.5 1 1 +github.com/pterm/pterm/atoms.go:21.39,24.2 2 1 +github.com/pterm/pterm/atoms.go:27.48,30.2 2 1 +github.com/pterm/pterm/atoms.go:33.40,36.2 2 1 +github.com/pterm/pterm/atoms.go:39.43,42.2 2 1 github.com/pterm/pterm/table_printer.go:48.61,51.2 2 1 -github.com/pterm/pterm/table_printer.go:54.62,57.2 2 9 +github.com/pterm/pterm/table_printer.go:54.62,57.2 2 8 github.com/pterm/pterm/table_printer.go:60.67,63.2 2 1 github.com/pterm/pterm/table_printer.go:66.78,69.2 2 4 github.com/pterm/pterm/table_printer.go:72.79,75.2 2 1 @@ -591,49 +12,670 @@ github.com/pterm/pterm/table_printer.go:78.69,81.2 2 1 github.com/pterm/pterm/table_printer.go:84.70,87.2 2 1 github.com/pterm/pterm/table_printer.go:90.72,93.2 2 3 github.com/pterm/pterm/table_printer.go:96.73,99.2 2 1 -github.com/pterm/pterm/table_printer.go:102.63,105.2 2 9 +github.com/pterm/pterm/table_printer.go:102.63,105.2 2 8 github.com/pterm/pterm/table_printer.go:108.71,109.50 1 1 github.com/pterm/pterm/table_printer.go:112.2,112.11 1 1 github.com/pterm/pterm/table_printer.go:109.50,111.3 1 1 github.com/pterm/pterm/table_printer.go:116.58,119.2 2 1 github.com/pterm/pterm/table_printer.go:122.66,127.2 4 2 github.com/pterm/pterm/table_printer.go:130.67,135.2 4 2 -github.com/pterm/pterm/table_printer.go:138.72,141.2 2 0 -github.com/pterm/pterm/table_printer.go:144.49,145.20 1 10 -github.com/pterm/pterm/table_printer.go:148.2,148.29 1 10 -github.com/pterm/pterm/table_printer.go:151.2,151.26 1 10 -github.com/pterm/pterm/table_printer.go:154.2,154.38 1 10 -github.com/pterm/pterm/table_printer.go:157.2,157.32 1 10 -github.com/pterm/pterm/table_printer.go:161.2,164.29 3 10 -github.com/pterm/pterm/table_printer.go:173.2,173.30 1 10 -github.com/pterm/pterm/table_printer.go:202.2,204.13 2 10 -github.com/pterm/pterm/table_printer.go:208.2,208.17 1 10 +github.com/pterm/pterm/table_printer.go:138.66,141.2 2 1 +github.com/pterm/pterm/table_printer.go:144.49,145.20 1 9 +github.com/pterm/pterm/table_printer.go:148.2,148.29 1 9 +github.com/pterm/pterm/table_printer.go:151.2,151.26 1 9 +github.com/pterm/pterm/table_printer.go:154.2,154.38 1 9 +github.com/pterm/pterm/table_printer.go:157.2,157.32 1 9 +github.com/pterm/pterm/table_printer.go:161.2,164.29 3 9 +github.com/pterm/pterm/table_printer.go:173.2,173.30 1 9 +github.com/pterm/pterm/table_printer.go:202.2,204.13 2 9 +github.com/pterm/pterm/table_printer.go:208.2,208.17 1 9 github.com/pterm/pterm/table_printer.go:145.20,147.3 1 1 github.com/pterm/pterm/table_printer.go:148.29,150.3 1 1 github.com/pterm/pterm/table_printer.go:151.26,153.3 1 1 github.com/pterm/pterm/table_printer.go:154.38,156.3 1 1 github.com/pterm/pterm/table_printer.go:157.32,159.3 1 1 -github.com/pterm/pterm/table_printer.go:164.29,165.31 1 41 -github.com/pterm/pterm/table_printer.go:165.31,167.41 2 123 -github.com/pterm/pterm/table_printer.go:167.41,169.5 1 33 -github.com/pterm/pterm/table_printer.go:173.30,175.31 2 41 -github.com/pterm/pterm/table_printer.go:191.3,191.59 1 41 -github.com/pterm/pterm/table_printer.go:195.3,195.61 1 41 -github.com/pterm/pterm/table_printer.go:199.3,199.14 1 41 -github.com/pterm/pterm/table_printer.go:175.31,179.33 3 123 -github.com/pterm/pterm/table_printer.go:184.4,184.30 1 123 -github.com/pterm/pterm/table_printer.go:179.33,182.5 2 82 -github.com/pterm/pterm/table_printer.go:184.30,186.5 1 24 -github.com/pterm/pterm/table_printer.go:186.10,188.5 1 99 +github.com/pterm/pterm/table_printer.go:164.29,165.31 1 28 +github.com/pterm/pterm/table_printer.go:165.31,167.41 2 84 +github.com/pterm/pterm/table_printer.go:167.41,169.5 1 28 +github.com/pterm/pterm/table_printer.go:173.30,175.31 2 28 +github.com/pterm/pterm/table_printer.go:191.3,191.59 1 28 +github.com/pterm/pterm/table_printer.go:195.3,195.61 1 28 +github.com/pterm/pterm/table_printer.go:199.3,199.14 1 28 +github.com/pterm/pterm/table_printer.go:175.31,179.33 3 84 +github.com/pterm/pterm/table_printer.go:184.4,184.30 1 84 +github.com/pterm/pterm/table_printer.go:179.33,182.5 2 56 +github.com/pterm/pterm/table_printer.go:184.30,186.5 1 21 +github.com/pterm/pterm/table_printer.go:186.10,188.5 1 63 github.com/pterm/pterm/table_printer.go:191.59,193.4 1 3 github.com/pterm/pterm/table_printer.go:195.61,197.4 1 4 github.com/pterm/pterm/table_printer.go:204.13,206.3 1 1 -github.com/pterm/pterm/table_printer.go:211.82,213.22 2 123 -github.com/pterm/pterm/table_printer.go:216.2,216.64 1 111 +github.com/pterm/pterm/table_printer.go:211.82,213.22 2 84 +github.com/pterm/pterm/table_printer.go:216.2,216.64 1 72 github.com/pterm/pterm/table_printer.go:213.22,215.3 1 12 github.com/pterm/pterm/table_printer.go:219.75,221.2 1 3 github.com/pterm/pterm/table_printer.go:223.69,225.2 1 4 -github.com/pterm/pterm/table_printer.go:228.38,233.2 3 9 +github.com/pterm/pterm/table_printer.go:228.38,233.2 3 3 +github.com/pterm/pterm/area_printer.go:28.43,30.2 1 9 +github.com/pterm/pterm/area_printer.go:33.65,36.2 2 3 +github.com/pterm/pterm/area_printer.go:39.61,42.2 2 2 +github.com/pterm/pterm/area_printer.go:45.57,48.2 2 1 +github.com/pterm/pterm/area_printer.go:52.51,53.19 1 40 +github.com/pterm/pterm/area_printer.go:57.2,60.14 3 40 +github.com/pterm/pterm/area_printer.go:64.2,64.18 1 40 +github.com/pterm/pterm/area_printer.go:82.2,82.20 1 40 +github.com/pterm/pterm/area_printer.go:53.19,56.3 2 2 +github.com/pterm/pterm/area_printer.go:60.14,62.3 1 2 +github.com/pterm/pterm/area_printer.go:64.18,72.15 6 2 +github.com/pterm/pterm/area_printer.go:77.3,77.29 1 2 +github.com/pterm/pterm/area_printer.go:72.15,75.4 2 2 +github.com/pterm/pterm/area_printer.go:77.29,80.4 2 2 +github.com/pterm/pterm/area_printer.go:86.72,95.2 6 9 +github.com/pterm/pterm/area_printer.go:99.36,100.17 1 8 +github.com/pterm/pterm/area_printer.go:103.2,104.22 2 7 +github.com/pterm/pterm/area_printer.go:107.2,107.12 1 7 +github.com/pterm/pterm/area_printer.go:100.17,102.3 1 1 +github.com/pterm/pterm/area_printer.go:104.22,106.3 1 2 +github.com/pterm/pterm/area_printer.go:113.60,117.2 3 2 +github.com/pterm/pterm/area_printer.go:122.59,126.2 3 1 +github.com/pterm/pterm/area_printer.go:131.31,133.2 1 3 +github.com/pterm/pterm/bigtext_printer.go:25.49,28.2 2 1 +github.com/pterm/pterm/bigtext_printer.go:31.42,34.2 2 1 +github.com/pterm/pterm/bigtext_printer.go:37.46,40.2 2 1 +github.com/pterm/pterm/bigtext_printer.go:52.84,55.2 2 1 +github.com/pterm/pterm/bigtext_printer.go:58.73,60.33 2 4 +github.com/pterm/pterm/bigtext_printer.go:63.2,64.11 2 4 +github.com/pterm/pterm/bigtext_printer.go:60.33,62.3 1 4 +github.com/pterm/pterm/bigtext_printer.go:68.70,71.2 2 1 +github.com/pterm/pterm/bigtext_printer.go:74.51,77.15 2 4 +github.com/pterm/pterm/bigtext_printer.go:84.2,85.30 2 3 +github.com/pterm/pterm/bigtext_printer.go:95.2,97.31 2 3 +github.com/pterm/pterm/bigtext_printer.go:104.2,104.34 1 3 +github.com/pterm/pterm/bigtext_printer.go:126.2,126.17 1 3 +github.com/pterm/pterm/bigtext_printer.go:77.15,78.36 1 1 +github.com/pterm/pterm/bigtext_printer.go:81.3,81.18 1 1 +github.com/pterm/pterm/bigtext_printer.go:78.36,80.4 1 5 +github.com/pterm/pterm/bigtext_printer.go:85.30,86.47 1 10 +github.com/pterm/pterm/bigtext_printer.go:86.47,92.4 1 10 +github.com/pterm/pterm/bigtext_printer.go:97.31,99.20 2 10 +github.com/pterm/pterm/bigtext_printer.go:99.20,101.4 1 2 +github.com/pterm/pterm/bigtext_printer.go:104.34,105.37 1 11 +github.com/pterm/pterm/bigtext_printer.go:123.3,123.14 1 11 +github.com/pterm/pterm/bigtext_printer.go:105.37,109.28 4 50 +github.com/pterm/pterm/bigtext_printer.go:112.4,113.41 2 50 +github.com/pterm/pterm/bigtext_printer.go:117.4,117.83 1 50 +github.com/pterm/pterm/bigtext_printer.go:109.28,111.5 1 50 +github.com/pterm/pterm/bigtext_printer.go:113.41,115.5 1 2 +github.com/pterm/pterm/bigtext_printer.go:117.83,119.5 1 25 +github.com/pterm/pterm/bigtext_printer.go:119.10,121.5 1 25 +github.com/pterm/pterm/bigtext_printer.go:130.40,135.2 3 1 +github.com/pterm/pterm/interactive_textinput_printer.go:34.96,37.2 2 1 +github.com/pterm/pterm/interactive_textinput_printer.go:40.95,43.2 2 1 +github.com/pterm/pterm/interactive_textinput_printer.go:46.100,49.2 2 2 +github.com/pterm/pterm/interactive_textinput_printer.go:52.75,60.45 4 0 +github.com/pterm/pterm/interactive_textinput_printer.go:64.2,64.17 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:69.2,72.16 4 0 +github.com/pterm/pterm/interactive_textinput_printer.go:76.2,78.18 3 0 +github.com/pterm/pterm/interactive_textinput_printer.go:82.2,82.66 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:180.2,180.16 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:185.2,187.28 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:195.2,195.54 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:60.45,62.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:64.17,66.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:66.8,68.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:72.16,74.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:78.18,80.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:82.66,83.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:86.3,86.24 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:90.3,90.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:157.3,157.60 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:176.3,178.20 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:83.19,85.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:86.24,88.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:91.17,92.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:95.19,96.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:112.21,113.240 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:114.19,115.231 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:116.23,117.59 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:126.20,127.92 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:136.19,138.20 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:139.18,140.37 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:147.16,148.24 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:92.19,94.5 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:96.19,97.23 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:100.5,108.25 9 0 +github.com/pterm/pterm/interactive_textinput_printer.go:97.23,99.6 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:109.10,111.5 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:117.59,119.5 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:119.10,119.31 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:119.31,125.5 5 0 +github.com/pterm/pterm/interactive_textinput_printer.go:127.92,130.5 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:130.10,130.44 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:130.44,135.5 4 0 +github.com/pterm/pterm/interactive_textinput_printer.go:140.37,142.25 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:145.5,145.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:142.25,144.6 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:148.24,150.25 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:153.5,153.19 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:150.25,152.6 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:157.60,158.20 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:159.20,160.25 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:166.19,167.75 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:160.25,162.6 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:162.11,162.45 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:162.45,165.6 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:167.75,169.6 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:169.11,169.32 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:169.32,172.6 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:180.16,182.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:187.28,188.25 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:188.25,190.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:190.9,192.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:198.75,199.18 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:202.2,203.28 2 0 +github.com/pterm/pterm/interactive_textinput_printer.go:210.2,210.72 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:214.2,218.17 5 0 +github.com/pterm/pterm/interactive_textinput_printer.go:223.2,223.17 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:199.18,201.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:203.28,204.25 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:204.25,206.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:206.9,208.4 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:210.72,212.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:218.17,220.3 1 0 +github.com/pterm/pterm/interactive_textinput_printer.go:220.8,222.3 1 0 +github.com/pterm/pterm/paragraph_printer.go:23.69,26.2 2 1 +github.com/pterm/pterm/paragraph_printer.go:29.74,32.2 2 1 +github.com/pterm/pterm/paragraph_printer.go:36.59,37.15 1 1373 +github.com/pterm/pterm/paragraph_printer.go:41.2,42.21 2 653 +github.com/pterm/pterm/paragraph_printer.go:45.2,47.33 3 652 +github.com/pterm/pterm/paragraph_printer.go:57.2,57.16 1 652 +github.com/pterm/pterm/paragraph_printer.go:37.15,39.3 1 720 +github.com/pterm/pterm/paragraph_printer.go:42.21,44.3 1 1 +github.com/pterm/pterm/paragraph_printer.go:47.33,48.30 1 405 +github.com/pterm/pterm/paragraph_printer.go:48.30,51.4 2 3 +github.com/pterm/pterm/paragraph_printer.go:51.9,54.4 2 402 +github.com/pterm/pterm/paragraph_printer.go:62.61,64.2 1 651 +github.com/pterm/pterm/paragraph_printer.go:67.75,69.2 1 684 +github.com/pterm/pterm/paragraph_printer.go:73.77,75.2 1 648 +github.com/pterm/pterm/paragraph_printer.go:80.65,84.2 3 20 +github.com/pterm/pterm/paragraph_printer.go:89.67,93.2 3 327 +github.com/pterm/pterm/paragraph_printer.go:97.81,101.2 3 18 +github.com/pterm/pterm/paragraph_printer.go:106.83,110.2 3 324 +github.com/pterm/pterm/paragraph_printer.go:115.72,116.24 1 2 +github.com/pterm/pterm/paragraph_printer.go:124.2,125.12 2 2 +github.com/pterm/pterm/paragraph_printer.go:116.24,117.33 1 2 +github.com/pterm/pterm/paragraph_printer.go:117.33,118.18 1 1 +github.com/pterm/pterm/paragraph_printer.go:118.18,120.5 1 1 +github.com/pterm/pterm/paragraph_printer.go:131.88,132.24 1 2 +github.com/pterm/pterm/paragraph_printer.go:140.2,141.12 2 2 +github.com/pterm/pterm/paragraph_printer.go:132.24,133.33 1 2 +github.com/pterm/pterm/paragraph_printer.go:133.33,134.18 1 1 +github.com/pterm/pterm/paragraph_printer.go:134.18,136.5 1 1 +github.com/pterm/pterm/prefix_printer.go:101.65,104.2 2 10 +github.com/pterm/pterm/prefix_printer.go:107.62,110.2 2 100 +github.com/pterm/pterm/prefix_printer.go:113.70,116.2 2 5 +github.com/pterm/pterm/prefix_printer.go:122.60,125.2 2 11 +github.com/pterm/pterm/prefix_printer.go:128.69,131.2 2 95 +github.com/pterm/pterm/prefix_printer.go:136.63,139.2 2 75 +github.com/pterm/pterm/prefix_printer.go:144.72,147.2 2 5 +github.com/pterm/pterm/prefix_printer.go:150.68,153.2 2 5 +github.com/pterm/pterm/prefix_printer.go:157.57,159.39 2 10859 +github.com/pterm/pterm/prefix_printer.go:163.2,163.15 1 10769 +github.com/pterm/pterm/prefix_printer.go:171.2,171.27 1 5108 +github.com/pterm/pterm/prefix_printer.go:174.2,174.26 1 5108 +github.com/pterm/pterm/prefix_printer.go:177.2,177.27 1 5108 +github.com/pterm/pterm/prefix_printer.go:181.2,184.32 3 5108 +github.com/pterm/pterm/prefix_printer.go:189.2,190.33 2 5108 +github.com/pterm/pterm/prefix_printer.go:202.2,202.22 1 5108 +github.com/pterm/pterm/prefix_printer.go:208.2,208.13 1 5108 +github.com/pterm/pterm/prefix_printer.go:212.2,212.20 1 5108 +github.com/pterm/pterm/prefix_printer.go:159.39,161.3 1 90 +github.com/pterm/pterm/prefix_printer.go:163.15,164.26 1 5661 +github.com/pterm/pterm/prefix_printer.go:164.26,166.4 1 5616 +github.com/pterm/pterm/prefix_printer.go:166.9,168.4 1 45 +github.com/pterm/pterm/prefix_printer.go:171.27,173.3 1 1 +github.com/pterm/pterm/prefix_printer.go:174.26,176.3 1 1650 +github.com/pterm/pterm/prefix_printer.go:177.27,179.3 1 1 +github.com/pterm/pterm/prefix_printer.go:184.32,187.3 2 3081 +github.com/pterm/pterm/prefix_printer.go:190.33,191.13 1 5123 +github.com/pterm/pterm/prefix_printer.go:191.13,193.26 2 5108 +github.com/pterm/pterm/prefix_printer.go:196.4,196.35 1 5108 +github.com/pterm/pterm/prefix_printer.go:193.26,195.5 1 50 +github.com/pterm/pterm/prefix_printer.go:197.9,199.4 1 15 +github.com/pterm/pterm/prefix_printer.go:202.22,206.3 3 45 +github.com/pterm/pterm/prefix_printer.go:208.13,210.3 1 3081 +github.com/pterm/pterm/prefix_printer.go:217.58,218.39 1 6586 +github.com/pterm/pterm/prefix_printer.go:221.2,222.22 2 6496 +github.com/pterm/pterm/prefix_printer.go:218.39,220.3 1 90 +github.com/pterm/pterm/prefix_printer.go:226.72,227.39 1 3695 +github.com/pterm/pterm/prefix_printer.go:230.2,230.40 1 3605 +github.com/pterm/pterm/prefix_printer.go:227.39,229.3 1 90 +github.com/pterm/pterm/prefix_printer.go:235.74,236.39 1 3330 +github.com/pterm/pterm/prefix_printer.go:239.2,239.39 1 3240 +github.com/pterm/pterm/prefix_printer.go:236.39,238.3 1 90 +github.com/pterm/pterm/prefix_printer.go:245.62,247.39 2 420 +github.com/pterm/pterm/prefix_printer.go:250.2,254.12 5 410 +github.com/pterm/pterm/prefix_printer.go:247.39,249.3 1 10 +github.com/pterm/pterm/prefix_printer.go:260.64,262.39 2 3266 +github.com/pterm/pterm/prefix_printer.go:265.2,267.12 3 3256 +github.com/pterm/pterm/prefix_printer.go:262.39,264.3 1 10 +github.com/pterm/pterm/prefix_printer.go:272.78,274.39 2 190 +github.com/pterm/pterm/prefix_printer.go:277.2,279.12 3 180 +github.com/pterm/pterm/prefix_printer.go:274.39,276.3 1 10 +github.com/pterm/pterm/prefix_printer.go:285.80,287.39 2 1630 +github.com/pterm/pterm/prefix_printer.go:290.2,294.12 5 1620 +github.com/pterm/pterm/prefix_printer.go:287.39,289.3 1 10 +github.com/pterm/pterm/prefix_printer.go:302.69,303.24 1 10 +github.com/pterm/pterm/prefix_printer.go:311.2,312.12 2 10 +github.com/pterm/pterm/prefix_printer.go:303.24,304.33 1 10 +github.com/pterm/pterm/prefix_printer.go:304.33,305.18 1 5 +github.com/pterm/pterm/prefix_printer.go:305.18,307.5 1 5 +github.com/pterm/pterm/prefix_printer.go:318.85,319.24 1 10 +github.com/pterm/pterm/prefix_printer.go:327.2,328.12 2 10 +github.com/pterm/pterm/prefix_printer.go:319.24,320.33 1 10 +github.com/pterm/pterm/prefix_printer.go:320.33,321.18 1 5 +github.com/pterm/pterm/prefix_printer.go:321.18,323.5 1 5 +github.com/pterm/pterm/prefix_printer.go:332.52,334.2 1 5113 +github.com/pterm/pterm/prefix_printer.go:349.35,350.13 1 5466 +github.com/pterm/pterm/prefix_printer.go:350.13,351.12 1 5 +github.com/pterm/pterm/bulletlist_printer.go:18.62,21.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:24.63,27.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:30.69,33.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:36.67,39.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:42.71,45.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:64.81,67.2 2 75 +github.com/pterm/pterm/bulletlist_printer.go:70.75,73.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:76.73,79.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:82.77,85.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:88.76,91.2 2 1 +github.com/pterm/pterm/bulletlist_printer.go:94.43,99.2 3 55 +github.com/pterm/pterm/bulletlist_printer.go:102.54,104.31 2 73 +github.com/pterm/pterm/bulletlist_printer.go:125.2,125.17 1 73 +github.com/pterm/pterm/bulletlist_printer.go:104.31,105.28 1 72 +github.com/pterm/pterm/bulletlist_printer.go:112.3,112.30 1 72 +github.com/pterm/pterm/bulletlist_printer.go:119.3,119.24 1 72 +github.com/pterm/pterm/bulletlist_printer.go:105.28,106.26 1 72 +github.com/pterm/pterm/bulletlist_printer.go:106.26,108.5 1 18 +github.com/pterm/pterm/bulletlist_printer.go:108.10,110.5 1 54 +github.com/pterm/pterm/bulletlist_printer.go:112.30,113.28 1 72 +github.com/pterm/pterm/bulletlist_printer.go:113.28,115.5 1 18 +github.com/pterm/pterm/bulletlist_printer.go:115.10,117.5 1 54 +github.com/pterm/pterm/bulletlist_printer.go:119.24,121.4 1 54 +github.com/pterm/pterm/bulletlist_printer.go:121.9,123.4 1 18 +github.com/pterm/pterm/color.go:14.20,17.2 2 14231 +github.com/pterm/pterm/color.go:20.21,23.2 2 14232 +github.com/pterm/pterm/color.go:142.50,145.2 2 650 +github.com/pterm/pterm/color.go:150.48,153.36 3 84536 +github.com/pterm/pterm/color.go:156.2,157.16 2 84536 +github.com/pterm/pterm/color.go:153.36,155.3 1 85930 +github.com/pterm/pterm/color.go:162.64,164.2 1 36 +github.com/pterm/pterm/color.go:169.66,171.2 1 648 +github.com/pterm/pterm/color.go:177.55,181.2 3 326 +github.com/pterm/pterm/color.go:187.53,191.2 3 18 +github.com/pterm/pterm/color.go:196.69,200.2 3 18 +github.com/pterm/pterm/color.go:206.71,210.2 3 324 +github.com/pterm/pterm/color.go:215.60,216.24 1 2 +github.com/pterm/pterm/color.go:224.2,225.12 2 2 +github.com/pterm/pterm/color.go:216.24,217.33 1 2 +github.com/pterm/pterm/color.go:217.33,218.18 1 1 +github.com/pterm/pterm/color.go:218.18,220.5 1 1 +github.com/pterm/pterm/color.go:231.76,232.24 1 2 +github.com/pterm/pterm/color.go:240.2,241.12 2 2 +github.com/pterm/pterm/color.go:232.24,233.33 1 2 +github.com/pterm/pterm/color.go:233.33,234.18 1 1 +github.com/pterm/pterm/color.go:234.18,236.5 1 1 +github.com/pterm/pterm/color.go:245.32,247.2 1 356323 +github.com/pterm/pterm/color.go:250.33,252.2 1 1 +github.com/pterm/pterm/color.go:260.39,262.27 2 3305 +github.com/pterm/pterm/color.go:265.2,265.13 1 3305 +github.com/pterm/pterm/color.go:262.27,264.3 1 733 +github.com/pterm/pterm/color.go:269.43,272.28 2 5 +github.com/pterm/pterm/color.go:276.2,276.12 1 5 +github.com/pterm/pterm/color.go:272.28,274.3 1 6 +github.com/pterm/pterm/color.go:282.48,285.36 3 48902 +github.com/pterm/pterm/color.go:288.2,289.46 2 48902 +github.com/pterm/pterm/color.go:285.36,287.3 1 50864 +github.com/pterm/pterm/color.go:295.50,297.2 1 324 +github.com/pterm/pterm/color.go:301.64,303.2 1 60 +github.com/pterm/pterm/color.go:308.66,310.2 1 658 +github.com/pterm/pterm/color.go:316.40,318.2 1 66 +github.com/pterm/pterm/color.go:324.42,326.2 1 324 +github.com/pterm/pterm/color.go:331.56,333.2 1 18 +github.com/pterm/pterm/color.go:339.58,341.2 1 324 +github.com/pterm/pterm/color.go:344.30,346.2 1 1 +github.com/pterm/pterm/color.go:349.32,351.2 1 150632 +github.com/pterm/pterm/color.go:355.42,356.22 1 150632 +github.com/pterm/pterm/color.go:360.2,361.27 2 145143 +github.com/pterm/pterm/color.go:365.2,365.33 1 145143 +github.com/pterm/pterm/color.go:356.22,358.3 1 5489 +github.com/pterm/pterm/color.go:361.27,363.3 1 184463 +github.com/pterm/pterm/tree_printer.go:51.63,54.2 2 1 +github.com/pterm/pterm/tree_printer.go:57.63,60.2 2 1 +github.com/pterm/pterm/tree_printer.go:63.70,66.2 2 1 +github.com/pterm/pterm/tree_printer.go:69.75,72.2 2 1 +github.com/pterm/pterm/tree_printer.go:75.66,78.2 2 1 +github.com/pterm/pterm/tree_printer.go:81.64,84.2 2 1 +github.com/pterm/pterm/tree_printer.go:87.59,90.2 2 7 +github.com/pterm/pterm/tree_printer.go:94.58,95.16 1 2 +github.com/pterm/pterm/tree_printer.go:98.2,99.11 2 2 +github.com/pterm/pterm/tree_printer.go:95.16,97.3 1 1 +github.com/pterm/pterm/tree_printer.go:103.64,106.2 2 1 +github.com/pterm/pterm/tree_printer.go:109.37,114.2 3 2 +github.com/pterm/pterm/tree_printer.go:117.48,118.24 1 3 +github.com/pterm/pterm/tree_printer.go:121.2,121.24 1 3 +github.com/pterm/pterm/tree_printer.go:125.2,126.23 2 3 +github.com/pterm/pterm/tree_printer.go:129.2,130.20 2 3 +github.com/pterm/pterm/tree_printer.go:118.24,120.3 1 2 +github.com/pterm/pterm/tree_printer.go:121.24,123.3 1 2 +github.com/pterm/pterm/tree_printer.go:126.23,128.3 1 2 +github.com/pterm/pterm/tree_printer.go:136.73,138.28 2 6 +github.com/pterm/pterm/tree_printer.go:159.2,159.12 1 6 +github.com/pterm/pterm/tree_printer.go:138.28,139.22 1 11 +github.com/pterm/pterm/tree_printer.go:139.22,140.31 1 6 +github.com/pterm/pterm/tree_printer.go:140.31,143.5 1 4 +github.com/pterm/pterm/tree_printer.go:143.10,147.5 2 2 +github.com/pterm/pterm/tree_printer.go:148.9,148.30 1 5 +github.com/pterm/pterm/tree_printer.go:148.30,149.31 1 5 +github.com/pterm/pterm/tree_printer.go:149.31,152.5 1 4 +github.com/pterm/pterm/tree_printer.go:152.10,156.5 2 1 +github.com/pterm/pterm/pterm.go:25.13,27.2 1 1 +github.com/pterm/pterm/pterm.go:30.21,32.2 1 1 +github.com/pterm/pterm/pterm.go:35.22,37.2 1 2 +github.com/pterm/pterm/pterm.go:40.28,42.2 1 31 +github.com/pterm/pterm/pterm.go:45.29,47.2 1 36 +github.com/pterm/pterm/pterm.go:51.22,54.2 2 14230 +github.com/pterm/pterm/pterm.go:59.23,62.2 2 14230 +github.com/pterm/pterm/pterm.go:65.32,70.2 3 10 +github.com/pterm/pterm/theme.go:100.52,103.2 2 1 +github.com/pterm/pterm/theme.go:106.54,109.2 2 1 +github.com/pterm/pterm/theme.go:112.54,115.2 2 1 +github.com/pterm/pterm/theme.go:118.56,121.2 2 1 +github.com/pterm/pterm/theme.go:124.55,127.2 2 1 +github.com/pterm/pterm/theme.go:130.59,133.2 2 1 +github.com/pterm/pterm/theme.go:136.58,139.2 2 1 +github.com/pterm/pterm/theme.go:142.59,145.2 2 1 +github.com/pterm/pterm/theme.go:148.58,151.2 2 1 +github.com/pterm/pterm/theme.go:154.57,157.2 2 1 +github.com/pterm/pterm/theme.go:160.56,163.2 2 1 +github.com/pterm/pterm/theme.go:166.57,169.2 2 1 +github.com/pterm/pterm/theme.go:172.56,175.2 2 1 +github.com/pterm/pterm/theme.go:178.63,181.2 2 1 +github.com/pterm/pterm/theme.go:184.62,187.2 2 1 +github.com/pterm/pterm/theme.go:190.59,193.2 2 1 +github.com/pterm/pterm/theme.go:196.61,199.2 2 1 +github.com/pterm/pterm/theme.go:202.51,205.2 2 1 +github.com/pterm/pterm/theme.go:208.57,211.2 2 1 +github.com/pterm/pterm/theme.go:214.56,217.2 2 1 +github.com/pterm/pterm/theme.go:220.49,223.2 2 1 +github.com/pterm/pterm/theme.go:226.53,229.2 2 1 +github.com/pterm/pterm/theme.go:232.48,235.2 2 1 +github.com/pterm/pterm/theme.go:238.52,241.2 2 1 +github.com/pterm/pterm/theme.go:244.53,247.2 2 1 +github.com/pterm/pterm/theme.go:250.48,253.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:60.101,63.2 2 6 +github.com/pterm/pterm/interactive_multiselect_printer.go:66.108,69.2 2 3 +github.com/pterm/pterm/interactive_multiselect_printer.go:72.100,75.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:78.100,81.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:84.95,87.2 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:90.109,93.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:96.111,99.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:102.107,105.2 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:108.80,114.45 3 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:118.2,121.22 3 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:125.2,126.43 2 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:130.2,130.25 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:134.2,138.42 4 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:142.2,144.16 3 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:148.2,148.75 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:152.2,156.70 4 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:281.2,281.16 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:286.2,287.51 2 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:291.2,291.20 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:114.45,116.3 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:121.22,123.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:126.43,128.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:130.25,132.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:138.42,140.3 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:144.16,146.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:148.75,150.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:156.70,159.46 2 4885 +github.com/pterm/pterm/interactive_multiselect_printer.go:165.3,165.14 1 4885 +github.com/pterm/pterm/interactive_multiselect_printer.go:279.3,279.20 1 4883 +github.com/pterm/pterm/interactive_multiselect_printer.go:159.46,161.4 1 37 +github.com/pterm/pterm/interactive_multiselect_printer.go:161.9,163.4 1 4848 +github.com/pterm/pterm/interactive_multiselect_printer.go:166.21,167.38 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:170.4,171.20 2 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:172.20,173.37 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:177.4,177.37 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:178.21,179.16 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:188.4,188.37 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:189.19,190.16 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:195.23,197.36 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:202.4,202.33 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:206.4,208.47 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:214.4,219.37 5 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:220.18,223.37 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:224.19,227.40 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:230.4,230.37 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:231.16,232.38 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:235.4,235.28 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:253.4,253.37 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:254.18,255.38 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:258.4,259.54 2 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:273.4,273.37 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:274.19,276.20 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:167.38,169.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:173.37,176.5 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:179.16,187.5 5 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:190.16,194.5 3 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:197.36,200.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:202.33,204.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:208.47,210.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:210.10,212.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:227.40,229.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:232.38,234.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:235.28,237.51 2 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:237.51,240.37 3 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:244.6,244.117 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:240.37,243.7 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:246.10,251.5 4 1 +github.com/pterm/pterm/interactive_multiselect_printer.go:255.38,257.5 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:259.54,261.50 2 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:261.50,265.6 3 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:266.10,271.5 4 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:281.16,284.3 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:287.51,289.3 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:294.74,295.35 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:300.2,300.11 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:295.35,296.21 1 12 +github.com/pterm/pterm/interactive_multiselect_printer.go:296.21,298.4 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:303.76,304.51 1 54 +github.com/pterm/pterm/interactive_multiselect_printer.go:310.2,310.14 1 42 +github.com/pterm/pterm/interactive_multiselect_printer.go:304.51,305.46 1 60 +github.com/pterm/pterm/interactive_multiselect_printer.go:305.46,307.4 1 12 +github.com/pterm/pterm/interactive_multiselect_printer.go:313.73,314.30 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:314.30,316.52 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:316.52,317.47 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:317.47,319.10 2 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:322.8,325.3 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:328.67,336.42 5 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:339.2,339.39 1 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:343.2,344.49 2 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:351.2,351.37 1 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:368.2,369.14 2 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:372.2,374.16 2 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:336.42,338.3 1 0 +github.com/pterm/pterm/interactive_multiselect_printer.go:339.39,341.3 1 55 +github.com/pterm/pterm/interactive_multiselect_printer.go:344.49,346.64 1 55 +github.com/pterm/pterm/interactive_multiselect_printer.go:346.64,348.4 1 50 +github.com/pterm/pterm/interactive_multiselect_printer.go:351.37,352.19 1 55 +github.com/pterm/pterm/interactive_multiselect_printer.go:355.3,356.27 2 50 +github.com/pterm/pterm/interactive_multiselect_printer.go:361.3,361.28 1 50 +github.com/pterm/pterm/interactive_multiselect_printer.go:352.19,353.12 1 5 +github.com/pterm/pterm/interactive_multiselect_printer.go:356.27,358.4 1 12 +github.com/pterm/pterm/interactive_multiselect_printer.go:358.9,360.4 1 38 +github.com/pterm/pterm/interactive_multiselect_printer.go:361.28,363.4 1 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:363.9,365.4 1 40 +github.com/pterm/pterm/interactive_multiselect_printer.go:369.14,371.3 1 10 +github.com/pterm/pterm/interactive_multiselect_printer.go:377.68,380.43 3 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:384.2,384.16 1 2 +github.com/pterm/pterm/interactive_multiselect_printer.go:380.43,382.3 1 4 +github.com/pterm/pterm/interactive_multiselect_printer.go:387.64,389.2 1 14 +github.com/pterm/pterm/interactive_select_printer.go:51.90,54.2 2 1 +github.com/pterm/pterm/interactive_select_printer.go:57.91,60.2 2 3 +github.com/pterm/pterm/interactive_select_printer.go:63.94,66.2 2 3 +github.com/pterm/pterm/interactive_select_printer.go:69.90,72.2 2 1 +github.com/pterm/pterm/interactive_select_printer.go:75.73,81.45 3 2 +github.com/pterm/pterm/interactive_select_printer.go:85.2,88.22 3 2 +github.com/pterm/pterm/interactive_select_printer.go:92.2,93.43 2 2 +github.com/pterm/pterm/interactive_select_printer.go:97.2,97.25 1 2 +github.com/pterm/pterm/interactive_select_printer.go:101.2,106.27 4 2 +github.com/pterm/pterm/interactive_select_printer.go:123.2,125.16 3 2 +github.com/pterm/pterm/interactive_select_printer.go:129.2,134.70 4 2 +github.com/pterm/pterm/interactive_select_printer.go:238.2,238.16 1 2 +github.com/pterm/pterm/interactive_select_printer.go:243.2,243.22 1 2 +github.com/pterm/pterm/interactive_select_printer.go:81.45,83.3 1 2 +github.com/pterm/pterm/interactive_select_printer.go:88.22,90.3 1 0 +github.com/pterm/pterm/interactive_select_printer.go:93.43,95.3 1 0 +github.com/pterm/pterm/interactive_select_printer.go:97.25,99.3 1 0 +github.com/pterm/pterm/interactive_select_printer.go:106.27,107.36 1 2 +github.com/pterm/pterm/interactive_select_printer.go:107.36,108.33 1 7 +github.com/pterm/pterm/interactive_select_printer.go:108.33,110.44 2 2 +github.com/pterm/pterm/interactive_select_printer.go:117.5,118.10 2 2 +github.com/pterm/pterm/interactive_select_printer.go:110.44,113.6 2 1 +github.com/pterm/pterm/interactive_select_printer.go:113.11,116.6 2 1 +github.com/pterm/pterm/interactive_select_printer.go:125.16,127.3 1 0 +github.com/pterm/pterm/interactive_select_printer.go:134.70,137.46 2 1263 +github.com/pterm/pterm/interactive_select_printer.go:143.3,143.14 1 1263 +github.com/pterm/pterm/interactive_select_printer.go:236.3,236.20 1 1261 +github.com/pterm/pterm/interactive_select_printer.go:137.46,139.4 1 5 +github.com/pterm/pterm/interactive_select_printer.go:139.9,141.4 1 1258 +github.com/pterm/pterm/interactive_select_printer.go:144.21,152.37 6 0 +github.com/pterm/pterm/interactive_select_printer.go:153.19,156.37 3 0 +github.com/pterm/pterm/interactive_select_printer.go:157.23,159.36 1 0 +github.com/pterm/pterm/interactive_select_printer.go:164.4,164.33 1 0 +github.com/pterm/pterm/interactive_select_printer.go:168.4,170.47 2 0 +github.com/pterm/pterm/interactive_select_printer.go:176.4,181.37 5 0 +github.com/pterm/pterm/interactive_select_printer.go:182.16,183.38 1 2 +github.com/pterm/pterm/interactive_select_printer.go:186.4,186.28 1 2 +github.com/pterm/pterm/interactive_select_printer.go:204.4,204.37 1 2 +github.com/pterm/pterm/interactive_select_printer.go:205.18,206.38 1 2 +github.com/pterm/pterm/interactive_select_printer.go:209.4,210.54 2 2 +github.com/pterm/pterm/interactive_select_printer.go:224.4,224.37 1 2 +github.com/pterm/pterm/interactive_select_printer.go:225.19,227.20 2 0 +github.com/pterm/pterm/interactive_select_printer.go:228.19,229.38 1 2 +github.com/pterm/pterm/interactive_select_printer.go:232.4,233.20 2 2 +github.com/pterm/pterm/interactive_select_printer.go:159.36,162.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:164.33,166.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:170.47,172.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:172.10,174.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:183.38,185.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:186.28,188.51 2 2 +github.com/pterm/pterm/interactive_select_printer.go:188.51,191.37 3 0 +github.com/pterm/pterm/interactive_select_printer.go:195.6,195.117 1 0 +github.com/pterm/pterm/interactive_select_printer.go:191.37,194.7 2 0 +github.com/pterm/pterm/interactive_select_printer.go:197.10,202.5 4 0 +github.com/pterm/pterm/interactive_select_printer.go:206.38,208.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:210.54,212.50 2 2 +github.com/pterm/pterm/interactive_select_printer.go:212.50,216.6 3 0 +github.com/pterm/pterm/interactive_select_printer.go:217.10,222.5 4 0 +github.com/pterm/pterm/interactive_select_printer.go:229.38,231.5 1 0 +github.com/pterm/pterm/interactive_select_printer.go:238.16,241.3 2 0 +github.com/pterm/pterm/interactive_select_printer.go:246.62,254.42 5 8 +github.com/pterm/pterm/interactive_select_printer.go:257.2,257.39 1 8 +github.com/pterm/pterm/interactive_select_printer.go:261.2,261.36 1 8 +github.com/pterm/pterm/interactive_select_printer.go:265.2,266.49 2 8 +github.com/pterm/pterm/interactive_select_printer.go:273.2,273.37 1 8 +github.com/pterm/pterm/interactive_select_printer.go:284.2,284.16 1 8 +github.com/pterm/pterm/interactive_select_printer.go:254.42,256.3 1 0 +github.com/pterm/pterm/interactive_select_printer.go:257.39,259.3 1 44 +github.com/pterm/pterm/interactive_select_printer.go:261.36,263.3 1 8 +github.com/pterm/pterm/interactive_select_printer.go:266.49,268.64 1 44 +github.com/pterm/pterm/interactive_select_printer.go:268.64,270.4 1 40 +github.com/pterm/pterm/interactive_select_printer.go:273.37,274.19 1 44 +github.com/pterm/pterm/interactive_select_printer.go:277.3,277.28 1 40 +github.com/pterm/pterm/interactive_select_printer.go:274.19,275.12 1 4 +github.com/pterm/pterm/interactive_select_printer.go:277.28,279.4 1 8 +github.com/pterm/pterm/interactive_select_printer.go:279.9,281.4 1 32 +github.com/pterm/pterm/interactive_select_printer.go:287.63,293.2 4 2 +github.com/pterm/pterm/interactive_select_printer.go:295.59,297.2 1 10 +github.com/pterm/pterm/print.go:12.36,14.2 1 13819 +github.com/pterm/pterm/print.go:18.38,20.2 1 271549 +github.com/pterm/pterm/print.go:23.54,25.2 1 153765 +github.com/pterm/pterm/print.go:29.56,31.2 1 30 +github.com/pterm/pterm/print.go:34.40,37.2 2 6313 +github.com/pterm/pterm/print.go:40.39,42.2 1 27780 +github.com/pterm/pterm/print.go:47.30,49.2 1 3647 +github.com/pterm/pterm/print.go:54.32,56.2 1 455 +github.com/pterm/pterm/print.go:60.46,62.2 1 14 +github.com/pterm/pterm/print.go:67.48,69.2 1 14 +github.com/pterm/pterm/print.go:74.37,75.24 1 2 +github.com/pterm/pterm/print.go:75.24,76.33 1 2 +github.com/pterm/pterm/print.go:76.33,77.18 1 1 +github.com/pterm/pterm/print.go:77.18,79.5 1 1 +github.com/pterm/pterm/print.go:87.53,88.24 1 2 +github.com/pterm/pterm/print.go:88.24,89.33 1 2 +github.com/pterm/pterm/print.go:89.33,90.18 1 1 +github.com/pterm/pterm/print.go:90.18,92.5 1 1 +github.com/pterm/pterm/print.go:100.49,101.13 1 13738 +github.com/pterm/pterm/print.go:105.2,108.48 3 13700 +github.com/pterm/pterm/print.go:116.2,116.48 1 13700 +github.com/pterm/pterm/print.go:124.2,124.14 1 13700 +github.com/pterm/pterm/print.go:128.2,128.19 1 13700 +github.com/pterm/pterm/print.go:135.2,135.48 1 13700 +github.com/pterm/pterm/print.go:101.13,103.3 1 38 +github.com/pterm/pterm/print.go:108.48,109.43 1 19335 +github.com/pterm/pterm/print.go:109.43,113.4 3 13796 +github.com/pterm/pterm/print.go:116.48,117.51 1 143 +github.com/pterm/pterm/print.go:117.51,121.4 3 91 +github.com/pterm/pterm/print.go:124.14,126.3 1 10939 +github.com/pterm/pterm/print.go:128.19,130.3 1 15 +github.com/pterm/pterm/print.go:130.8,132.3 1 13685 +github.com/pterm/pterm/print.go:135.48,136.19 1 19335 +github.com/pterm/pterm/print.go:136.19,138.4 1 16572 +github.com/pterm/pterm/print.go:145.51,147.2 1 106 +github.com/pterm/pterm/print.go:156.31,157.13 1 12 +github.com/pterm/pterm/print.go:161.2,161.34 1 6 +github.com/pterm/pterm/print.go:157.13,159.3 1 6 +github.com/pterm/pterm/print.go:165.45,166.13 1 8353 +github.com/pterm/pterm/print.go:169.2,169.14 1 8347 +github.com/pterm/pterm/print.go:166.13,168.3 1 6 +github.com/pterm/pterm/print.go:169.14,171.3 1 1366 +github.com/pterm/pterm/print.go:171.8,173.3 1 6981 +github.com/pterm/pterm/print.go:177.53,179.2 1 40562 +github.com/pterm/pterm/print.go:181.35,183.2 1 223 +github.com/pterm/pterm/print.go:185.26,187.2 1 13887 +github.com/pterm/pterm/section_printer.go:30.65,33.2 2 2 +github.com/pterm/pterm/section_printer.go:36.62,39.2 2 3 +github.com/pterm/pterm/section_printer.go:42.74,45.2 2 1 +github.com/pterm/pterm/section_printer.go:48.69,51.2 2 2 +github.com/pterm/pterm/section_printer.go:54.72,57.2 2 2 +github.com/pterm/pterm/section_printer.go:60.70,63.2 2 1 +github.com/pterm/pterm/section_printer.go:67.57,68.20 1 1374 +github.com/pterm/pterm/section_printer.go:72.2,74.36 2 1374 +github.com/pterm/pterm/section_printer.go:78.2,78.17 1 1374 +github.com/pterm/pterm/section_printer.go:82.2,84.39 2 1374 +github.com/pterm/pterm/section_printer.go:88.2,88.12 1 1374 +github.com/pterm/pterm/section_printer.go:68.20,70.3 1 1 +github.com/pterm/pterm/section_printer.go:74.36,76.3 1 1370 +github.com/pterm/pterm/section_printer.go:78.17,80.3 1 1373 +github.com/pterm/pterm/section_printer.go:84.39,86.3 1 1370 +github.com/pterm/pterm/section_printer.go:93.59,96.2 2 652 +github.com/pterm/pterm/section_printer.go:99.73,101.2 1 686 +github.com/pterm/pterm/section_printer.go:105.75,107.2 1 650 +github.com/pterm/pterm/section_printer.go:112.63,116.2 3 18 +github.com/pterm/pterm/section_printer.go:121.65,125.2 3 327 +github.com/pterm/pterm/section_printer.go:129.79,133.2 3 18 +github.com/pterm/pterm/section_printer.go:138.81,142.2 3 324 +github.com/pterm/pterm/section_printer.go:147.70,148.24 1 2 +github.com/pterm/pterm/section_printer.go:156.2,157.12 2 2 +github.com/pterm/pterm/section_printer.go:148.24,149.33 1 2 +github.com/pterm/pterm/section_printer.go:149.33,150.18 1 1 +github.com/pterm/pterm/section_printer.go:150.18,152.5 1 1 +github.com/pterm/pterm/section_printer.go:163.86,164.24 1 2 +github.com/pterm/pterm/section_printer.go:172.2,173.12 2 2 +github.com/pterm/pterm/section_printer.go:164.24,165.33 1 2 +github.com/pterm/pterm/section_printer.go:165.33,166.18 1 1 +github.com/pterm/pterm/section_printer.go:166.18,168.5 1 1 github.com/pterm/pterm/barchart.go:44.63,47.2 2 14 github.com/pterm/pterm/barchart.go:50.81,53.2 2 1 github.com/pterm/pterm/barchart.go:56.83,59.2 2 1 @@ -641,26 +683,26 @@ github.com/pterm/pterm/barchart.go:62.69,66.2 3 5 github.com/pterm/pterm/barchart.go:69.65,72.2 2 1 github.com/pterm/pterm/barchart.go:75.64,78.2 2 1 github.com/pterm/pterm/barchart.go:81.68,84.2 2 11 -github.com/pterm/pterm/barchart.go:87.78,90.2 2 0 +github.com/pterm/pterm/barchart.go:87.72,90.2 2 1 github.com/pterm/pterm/barchart.go:92.48,95.29 2 1 github.com/pterm/pterm/barchart.go:99.2,99.12 1 1 github.com/pterm/pterm/barchart.go:95.29,97.3 1 6 -github.com/pterm/pterm/barchart.go:103.52,104.50 1 15 -github.com/pterm/pterm/barchart.go:122.2,122.29 1 15 -github.com/pterm/pterm/barchart.go:131.2,144.82 2 15 -github.com/pterm/pterm/barchart.go:168.2,168.82 1 15 -github.com/pterm/pterm/barchart.go:183.2,183.84 1 15 -github.com/pterm/pterm/barchart.go:207.2,207.84 1 15 -github.com/pterm/pterm/barchart.go:248.2,248.15 1 15 -github.com/pterm/pterm/barchart.go:251.2,251.29 1 14 -github.com/pterm/pterm/barchart.go:263.2,271.29 7 14 -github.com/pterm/pterm/barchart.go:284.2,286.18 2 14 -github.com/pterm/pterm/barchart.go:415.2,415.17 1 10 -github.com/pterm/pterm/barchart.go:104.50,108.22 3 14 -github.com/pterm/pterm/barchart.go:113.3,115.28 2 14 -github.com/pterm/pterm/barchart.go:119.3,119.16 1 14 -github.com/pterm/pterm/barchart.go:108.22,111.4 2 11 -github.com/pterm/pterm/barchart.go:115.28,117.4 1 4 +github.com/pterm/pterm/barchart.go:103.52,104.50 1 14 +github.com/pterm/pterm/barchart.go:122.2,122.29 1 14 +github.com/pterm/pterm/barchart.go:131.2,144.82 2 14 +github.com/pterm/pterm/barchart.go:168.2,168.82 1 14 +github.com/pterm/pterm/barchart.go:183.2,183.84 1 14 +github.com/pterm/pterm/barchart.go:207.2,207.84 1 14 +github.com/pterm/pterm/barchart.go:248.2,248.15 1 14 +github.com/pterm/pterm/barchart.go:251.2,251.29 1 13 +github.com/pterm/pterm/barchart.go:263.2,271.29 7 13 +github.com/pterm/pterm/barchart.go:284.2,286.18 2 13 +github.com/pterm/pterm/barchart.go:415.2,415.17 1 9 +github.com/pterm/pterm/barchart.go:104.50,108.22 3 13 +github.com/pterm/pterm/barchart.go:113.3,115.28 2 13 +github.com/pterm/pterm/barchart.go:119.3,119.16 1 13 +github.com/pterm/pterm/barchart.go:108.22,111.4 2 10 +github.com/pterm/pterm/barchart.go:115.28,117.4 1 3 github.com/pterm/pterm/barchart.go:122.29,123.16 1 4 github.com/pterm/pterm/barchart.go:127.3,127.15 1 2 github.com/pterm/pterm/barchart.go:123.16,125.4 1 2 @@ -673,12 +715,12 @@ github.com/pterm/pterm/barchart.go:150.31,152.5 1 180 github.com/pterm/pterm/barchart.go:152.10,154.5 1 380 github.com/pterm/pterm/barchart.go:161.21,162.58 1 4 github.com/pterm/pterm/barchart.go:162.58,164.5 1 60 -github.com/pterm/pterm/barchart.go:168.82,169.57 1 14 -github.com/pterm/pterm/barchart.go:177.3,177.24 1 14 -github.com/pterm/pterm/barchart.go:169.57,170.31 1 508 -github.com/pterm/pterm/barchart.go:170.31,172.5 1 393 +github.com/pterm/pterm/barchart.go:168.82,169.57 1 11 +github.com/pterm/pterm/barchart.go:177.3,177.24 1 11 +github.com/pterm/pterm/barchart.go:169.57,170.31 1 388 +github.com/pterm/pterm/barchart.go:170.31,172.5 1 273 github.com/pterm/pterm/barchart.go:172.10,174.5 1 115 -github.com/pterm/pterm/barchart.go:177.24,179.4 1 12 +github.com/pterm/pterm/barchart.go:177.24,179.4 1 9 github.com/pterm/pterm/barchart.go:183.84,184.24 1 11 github.com/pterm/pterm/barchart.go:190.3,190.55 1 11 github.com/pterm/pterm/barchart.go:198.3,198.24 1 11 @@ -700,17 +742,17 @@ github.com/pterm/pterm/barchart.go:224.24,239.32 1 10 github.com/pterm/pterm/barchart.go:243.4,243.60 1 10 github.com/pterm/pterm/barchart.go:239.32,241.5 1 2 github.com/pterm/pterm/barchart.go:248.15,250.3 1 1 -github.com/pterm/pterm/barchart.go:251.29,252.23 1 51 -github.com/pterm/pterm/barchart.go:256.3,256.28 1 51 -github.com/pterm/pterm/barchart.go:260.3,260.59 1 51 +github.com/pterm/pterm/barchart.go:251.29,252.23 1 48 +github.com/pterm/pterm/barchart.go:256.3,256.28 1 48 +github.com/pterm/pterm/barchart.go:260.3,260.59 1 48 github.com/pterm/pterm/barchart.go:252.23,254.4 1 3 github.com/pterm/pterm/barchart.go:256.28,258.4 1 48 -github.com/pterm/pterm/barchart.go:271.29,272.30 1 51 -github.com/pterm/pterm/barchart.go:275.3,275.30 1 51 -github.com/pterm/pterm/barchart.go:278.3,279.35 2 51 +github.com/pterm/pterm/barchart.go:271.29,272.30 1 48 +github.com/pterm/pterm/barchart.go:275.3,275.30 1 48 +github.com/pterm/pterm/barchart.go:278.3,279.35 2 48 github.com/pterm/pterm/barchart.go:272.30,274.4 1 13 -github.com/pterm/pterm/barchart.go:275.30,277.4 1 8 -github.com/pterm/pterm/barchart.go:279.35,281.4 1 15 +github.com/pterm/pterm/barchart.go:275.30,277.4 1 7 +github.com/pterm/pterm/barchart.go:279.35,281.4 1 13 github.com/pterm/pterm/barchart.go:286.18,294.41 5 4 github.com/pterm/pterm/barchart.go:299.3,299.30 1 4 github.com/pterm/pterm/barchart.go:331.3,332.18 2 4 @@ -723,193 +765,33 @@ github.com/pterm/pterm/barchart.go:316.10,320.23 2 5 github.com/pterm/pterm/barchart.go:326.5,326.22 1 5 github.com/pterm/pterm/barchart.go:320.23,324.6 2 3 github.com/pterm/pterm/barchart.go:326.22,328.6 1 2 -github.com/pterm/pterm/barchart.go:333.8,341.41 5 10 -github.com/pterm/pterm/barchart.go:346.3,346.30 1 10 -github.com/pterm/pterm/barchart.go:381.3,383.36 2 10 -github.com/pterm/pterm/barchart.go:390.3,390.36 1 10 -github.com/pterm/pterm/barchart.go:397.3,397.38 1 10 +github.com/pterm/pterm/barchart.go:333.8,341.41 5 9 +github.com/pterm/pterm/barchart.go:346.3,346.30 1 9 +github.com/pterm/pterm/barchart.go:381.3,383.36 2 9 +github.com/pterm/pterm/barchart.go:390.3,390.36 1 9 +github.com/pterm/pterm/barchart.go:397.3,397.38 1 9 github.com/pterm/pterm/barchart.go:341.41,344.4 2 1 -github.com/pterm/pterm/barchart.go:346.30,351.24 4 30 -github.com/pterm/pterm/barchart.go:377.4,378.102 2 30 +github.com/pterm/pterm/barchart.go:346.30,351.24 4 27 +github.com/pterm/pterm/barchart.go:377.4,378.102 2 27 github.com/pterm/pterm/barchart.go:351.24,357.5 3 12 -github.com/pterm/pterm/barchart.go:357.10,357.31 1 18 -github.com/pterm/pterm/barchart.go:357.31,362.5 2 12 +github.com/pterm/pterm/barchart.go:357.10,357.31 1 15 +github.com/pterm/pterm/barchart.go:357.31,362.5 2 9 github.com/pterm/pterm/barchart.go:362.10,366.23 2 6 github.com/pterm/pterm/barchart.go:372.5,372.22 1 6 github.com/pterm/pterm/barchart.go:366.23,370.6 2 4 github.com/pterm/pterm/barchart.go:372.22,374.6 1 2 -github.com/pterm/pterm/barchart.go:383.36,385.37 2 30 -github.com/pterm/pterm/barchart.go:385.37,387.5 1 9 -github.com/pterm/pterm/barchart.go:390.36,392.37 2 30 +github.com/pterm/pterm/barchart.go:383.36,385.37 2 27 +github.com/pterm/pterm/barchart.go:385.37,387.5 1 8 +github.com/pterm/pterm/barchart.go:390.36,392.37 2 27 github.com/pterm/pterm/barchart.go:392.37,394.5 1 2 -github.com/pterm/pterm/barchart.go:397.38,398.43 1 383 -github.com/pterm/pterm/barchart.go:411.4,411.15 1 383 -github.com/pterm/pterm/barchart.go:398.43,402.29 4 1257 -github.com/pterm/pterm/barchart.go:405.5,406.39 2 1257 -github.com/pterm/pterm/barchart.go:409.5,409.19 1 1257 -github.com/pterm/pterm/barchart.go:402.29,404.6 1 1227 -github.com/pterm/pterm/barchart.go:406.39,408.6 1 712 +github.com/pterm/pterm/barchart.go:397.38,398.43 1 339 +github.com/pterm/pterm/barchart.go:411.4,411.15 1 339 +github.com/pterm/pterm/barchart.go:398.43,402.29 4 1125 +github.com/pterm/pterm/barchart.go:405.5,406.39 2 1125 +github.com/pterm/pterm/barchart.go:409.5,409.19 1 1125 +github.com/pterm/pterm/barchart.go:402.29,404.6 1 1098 +github.com/pterm/pterm/barchart.go:406.39,408.6 1 583 github.com/pterm/pterm/barchart.go:419.41,424.2 3 14 -github.com/pterm/pterm/pterm.go:22.13,24.2 1 1 -github.com/pterm/pterm/pterm.go:27.21,29.2 1 1 -github.com/pterm/pterm/pterm.go:32.22,34.2 1 2 -github.com/pterm/pterm/pterm.go:37.28,39.2 1 31 -github.com/pterm/pterm/pterm.go:42.29,44.2 1 36 -github.com/pterm/pterm/pterm.go:48.22,51.2 2 14223 -github.com/pterm/pterm/pterm.go:56.23,59.2 2 14223 -github.com/pterm/pterm/pterm.go:62.32,67.2 3 10 -github.com/pterm/pterm/terminal.go:24.29,25.29 1 30970 -github.com/pterm/pterm/terminal.go:28.2,29.14 2 7 -github.com/pterm/pterm/terminal.go:25.29,27.3 1 30963 -github.com/pterm/pterm/terminal.go:33.30,34.30 1 17 -github.com/pterm/pterm/terminal.go:37.2,38.15 2 4 -github.com/pterm/pterm/terminal.go:34.30,36.3 1 13 -github.com/pterm/pterm/terminal.go:42.55,43.57 1 13 -github.com/pterm/pterm/terminal.go:46.2,47.12 2 12 -github.com/pterm/pterm/terminal.go:50.2,50.12 1 12 -github.com/pterm/pterm/terminal.go:53.2,53.16 1 12 -github.com/pterm/pterm/terminal.go:56.2,56.18 1 12 -github.com/pterm/pterm/terminal.go:43.57,45.3 1 1 -github.com/pterm/pterm/terminal.go:47.12,49.3 1 12 -github.com/pterm/pterm/terminal.go:50.12,52.3 1 12 -github.com/pterm/pterm/terminal.go:53.16,55.3 1 12 -github.com/pterm/pterm/terminal.go:60.51,64.2 3 10 -github.com/pterm/pterm/paragraph_printer.go:23.69,26.2 2 1 -github.com/pterm/pterm/paragraph_printer.go:29.80,32.2 2 0 -github.com/pterm/pterm/paragraph_printer.go:36.59,37.15 1 1373 -github.com/pterm/pterm/paragraph_printer.go:41.2,42.21 2 653 -github.com/pterm/pterm/paragraph_printer.go:45.2,47.33 3 652 -github.com/pterm/pterm/paragraph_printer.go:57.2,57.16 1 652 -github.com/pterm/pterm/paragraph_printer.go:37.15,39.3 1 720 -github.com/pterm/pterm/paragraph_printer.go:42.21,44.3 1 1 -github.com/pterm/pterm/paragraph_printer.go:47.33,48.30 1 405 -github.com/pterm/pterm/paragraph_printer.go:48.30,51.4 2 3 -github.com/pterm/pterm/paragraph_printer.go:51.9,54.4 2 402 -github.com/pterm/pterm/paragraph_printer.go:62.61,64.2 1 651 -github.com/pterm/pterm/paragraph_printer.go:67.75,69.2 1 684 -github.com/pterm/pterm/paragraph_printer.go:73.77,75.2 1 648 -github.com/pterm/pterm/paragraph_printer.go:80.65,84.2 3 20 -github.com/pterm/pterm/paragraph_printer.go:89.67,93.2 3 327 -github.com/pterm/pterm/paragraph_printer.go:97.81,101.2 3 18 -github.com/pterm/pterm/paragraph_printer.go:106.83,110.2 3 324 -github.com/pterm/pterm/paragraph_printer.go:115.72,116.24 1 2 -github.com/pterm/pterm/paragraph_printer.go:124.2,125.12 2 2 -github.com/pterm/pterm/paragraph_printer.go:116.24,117.33 1 2 -github.com/pterm/pterm/paragraph_printer.go:117.33,118.18 1 1 -github.com/pterm/pterm/paragraph_printer.go:118.18,120.5 1 1 -github.com/pterm/pterm/paragraph_printer.go:131.88,132.24 1 2 -github.com/pterm/pterm/paragraph_printer.go:140.2,141.12 2 2 -github.com/pterm/pterm/paragraph_printer.go:132.24,133.33 1 2 -github.com/pterm/pterm/paragraph_printer.go:133.33,134.18 1 1 -github.com/pterm/pterm/paragraph_printer.go:134.18,136.5 1 1 -github.com/pterm/pterm/section_printer.go:30.65,33.2 2 2 -github.com/pterm/pterm/section_printer.go:36.62,39.2 2 4 -github.com/pterm/pterm/section_printer.go:42.74,45.2 2 1 -github.com/pterm/pterm/section_printer.go:48.69,51.2 2 2 -github.com/pterm/pterm/section_printer.go:54.72,57.2 2 2 -github.com/pterm/pterm/section_printer.go:60.76,63.2 2 0 -github.com/pterm/pterm/section_printer.go:67.57,68.20 1 1379 -github.com/pterm/pterm/section_printer.go:72.2,74.36 2 1379 -github.com/pterm/pterm/section_printer.go:78.2,78.17 1 1379 -github.com/pterm/pterm/section_printer.go:82.2,84.39 2 1379 -github.com/pterm/pterm/section_printer.go:88.2,88.12 1 1379 -github.com/pterm/pterm/section_printer.go:68.20,70.3 1 1 -github.com/pterm/pterm/section_printer.go:74.36,76.3 1 1375 -github.com/pterm/pterm/section_printer.go:78.17,80.3 1 1378 -github.com/pterm/pterm/section_printer.go:84.39,86.3 1 1375 -github.com/pterm/pterm/section_printer.go:93.59,96.2 2 657 -github.com/pterm/pterm/section_printer.go:99.73,101.2 1 686 -github.com/pterm/pterm/section_printer.go:105.75,107.2 1 650 -github.com/pterm/pterm/section_printer.go:112.63,116.2 3 18 -github.com/pterm/pterm/section_printer.go:121.65,125.2 3 333 -github.com/pterm/pterm/section_printer.go:129.79,133.2 3 18 -github.com/pterm/pterm/section_printer.go:138.81,142.2 3 326 -github.com/pterm/pterm/section_printer.go:147.70,148.24 1 2 -github.com/pterm/pterm/section_printer.go:156.2,157.12 2 2 -github.com/pterm/pterm/section_printer.go:148.24,149.33 1 2 -github.com/pterm/pterm/section_printer.go:149.33,150.18 1 1 -github.com/pterm/pterm/section_printer.go:150.18,152.5 1 1 -github.com/pterm/pterm/section_printer.go:163.86,164.24 1 2 -github.com/pterm/pterm/section_printer.go:172.2,173.12 2 2 -github.com/pterm/pterm/section_printer.go:164.24,165.33 1 2 -github.com/pterm/pterm/section_printer.go:165.33,166.18 1 1 -github.com/pterm/pterm/section_printer.go:166.18,168.5 1 1 -github.com/pterm/pterm/color.go:14.20,17.2 2 14224 -github.com/pterm/pterm/color.go:20.21,23.2 2 14225 -github.com/pterm/pterm/color.go:142.50,145.2 2 650 -github.com/pterm/pterm/color.go:150.48,153.36 3 73138 -github.com/pterm/pterm/color.go:156.2,157.16 2 73138 -github.com/pterm/pterm/color.go:153.36,155.3 1 74532 -github.com/pterm/pterm/color.go:162.64,164.2 1 36 -github.com/pterm/pterm/color.go:169.66,171.2 1 648 -github.com/pterm/pterm/color.go:177.55,181.2 3 326 -github.com/pterm/pterm/color.go:187.53,191.2 3 18 -github.com/pterm/pterm/color.go:196.69,200.2 3 18 -github.com/pterm/pterm/color.go:206.71,210.2 3 324 -github.com/pterm/pterm/color.go:215.60,216.24 1 2 -github.com/pterm/pterm/color.go:224.2,225.12 2 2 -github.com/pterm/pterm/color.go:216.24,217.33 1 2 -github.com/pterm/pterm/color.go:217.33,218.18 1 1 -github.com/pterm/pterm/color.go:218.18,220.5 1 1 -github.com/pterm/pterm/color.go:231.76,232.24 1 2 -github.com/pterm/pterm/color.go:240.2,241.12 2 2 -github.com/pterm/pterm/color.go:232.24,233.33 1 2 -github.com/pterm/pterm/color.go:233.33,234.18 1 1 -github.com/pterm/pterm/color.go:234.18,236.5 1 1 -github.com/pterm/pterm/color.go:245.32,247.2 1 327052 -github.com/pterm/pterm/color.go:255.39,257.27 2 3313 -github.com/pterm/pterm/color.go:260.2,260.13 1 3313 -github.com/pterm/pterm/color.go:257.27,259.3 1 726 -github.com/pterm/pterm/color.go:264.43,267.28 2 5 -github.com/pterm/pterm/color.go:271.2,271.12 1 5 -github.com/pterm/pterm/color.go:267.28,269.3 1 6 -github.com/pterm/pterm/color.go:277.48,280.36 3 46526 -github.com/pterm/pterm/color.go:283.2,284.46 2 46526 -github.com/pterm/pterm/color.go:280.36,282.3 1 48484 -github.com/pterm/pterm/color.go:290.50,292.2 1 324 -github.com/pterm/pterm/color.go:296.64,298.2 1 36 -github.com/pterm/pterm/color.go:303.66,305.2 1 648 -github.com/pterm/pterm/color.go:311.40,313.2 1 18 -github.com/pterm/pterm/color.go:319.42,321.2 1 324 -github.com/pterm/pterm/color.go:326.56,328.2 1 18 -github.com/pterm/pterm/color.go:334.58,336.2 1 324 -github.com/pterm/pterm/color.go:339.30,341.2 1 1 -github.com/pterm/pterm/color.go:344.32,346.2 1 143496 -github.com/pterm/pterm/color.go:350.42,351.22 1 143496 -github.com/pterm/pterm/color.go:355.2,356.27 2 138007 -github.com/pterm/pterm/color.go:360.2,360.33 1 138007 -github.com/pterm/pterm/color.go:351.22,353.3 1 5489 -github.com/pterm/pterm/color.go:356.27,358.3 1 177988 -github.com/pterm/pterm/theme.go:93.52,96.2 2 1 -github.com/pterm/pterm/theme.go:99.54,102.2 2 1 -github.com/pterm/pterm/theme.go:105.54,108.2 2 1 -github.com/pterm/pterm/theme.go:111.56,114.2 2 1 -github.com/pterm/pterm/theme.go:117.55,120.2 2 1 -github.com/pterm/pterm/theme.go:123.59,126.2 2 1 -github.com/pterm/pterm/theme.go:129.58,132.2 2 1 -github.com/pterm/pterm/theme.go:135.59,138.2 2 1 -github.com/pterm/pterm/theme.go:141.58,144.2 2 1 -github.com/pterm/pterm/theme.go:147.57,150.2 2 1 -github.com/pterm/pterm/theme.go:153.56,156.2 2 1 -github.com/pterm/pterm/theme.go:159.57,162.2 2 1 -github.com/pterm/pterm/theme.go:165.56,168.2 2 1 -github.com/pterm/pterm/theme.go:171.63,174.2 2 1 -github.com/pterm/pterm/theme.go:177.62,180.2 2 1 -github.com/pterm/pterm/theme.go:183.59,186.2 2 1 -github.com/pterm/pterm/theme.go:189.61,192.2 2 1 -github.com/pterm/pterm/theme.go:195.51,198.2 2 1 -github.com/pterm/pterm/theme.go:201.57,204.2 2 1 -github.com/pterm/pterm/theme.go:207.56,210.2 2 1 -github.com/pterm/pterm/theme.go:213.49,216.2 2 1 -github.com/pterm/pterm/theme.go:219.53,222.2 2 1 -github.com/pterm/pterm/theme.go:225.48,228.2 2 1 -github.com/pterm/pterm/theme.go:231.52,234.2 2 1 -github.com/pterm/pterm/theme.go:237.53,240.2 2 1 -github.com/pterm/pterm/theme.go:243.48,246.2 2 1 -github.com/pterm/pterm/atoms.go:15.39,18.2 2 1 -github.com/pterm/pterm/atoms.go:21.48,24.2 2 1 -github.com/pterm/pterm/atoms.go:27.40,30.2 2 1 -github.com/pterm/pterm/atoms.go:33.43,36.2 2 1 github.com/pterm/pterm/box_printer.go:55.55,58.2 2 25 github.com/pterm/pterm/box_printer.go:61.61,70.2 8 2 github.com/pterm/pterm/box_printer.go:73.62,82.2 8 2 @@ -937,7 +819,7 @@ github.com/pterm/pterm/box_printer.go:200.17,202.3 1 1 github.com/pterm/pterm/box_printer.go:208.62,209.17 1 2 github.com/pterm/pterm/box_printer.go:212.2,213.11 2 2 github.com/pterm/pterm/box_printer.go:209.17,211.3 1 1 -github.com/pterm/pterm/box_printer.go:217.68,220.2 2 0 +github.com/pterm/pterm/box_printer.go:217.62,220.2 2 1 github.com/pterm/pterm/box_printer.go:224.53,225.23 1 1441 github.com/pterm/pterm/box_printer.go:228.2,228.24 1 1441 github.com/pterm/pterm/box_printer.go:231.2,236.19 4 1441 @@ -980,51 +862,442 @@ github.com/pterm/pterm/box_printer.go:369.2,370.12 2 2 github.com/pterm/pterm/box_printer.go:361.24,362.33 1 2 github.com/pterm/pterm/box_printer.go:362.33,363.18 1 1 github.com/pterm/pterm/box_printer.go:363.18,365.5 1 1 -github.com/pterm/pterm/spinner_printer.go:51.63,54.2 2 1 -github.com/pterm/pterm/spinner_printer.go:57.74,60.2 2 1 -github.com/pterm/pterm/spinner_printer.go:63.65,66.2 2 1 -github.com/pterm/pterm/spinner_printer.go:69.72,72.2 2 2 -github.com/pterm/pterm/spinner_printer.go:75.72,78.2 2 1 -github.com/pterm/pterm/spinner_printer.go:81.71,84.2 2 2 -github.com/pterm/pterm/spinner_printer.go:87.66,90.2 2 2 -github.com/pterm/pterm/spinner_printer.go:93.87,96.2 2 1 -github.com/pterm/pterm/spinner_printer.go:99.70,102.2 2 1 -github.com/pterm/pterm/spinner_printer.go:105.76,108.2 2 0 -github.com/pterm/pterm/spinner_printer.go:112.50,114.16 2 17 -github.com/pterm/pterm/spinner_printer.go:118.2,118.15 1 17 -github.com/pterm/pterm/spinner_printer.go:114.16,117.3 2 16 -github.com/pterm/pterm/spinner_printer.go:118.15,120.3 1 1 -github.com/pterm/pterm/spinner_printer.go:124.77,129.20 4 10 -github.com/pterm/pterm/spinner_printer.go:133.2,133.15 1 10 -github.com/pterm/pterm/spinner_printer.go:137.2,137.12 1 10 -github.com/pterm/pterm/spinner_printer.go:154.2,154.16 1 10 -github.com/pterm/pterm/spinner_printer.go:129.20,131.3 1 5 -github.com/pterm/pterm/spinner_printer.go:133.15,135.3 1 6 -github.com/pterm/pterm/spinner_printer.go:137.12,138.18 1 10 -github.com/pterm/pterm/spinner_printer.go:138.18,139.35 1 536530 -github.com/pterm/pterm/spinner_printer.go:139.35,140.33 1 93756 -github.com/pterm/pterm/spinner_printer.go:144.5,145.20 2 6 -github.com/pterm/pterm/spinner_printer.go:148.5,150.24 3 6 -github.com/pterm/pterm/spinner_printer.go:140.33,141.14 1 93898 -github.com/pterm/pterm/spinner_printer.go:145.20,147.6 1 5 -github.com/pterm/pterm/spinner_printer.go:159.39,161.22 2 65 -github.com/pterm/pterm/spinner_printer.go:167.2,167.12 1 65 -github.com/pterm/pterm/spinner_printer.go:161.22,164.3 2 2 -github.com/pterm/pterm/spinner_printer.go:164.8,166.3 1 63 -github.com/pterm/pterm/spinner_printer.go:173.63,177.2 3 2 -github.com/pterm/pterm/spinner_printer.go:182.62,186.2 3 3 -github.com/pterm/pterm/spinner_printer.go:190.58,191.29 1 19 -github.com/pterm/pterm/spinner_printer.go:195.2,195.23 1 19 -github.com/pterm/pterm/spinner_printer.go:198.2,200.14 3 19 -github.com/pterm/pterm/spinner_printer.go:191.29,193.3 1 1 -github.com/pterm/pterm/spinner_printer.go:195.23,197.3 1 1 -github.com/pterm/pterm/spinner_printer.go:205.55,206.26 1 19 -github.com/pterm/pterm/spinner_printer.go:210.2,210.23 1 19 -github.com/pterm/pterm/spinner_printer.go:213.2,215.14 3 19 -github.com/pterm/pterm/spinner_printer.go:206.26,208.3 1 1 -github.com/pterm/pterm/spinner_printer.go:210.23,212.3 1 1 -github.com/pterm/pterm/spinner_printer.go:220.58,221.29 1 19 -github.com/pterm/pterm/spinner_printer.go:225.2,225.23 1 19 -github.com/pterm/pterm/spinner_printer.go:228.2,230.14 3 19 -github.com/pterm/pterm/spinner_printer.go:221.29,223.3 1 1 -github.com/pterm/pterm/spinner_printer.go:225.23,227.3 1 1 +github.com/pterm/pterm/header_printer.go:35.67,38.2 2 1 +github.com/pterm/pterm/header_printer.go:41.73,44.2 2 1 +github.com/pterm/pterm/header_printer.go:47.62,50.2 2 1 +github.com/pterm/pterm/header_printer.go:53.64,56.2 2 20 +github.com/pterm/pterm/header_printer.go:59.68,62.2 2 1 +github.com/pterm/pterm/header_printer.go:66.56,67.15 1 1391 +github.com/pterm/pterm/header_printer.go:71.2,71.24 1 662 +github.com/pterm/pterm/header_printer.go:74.2,74.30 1 662 +github.com/pterm/pterm/header_printer.go:78.2,85.17 5 662 +github.com/pterm/pterm/header_printer.go:98.2,101.17 3 662 +github.com/pterm/pterm/header_printer.go:108.2,109.49 2 662 +github.com/pterm/pterm/header_printer.go:117.2,119.12 2 662 +github.com/pterm/pterm/header_printer.go:67.15,69.3 1 729 +github.com/pterm/pterm/header_printer.go:71.24,73.3 1 3 +github.com/pterm/pterm/header_printer.go:74.30,76.3 1 3 +github.com/pterm/pterm/header_printer.go:85.17,88.3 2 10 +github.com/pterm/pterm/header_printer.go:88.8,89.42 1 652 +github.com/pterm/pterm/header_printer.go:89.42,92.4 2 1 +github.com/pterm/pterm/header_printer.go:92.9,95.4 2 651 +github.com/pterm/pterm/header_printer.go:101.17,104.3 2 10 +github.com/pterm/pterm/header_printer.go:104.8,106.3 1 652 +github.com/pterm/pterm/header_printer.go:109.49,112.69 3 664 +github.com/pterm/pterm/header_printer.go:115.3,115.67 1 664 +github.com/pterm/pterm/header_printer.go:112.69,114.4 1 7 +github.com/pterm/pterm/header_printer.go:122.47,125.32 3 662 +github.com/pterm/pterm/header_printer.go:146.2,147.26 2 662 +github.com/pterm/pterm/header_printer.go:151.2,151.39 1 662 +github.com/pterm/pterm/header_printer.go:125.32,126.65 1 662 +github.com/pterm/pterm/header_printer.go:126.65,129.32 3 2 +github.com/pterm/pterm/header_printer.go:136.4,136.41 1 2 +github.com/pterm/pterm/header_printer.go:129.32,130.31 1 272 +github.com/pterm/pterm/header_printer.go:134.5,134.52 1 272 +github.com/pterm/pterm/header_printer.go:130.31,133.6 2 2 +github.com/pterm/pterm/header_printer.go:136.41,139.5 2 4 +github.com/pterm/pterm/header_printer.go:140.9,143.4 2 660 +github.com/pterm/pterm/header_printer.go:147.26,149.3 1 664 +github.com/pterm/pterm/header_printer.go:156.58,158.2 1 651 +github.com/pterm/pterm/header_printer.go:161.72,163.2 1 684 +github.com/pterm/pterm/header_printer.go:167.74,169.2 1 648 +github.com/pterm/pterm/header_printer.go:174.62,178.2 3 36 +github.com/pterm/pterm/header_printer.go:183.64,187.2 3 327 +github.com/pterm/pterm/header_printer.go:191.78,195.2 3 18 +github.com/pterm/pterm/header_printer.go:200.80,204.2 3 324 +github.com/pterm/pterm/header_printer.go:209.69,210.24 1 2 +github.com/pterm/pterm/header_printer.go:218.2,219.12 2 2 +github.com/pterm/pterm/header_printer.go:210.24,211.33 1 2 +github.com/pterm/pterm/header_printer.go:211.33,212.18 1 1 +github.com/pterm/pterm/header_printer.go:212.18,214.5 1 1 +github.com/pterm/pterm/header_printer.go:225.85,226.24 1 2 +github.com/pterm/pterm/header_printer.go:234.2,235.12 2 2 +github.com/pterm/pterm/header_printer.go:226.24,227.33 1 2 +github.com/pterm/pterm/header_printer.go:227.33,228.18 1 1 +github.com/pterm/pterm/header_printer.go:228.18,230.5 1 1 +github.com/pterm/pterm/rgb.go:21.42,23.2 1 16588 +github.com/pterm/pterm/rgb.go:26.32,28.2 1 33182 +github.com/pterm/pterm/rgb.go:31.62,32.13 1 16599 +github.com/pterm/pterm/rgb.go:37.2,37.19 1 16599 +github.com/pterm/pterm/rgb.go:57.2,57.10 1 1 +github.com/pterm/pterm/rgb.go:32.13,36.3 3 2 +github.com/pterm/pterm/rgb.go:37.19,43.3 1 16594 +github.com/pterm/pterm/rgb.go:43.8,43.25 1 5 +github.com/pterm/pterm/rgb.go:43.25,46.18 3 4 +github.com/pterm/pterm/rgb.go:46.18,48.4 1 1 +github.com/pterm/pterm/rgb.go:48.9,49.36 1 3 +github.com/pterm/pterm/rgb.go:49.36,51.24 2 3 +github.com/pterm/pterm/rgb.go:51.24,53.6 1 3 +github.com/pterm/pterm/rgb.go:62.46,64.2 1 4135 +github.com/pterm/pterm/rgb.go:68.48,70.2 1 1950 +github.com/pterm/pterm/rgb.go:73.62,75.2 1 2052 +github.com/pterm/pterm/rgb.go:79.64,81.2 1 1944 +github.com/pterm/pterm/rgb.go:86.51,90.2 3 54 +github.com/pterm/pterm/rgb.go:95.53,99.2 3 978 +github.com/pterm/pterm/rgb.go:103.67,107.2 3 54 +github.com/pterm/pterm/rgb.go:112.69,116.2 3 972 +github.com/pterm/pterm/rgb.go:121.58,122.24 1 6 +github.com/pterm/pterm/rgb.go:130.2,131.12 2 6 +github.com/pterm/pterm/rgb.go:122.24,123.33 1 6 +github.com/pterm/pterm/rgb.go:123.33,124.18 1 3 +github.com/pterm/pterm/rgb.go:124.18,126.5 1 3 +github.com/pterm/pterm/rgb.go:137.74,138.24 1 6 +github.com/pterm/pterm/rgb.go:146.2,147.12 2 6 +github.com/pterm/pterm/rgb.go:138.24,139.33 1 6 +github.com/pterm/pterm/rgb.go:139.33,140.18 1 3 +github.com/pterm/pterm/rgb.go:140.18,142.5 1 3 +github.com/pterm/pterm/spinner_printer.go:54.63,57.2 2 4 +github.com/pterm/pterm/spinner_printer.go:60.74,63.2 2 1 +github.com/pterm/pterm/spinner_printer.go:66.65,69.2 2 1 +github.com/pterm/pterm/spinner_printer.go:72.72,75.2 2 2 +github.com/pterm/pterm/spinner_printer.go:78.72,81.2 2 1 +github.com/pterm/pterm/spinner_printer.go:84.71,87.2 2 1 +github.com/pterm/pterm/spinner_printer.go:90.66,93.2 2 1 +github.com/pterm/pterm/spinner_printer.go:96.87,99.2 2 1 +github.com/pterm/pterm/spinner_printer.go:102.70,105.2 2 1 +github.com/pterm/pterm/spinner_printer.go:108.70,111.2 2 4 +github.com/pterm/pterm/spinner_printer.go:115.50,117.16 2 4 +github.com/pterm/pterm/spinner_printer.go:121.2,121.15 1 4 +github.com/pterm/pterm/spinner_printer.go:117.16,120.3 2 3 +github.com/pterm/pterm/spinner_printer.go:121.15,123.3 1 1 +github.com/pterm/pterm/spinner_printer.go:127.77,132.20 4 12 +github.com/pterm/pterm/spinner_printer.go:136.2,136.15 1 12 +github.com/pterm/pterm/spinner_printer.go:140.2,140.12 1 12 +github.com/pterm/pterm/spinner_printer.go:158.2,158.16 1 12 +github.com/pterm/pterm/spinner_printer.go:132.20,134.3 1 4 +github.com/pterm/pterm/spinner_printer.go:136.15,138.3 1 7 +github.com/pterm/pterm/spinner_printer.go:140.12,141.18 1 12 +github.com/pterm/pterm/spinner_printer.go:141.18,142.35 1 201409901 +github.com/pterm/pterm/spinner_printer.go:142.35,143.33 1 280181 +github.com/pterm/pterm/spinner_printer.go:147.5,148.20 2 141 +github.com/pterm/pterm/spinner_printer.go:151.5,154.24 4 141 +github.com/pterm/pterm/spinner_printer.go:143.33,144.14 1 280040 +github.com/pterm/pterm/spinner_printer.go:148.20,150.6 1 141 +github.com/pterm/pterm/spinner_printer.go:163.39,164.17 1 86 +github.com/pterm/pterm/spinner_printer.go:167.2,168.22 2 3 +github.com/pterm/pterm/spinner_printer.go:174.2,174.12 1 3 +github.com/pterm/pterm/spinner_printer.go:164.17,166.3 1 83 +github.com/pterm/pterm/spinner_printer.go:168.22,171.3 2 0 +github.com/pterm/pterm/spinner_printer.go:171.8,173.3 1 3 +github.com/pterm/pterm/spinner_printer.go:180.63,184.2 3 2 +github.com/pterm/pterm/spinner_printer.go:189.62,193.2 3 3 +github.com/pterm/pterm/spinner_printer.go:197.55,198.26 1 19 +github.com/pterm/pterm/spinner_printer.go:202.2,202.23 1 19 +github.com/pterm/pterm/spinner_printer.go:205.2,207.14 3 19 +github.com/pterm/pterm/spinner_printer.go:198.26,200.3 1 1 +github.com/pterm/pterm/spinner_printer.go:202.23,204.3 1 1 +github.com/pterm/pterm/spinner_printer.go:212.58,213.29 1 19 +github.com/pterm/pterm/spinner_printer.go:217.2,217.23 1 19 +github.com/pterm/pterm/spinner_printer.go:220.2,222.14 3 19 +github.com/pterm/pterm/spinner_printer.go:213.29,215.3 1 1 +github.com/pterm/pterm/spinner_printer.go:217.23,219.3 1 1 +github.com/pterm/pterm/spinner_printer.go:227.55,228.26 1 20 +github.com/pterm/pterm/spinner_printer.go:232.2,232.23 1 20 +github.com/pterm/pterm/spinner_printer.go:235.2,237.14 3 20 +github.com/pterm/pterm/spinner_printer.go:228.26,230.3 1 1 +github.com/pterm/pterm/spinner_printer.go:232.23,234.3 1 1 +github.com/pterm/pterm/spinner_printer.go:242.58,243.29 1 20 +github.com/pterm/pterm/spinner_printer.go:247.2,247.23 1 20 +github.com/pterm/pterm/spinner_printer.go:250.2,252.14 3 20 +github.com/pterm/pterm/spinner_printer.go:243.29,245.3 1 1 +github.com/pterm/pterm/spinner_printer.go:247.23,249.3 1 1 +github.com/pterm/pterm/basic_text_printer.go:21.69,24.2 2 1 +github.com/pterm/pterm/basic_text_printer.go:26.74,29.2 2 1 +github.com/pterm/pterm/basic_text_printer.go:33.59,34.20 1 1371 +github.com/pterm/pterm/basic_text_printer.go:37.2,37.29 1 1371 +github.com/pterm/pterm/basic_text_printer.go:34.20,36.3 1 1371 +github.com/pterm/pterm/basic_text_printer.go:42.61,45.2 2 651 +github.com/pterm/pterm/basic_text_printer.go:48.75,50.2 1 684 +github.com/pterm/pterm/basic_text_printer.go:54.77,56.2 1 648 +github.com/pterm/pterm/basic_text_printer.go:61.65,65.2 3 18 +github.com/pterm/pterm/basic_text_printer.go:70.67,74.2 3 327 +github.com/pterm/pterm/basic_text_printer.go:78.81,82.2 3 18 +github.com/pterm/pterm/basic_text_printer.go:87.83,91.2 3 324 +github.com/pterm/pterm/basic_text_printer.go:96.72,97.24 1 2 +github.com/pterm/pterm/basic_text_printer.go:105.2,106.12 2 2 +github.com/pterm/pterm/basic_text_printer.go:97.24,98.33 1 2 +github.com/pterm/pterm/basic_text_printer.go:98.33,99.18 1 1 +github.com/pterm/pterm/basic_text_printer.go:99.18,101.5 1 1 +github.com/pterm/pterm/basic_text_printer.go:112.88,113.24 1 2 +github.com/pterm/pterm/basic_text_printer.go:121.2,122.12 2 2 +github.com/pterm/pterm/basic_text_printer.go:113.24,114.33 1 2 +github.com/pterm/pterm/basic_text_printer.go:114.33,115.18 1 1 +github.com/pterm/pterm/basic_text_printer.go:115.18,117.5 1 1 +github.com/pterm/pterm/center_printer.go:25.79,29.2 3 3 +github.com/pterm/pterm/center_printer.go:32.68,35.2 2 1 +github.com/pterm/pterm/center_printer.go:39.56,40.15 1 2094 +github.com/pterm/pterm/center_printer.go:44.2,48.32 3 996 +github.com/pterm/pterm/center_printer.go:60.2,62.29 2 653 +github.com/pterm/pterm/center_printer.go:69.2,71.18 2 653 +github.com/pterm/pterm/center_printer.go:79.2,79.29 1 652 +github.com/pterm/pterm/center_printer.go:83.2,83.12 1 652 +github.com/pterm/pterm/center_printer.go:40.15,42.3 1 1098 +github.com/pterm/pterm/center_printer.go:48.32,49.30 1 343 +github.com/pterm/pterm/center_printer.go:57.3,57.13 1 343 +github.com/pterm/pterm/center_printer.go:49.30,51.18 2 649 +github.com/pterm/pterm/center_printer.go:51.18,53.5 1 1 +github.com/pterm/pterm/center_printer.go:53.10,55.5 1 648 +github.com/pterm/pterm/center_printer.go:62.29,64.32 2 961 +github.com/pterm/pterm/center_printer.go:64.32,66.4 1 652 +github.com/pterm/pterm/center_printer.go:71.18,72.30 1 1 +github.com/pterm/pterm/center_printer.go:76.3,76.13 1 1 +github.com/pterm/pterm/center_printer.go:72.30,74.4 1 1 +github.com/pterm/pterm/center_printer.go:79.29,81.3 1 960 +github.com/pterm/pterm/center_printer.go:88.58,90.2 1 1298 +github.com/pterm/pterm/center_printer.go:93.72,95.2 1 720 +github.com/pterm/pterm/center_printer.go:99.74,101.2 1 648 +github.com/pterm/pterm/center_printer.go:106.61,110.2 3 36 +github.com/pterm/pterm/center_printer.go:115.63,119.2 3 650 +github.com/pterm/pterm/center_printer.go:123.77,127.2 3 36 +github.com/pterm/pterm/center_printer.go:132.79,136.2 3 324 +github.com/pterm/pterm/center_printer.go:141.68,142.24 1 2 +github.com/pterm/pterm/center_printer.go:150.2,151.12 2 2 +github.com/pterm/pterm/center_printer.go:142.24,143.33 1 2 +github.com/pterm/pterm/center_printer.go:143.33,144.18 1 1 +github.com/pterm/pterm/center_printer.go:144.18,146.5 1 1 +github.com/pterm/pterm/center_printer.go:157.84,158.24 1 2 +github.com/pterm/pterm/center_printer.go:166.2,167.12 2 2 +github.com/pterm/pterm/center_printer.go:158.24,159.33 1 2 +github.com/pterm/pterm/center_printer.go:159.33,160.18 1 1 +github.com/pterm/pterm/center_printer.go:160.18,162.5 1 1 +github.com/pterm/pterm/deprecated.go:14.48,16.2 1 3 +github.com/pterm/pterm/deprecated.go:21.71,25.23 3 4 +github.com/pterm/pterm/deprecated.go:32.2,32.10 1 4 +github.com/pterm/pterm/deprecated.go:25.23,30.3 1 14 +github.com/pterm/pterm/deprecated.go:38.64,42.23 3 2 +github.com/pterm/pterm/deprecated.go:50.2,50.10 1 2 +github.com/pterm/pterm/deprecated.go:42.23,48.3 1 7 +github.com/pterm/pterm/deprecated.go:56.77,58.25 2 1 +github.com/pterm/pterm/deprecated.go:61.2,61.42 1 1 +github.com/pterm/pterm/deprecated.go:58.25,60.3 1 6 +github.com/pterm/pterm/deprecated.go:67.78,73.2 2 6 +github.com/pterm/pterm/deprecated.go:78.74,80.2 1 1 +github.com/pterm/pterm/deprecated.go:85.68,86.32 1 10 +github.com/pterm/pterm/deprecated.go:90.2,95.42 2 8 +github.com/pterm/pterm/deprecated.go:119.2,119.14 1 8 +github.com/pterm/pterm/deprecated.go:86.32,88.3 1 2 +github.com/pterm/pterm/deprecated.go:95.42,98.23 2 65 +github.com/pterm/pterm/deprecated.go:103.3,103.35 1 65 +github.com/pterm/pterm/deprecated.go:109.3,109.37 1 65 +github.com/pterm/pterm/deprecated.go:113.3,116.5 1 65 +github.com/pterm/pterm/deprecated.go:98.23,101.4 2 1 +github.com/pterm/pterm/deprecated.go:103.35,104.52 1 57 +github.com/pterm/pterm/deprecated.go:104.52,106.5 1 1 +github.com/pterm/pterm/deprecated.go:109.37,112.4 2 51 +github.com/pterm/pterm/deprecated.go:125.45,130.19 4 12 +github.com/pterm/pterm/deprecated.go:133.2,133.19 1 12 +github.com/pterm/pterm/deprecated.go:137.2,138.16 2 8 +github.com/pterm/pterm/deprecated.go:141.2,147.8 2 7 +github.com/pterm/pterm/deprecated.go:130.19,132.3 1 4 +github.com/pterm/pterm/deprecated.go:133.19,135.3 1 4 +github.com/pterm/pterm/deprecated.go:138.16,140.3 1 1 +github.com/pterm/pterm/panel_printer.go:36.63,39.2 2 96 +github.com/pterm/pterm/panel_printer.go:42.62,43.17 1 2 +github.com/pterm/pterm/panel_printer.go:46.2,47.11 2 2 +github.com/pterm/pterm/panel_printer.go:43.17,45.3 1 1 +github.com/pterm/pterm/panel_printer.go:51.74,52.23 1 20 +github.com/pterm/pterm/panel_printer.go:55.2,56.11 2 20 +github.com/pterm/pterm/panel_printer.go:52.23,54.3 1 1 +github.com/pterm/pterm/panel_printer.go:60.68,63.2 2 19 +github.com/pterm/pterm/panel_printer.go:66.75,69.2 2 19 +github.com/pterm/pterm/panel_printer.go:72.66,75.2 2 1 +github.com/pterm/pterm/panel_printer.go:77.45,79.33 2 45 +github.com/pterm/pterm/panel_printer.go:85.2,85.12 1 45 +github.com/pterm/pterm/panel_printer.go:79.33,80.32 1 99 +github.com/pterm/pterm/panel_printer.go:83.3,83.14 1 99 +github.com/pterm/pterm/panel_printer.go:80.32,82.4 1 117 +github.com/pterm/pterm/panel_printer.go:89.49,92.15 2 96 +github.com/pterm/pterm/panel_printer.go:96.2,96.26 1 51 +github.com/pterm/pterm/panel_printer.go:102.2,102.36 1 51 +github.com/pterm/pterm/panel_printer.go:110.2,110.26 1 51 +github.com/pterm/pterm/panel_printer.go:118.2,120.23 2 51 +github.com/pterm/pterm/panel_printer.go:130.2,130.35 1 51 +github.com/pterm/pterm/panel_printer.go:180.2,180.17 1 51 +github.com/pterm/pterm/panel_printer.go:92.15,94.3 1 45 +github.com/pterm/pterm/panel_printer.go:96.26,97.31 1 104 +github.com/pterm/pterm/panel_printer.go:97.31,99.4 1 126 +github.com/pterm/pterm/panel_printer.go:102.36,103.27 1 9 +github.com/pterm/pterm/panel_printer.go:103.27,104.32 1 18 +github.com/pterm/pterm/panel_printer.go:104.32,106.5 1 27 +github.com/pterm/pterm/panel_printer.go:110.26,111.27 1 104 +github.com/pterm/pterm/panel_printer.go:111.27,112.32 1 54 +github.com/pterm/pterm/panel_printer.go:112.32,114.5 1 72 +github.com/pterm/pterm/panel_printer.go:120.23,121.34 1 9 +github.com/pterm/pterm/panel_printer.go:121.34,122.29 1 27 +github.com/pterm/pterm/panel_printer.go:122.29,123.68 1 27 +github.com/pterm/pterm/panel_printer.go:123.68,125.6 1 21 +github.com/pterm/pterm/panel_printer.go:130.35,135.31 3 104 +github.com/pterm/pterm/panel_printer.go:139.3,139.40 1 104 +github.com/pterm/pterm/panel_printer.go:143.3,143.38 1 104 +github.com/pterm/pterm/panel_printer.go:150.3,150.34 1 104 +github.com/pterm/pterm/panel_printer.go:135.31,137.4 1 126 +github.com/pterm/pterm/panel_printer.go:139.40,141.4 1 126 +github.com/pterm/pterm/panel_printer.go:143.38,145.26 2 126 +github.com/pterm/pterm/panel_printer.go:145.26,147.5 1 104 +github.com/pterm/pterm/panel_printer.go:150.34,151.22 1 215 +github.com/pterm/pterm/panel_printer.go:151.22,152.43 1 215 +github.com/pterm/pterm/panel_printer.go:175.5,175.16 1 215 +github.com/pterm/pterm/panel_printer.go:152.43,156.28 4 312 +github.com/pterm/pterm/panel_printer.go:159.6,159.30 1 312 +github.com/pterm/pterm/panel_printer.go:162.6,163.28 2 312 +github.com/pterm/pterm/panel_printer.go:172.6,173.23 2 312 +github.com/pterm/pterm/panel_printer.go:156.28,158.7 1 285 +github.com/pterm/pterm/panel_printer.go:159.30,161.7 1 276 +github.com/pterm/pterm/panel_printer.go:163.28,164.44 1 285 +github.com/pterm/pterm/panel_printer.go:164.44,166.8 1 87 +github.com/pterm/pterm/panel_printer.go:167.12,168.51 1 27 +github.com/pterm/pterm/panel_printer.go:168.51,170.8 1 17 +github.com/pterm/pterm/panel_printer.go:184.38,189.2 3 92 +github.com/pterm/pterm/progressbar_printer.go:64.72,67.2 2 3 +github.com/pterm/pterm/progressbar_printer.go:72.76,75.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:78.70,81.2 2 8 +github.com/pterm/pterm/progressbar_printer.go:84.74,87.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:90.79,93.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:96.80,99.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:102.103,105.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:108.80,111.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:114.74,117.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:120.74,123.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:126.79,129.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:132.78,135.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:138.76,141.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:144.79,147.2 2 2 +github.com/pterm/pterm/progressbar_printer.go:150.76,153.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:156.78,159.2 2 2 +github.com/pterm/pterm/progressbar_printer.go:162.62,165.2 2 1 +github.com/pterm/pterm/progressbar_printer.go:168.76,172.2 3 16574 +github.com/pterm/pterm/progressbar_printer.go:175.67,176.25 1 16587 +github.com/pterm/pterm/progressbar_printer.go:179.2,179.23 1 16587 +github.com/pterm/pterm/progressbar_printer.go:182.2,182.18 1 16587 +github.com/pterm/pterm/progressbar_printer.go:186.2,190.21 4 16586 +github.com/pterm/pterm/progressbar_printer.go:198.2,207.17 5 16586 +github.com/pterm/pterm/progressbar_printer.go:210.2,210.17 1 16586 +github.com/pterm/pterm/progressbar_printer.go:214.2,216.22 2 16586 +github.com/pterm/pterm/progressbar_printer.go:219.2,219.23 1 16586 +github.com/pterm/pterm/progressbar_printer.go:223.2,227.39 4 16586 +github.com/pterm/pterm/progressbar_printer.go:231.2,232.26 2 16586 +github.com/pterm/pterm/progressbar_printer.go:238.2,238.16 1 16586 +github.com/pterm/pterm/progressbar_printer.go:241.2,241.10 1 16586 +github.com/pterm/pterm/progressbar_printer.go:176.25,178.3 1 2 +github.com/pterm/pterm/progressbar_printer.go:179.23,181.3 1 2 +github.com/pterm/pterm/progressbar_printer.go:182.18,184.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:190.21,192.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:192.8,192.44 1 16585 +github.com/pterm/pterm/progressbar_printer.go:192.44,194.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:194.8,196.3 1 16584 +github.com/pterm/pterm/progressbar_printer.go:207.17,209.3 1 16585 +github.com/pterm/pterm/progressbar_printer.go:210.17,212.3 1 16585 +github.com/pterm/pterm/progressbar_printer.go:216.22,218.3 1 16585 +github.com/pterm/pterm/progressbar_printer.go:219.23,221.3 1 16585 +github.com/pterm/pterm/progressbar_printer.go:227.39,229.3 1 16584 +github.com/pterm/pterm/progressbar_printer.go:232.26,234.3 1 4 +github.com/pterm/pterm/progressbar_printer.go:234.8,236.3 1 16582 +github.com/pterm/pterm/progressbar_printer.go:238.16,240.3 1 7889 +github.com/pterm/pterm/progressbar_printer.go:245.65,246.18 1 7 +github.com/pterm/pterm/progressbar_printer.go:250.2,253.26 3 6 +github.com/pterm/pterm/progressbar_printer.go:256.2,256.10 1 6 +github.com/pterm/pterm/progressbar_printer.go:246.18,248.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:253.26,255.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:260.86,261.30 1 7 +github.com/pterm/pterm/progressbar_printer.go:264.2,265.21 2 7 +github.com/pterm/pterm/progressbar_printer.go:268.2,273.16 4 7 +github.com/pterm/pterm/progressbar_printer.go:261.30,263.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:265.21,267.3 1 0 +github.com/pterm/pterm/progressbar_printer.go:277.66,278.17 1 9 +github.com/pterm/pterm/progressbar_printer.go:281.2,282.22 2 2 +github.com/pterm/pterm/progressbar_printer.go:288.2,288.15 1 2 +github.com/pterm/pterm/progressbar_printer.go:278.17,280.3 1 7 +github.com/pterm/pterm/progressbar_printer.go:282.22,285.3 2 1 +github.com/pterm/pterm/progressbar_printer.go:285.8,287.3 1 1 +github.com/pterm/pterm/progressbar_printer.go:294.66,298.2 3 2 +github.com/pterm/pterm/progressbar_printer.go:303.65,307.2 3 1 +github.com/pterm/pterm/progressbar_printer.go:310.61,312.2 1 16586 +github.com/pterm/pterm/progressbar_printer.go:314.56,317.2 2 16585 +github.com/pterm/pterm/interactive_confirm_printer.go:42.92,45.2 2 1 +github.com/pterm/pterm/interactive_confirm_printer.go:48.92,51.2 2 3 +github.com/pterm/pterm/interactive_confirm_printer.go:54.91,57.2 2 1 +github.com/pterm/pterm/interactive_confirm_printer.go:60.92,63.2 2 2 +github.com/pterm/pterm/interactive_confirm_printer.go:66.94,69.2 2 1 +github.com/pterm/pterm/interactive_confirm_printer.go:72.91,75.2 2 2 +github.com/pterm/pterm/interactive_confirm_printer.go:78.93,81.2 2 1 +github.com/pterm/pterm/interactive_confirm_printer.go:84.93,87.2 2 1 +github.com/pterm/pterm/interactive_confirm_printer.go:95.71,103.37 4 8 +github.com/pterm/pterm/interactive_confirm_printer.go:107.2,111.71 4 8 +github.com/pterm/pterm/interactive_confirm_printer.go:148.2,148.18 1 8 +github.com/pterm/pterm/interactive_confirm_printer.go:151.2,151.20 1 8 +github.com/pterm/pterm/interactive_confirm_printer.go:103.37,105.3 1 8 +github.com/pterm/pterm/interactive_confirm_printer.go:111.71,114.17 3 1721 +github.com/pterm/pterm/interactive_confirm_printer.go:118.3,118.14 1 1721 +github.com/pterm/pterm/interactive_confirm_printer.go:146.3,146.20 1 1713 +github.com/pterm/pterm/interactive_confirm_printer.go:114.17,116.4 1 0 +github.com/pterm/pterm/interactive_confirm_printer.go:119.21,120.16 1 6 +github.com/pterm/pterm/interactive_confirm_printer.go:132.19,133.22 1 2 +github.com/pterm/pterm/interactive_confirm_printer.go:138.4,140.20 3 2 +github.com/pterm/pterm/interactive_confirm_printer.go:141.19,144.20 3 0 +github.com/pterm/pterm/interactive_confirm_printer.go:121.11,125.21 4 3 +github.com/pterm/pterm/interactive_confirm_printer.go:126.11,130.21 4 3 +github.com/pterm/pterm/interactive_confirm_printer.go:133.22,135.5 1 1 +github.com/pterm/pterm/interactive_confirm_printer.go:135.10,137.5 1 1 +github.com/pterm/pterm/interactive_confirm_printer.go:148.18,150.3 1 8 +github.com/pterm/pterm/interactive_confirm_printer.go:155.71,160.2 3 16 +github.com/pterm/pterm/interactive_confirm_printer.go:163.55,165.20 2 8 +github.com/pterm/pterm/interactive_confirm_printer.go:171.2,171.47 1 8 +github.com/pterm/pterm/interactive_confirm_printer.go:165.20,167.3 1 1 +github.com/pterm/pterm/interactive_confirm_printer.go:167.8,169.3 1 7 +github.com/pterm/pterm/interactive_continue_printer.go:44.94,47.2 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:50.98,51.29 1 1 +github.com/pterm/pterm/interactive_continue_printer.go:54.2,55.11 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:51.29,52.30 1 0 +github.com/pterm/pterm/interactive_continue_printer.go:59.96,60.30 1 2 +github.com/pterm/pterm/interactive_continue_printer.go:66.2,66.11 1 2 +github.com/pterm/pterm/interactive_continue_printer.go:60.30,61.17 1 3 +github.com/pterm/pterm/interactive_continue_printer.go:61.17,63.9 2 2 +github.com/pterm/pterm/interactive_continue_printer.go:70.93,73.2 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:76.95,79.2 2 3 +github.com/pterm/pterm/interactive_continue_printer.go:82.95,83.36 1 1 +github.com/pterm/pterm/interactive_continue_printer.go:88.2,89.11 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:83.36,87.3 3 0 +github.com/pterm/pterm/interactive_continue_printer.go:94.97,97.2 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:100.96,103.2 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:106.95,109.2 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:117.74,120.37 2 16 +github.com/pterm/pterm/interactive_continue_printer.go:124.2,126.71 2 16 +github.com/pterm/pterm/interactive_continue_printer.go:157.2,158.20 2 16 +github.com/pterm/pterm/interactive_continue_printer.go:120.37,122.3 1 16 +github.com/pterm/pterm/interactive_continue_printer.go:126.71,127.17 1 2880 +github.com/pterm/pterm/interactive_continue_printer.go:130.3,133.14 3 2880 +github.com/pterm/pterm/interactive_continue_printer.go:155.3,155.20 1 2864 +github.com/pterm/pterm/interactive_continue_printer.go:127.17,129.4 1 0 +github.com/pterm/pterm/interactive_continue_printer.go:134.21,135.32 1 13 +github.com/pterm/pterm/interactive_continue_printer.go:146.19,150.20 4 3 +github.com/pterm/pterm/interactive_continue_printer.go:151.19,153.20 2 0 +github.com/pterm/pterm/interactive_continue_printer.go:135.32,136.28 1 26 +github.com/pterm/pterm/interactive_continue_printer.go:139.5,139.78 1 26 +github.com/pterm/pterm/interactive_continue_printer.go:136.28,138.6 1 24 +github.com/pterm/pterm/interactive_continue_printer.go:139.78,144.6 4 13 +github.com/pterm/pterm/interactive_continue_printer.go:162.64,164.35 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:167.2,169.16 2 1 +github.com/pterm/pterm/interactive_continue_printer.go:164.35,166.3 1 4 +github.com/pterm/pterm/interactive_continue_printer.go:173.58,174.24 1 11 +github.com/pterm/pterm/interactive_continue_printer.go:178.2,178.45 1 11 +github.com/pterm/pterm/interactive_continue_printer.go:174.24,176.3 1 1 +github.com/pterm/pterm/interactive_continue_printer.go:178.45,182.3 3 10 +github.com/pterm/pterm/interactive_continue_printer.go:186.57,187.58 1 16 +github.com/pterm/pterm/interactive_continue_printer.go:191.2,191.68 1 16 +github.com/pterm/pterm/interactive_continue_printer.go:187.58,189.3 1 11 +github.com/pterm/pterm/terminal.go:24.29,25.29 1 32709 +github.com/pterm/pterm/terminal.go:28.2,29.14 2 7 +github.com/pterm/pterm/terminal.go:25.29,27.3 1 32702 +github.com/pterm/pterm/terminal.go:33.30,34.30 1 17 +github.com/pterm/pterm/terminal.go:37.2,38.15 2 4 +github.com/pterm/pterm/terminal.go:34.30,36.3 1 13 +github.com/pterm/pterm/terminal.go:42.55,43.57 1 13 +github.com/pterm/pterm/terminal.go:46.2,47.12 2 12 +github.com/pterm/pterm/terminal.go:50.2,50.12 1 12 +github.com/pterm/pterm/terminal.go:53.2,53.16 1 12 +github.com/pterm/pterm/terminal.go:56.2,56.18 1 12 +github.com/pterm/pterm/terminal.go:43.57,45.3 1 1 +github.com/pterm/pterm/terminal.go:47.12,49.3 1 12 +github.com/pterm/pterm/terminal.go:50.12,52.3 1 12 +github.com/pterm/pterm/terminal.go:53.16,55.3 1 12 +github.com/pterm/pterm/terminal.go:60.51,64.2 3 10 diff --git a/go.mod b/go.mod index 45328db1b..9cc1066e1 100644 --- a/go.mod +++ b/go.mod @@ -21,5 +21,6 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + go.uber.org/atomic v1.10.0 // indirect golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect ) diff --git a/go.sum b/go.sum index 8cf1d565a..2bd38cd3b 100644 --- a/go.sum +++ b/go.sum @@ -59,6 +59,8 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/header_printer.go b/header_printer.go index e120cb61e..5f75cd19f 100644 --- a/header_printer.go +++ b/header_printer.go @@ -64,7 +64,7 @@ func (p HeaderPrinter) WithWriter(writer io.Writer) *HeaderPrinter { // Sprint formats using the default formats for its operands and returns the resulting string. // Spaces are added between operands when neither is a string. func (p HeaderPrinter) Sprint(a ...interface{}) string { - if RawOutput { + if RawOutput.Load() { return Sprint(a...) } diff --git a/interactive_confirm_printer_test.go b/interactive_confirm_printer_test.go index c6320c782..4f675627c 100644 --- a/interactive_confirm_printer_test.go +++ b/interactive_confirm_printer_test.go @@ -1,3 +1,5 @@ +//go:build !race + package pterm_test import ( diff --git a/interactive_continue_printer_test.go b/interactive_continue_printer_test.go index 8686b284c..6be916552 100644 --- a/interactive_continue_printer_test.go +++ b/interactive_continue_printer_test.go @@ -1,3 +1,5 @@ +//go:build !race + package pterm_test import ( diff --git a/interactive_multiselect_printer_test.go b/interactive_multiselect_printer_test.go index e34d0c8e1..3f8538a22 100644 --- a/interactive_multiselect_printer_test.go +++ b/interactive_multiselect_printer_test.go @@ -1,3 +1,5 @@ +//go:build !race + package pterm_test import ( diff --git a/interactive_select_printer_test.go b/interactive_select_printer_test.go index 5a4c5a900..d9085675d 100644 --- a/interactive_select_printer_test.go +++ b/interactive_select_printer_test.go @@ -1,3 +1,5 @@ +//go:build !race + package pterm_test import ( diff --git a/interactive_textinput_printer_test.go b/interactive_textinput_printer_test.go index 1b0d9523d..85b1c60ba 100644 --- a/interactive_textinput_printer_test.go +++ b/interactive_textinput_printer_test.go @@ -1,3 +1,5 @@ +//go:build !race + package pterm_test import ( diff --git a/panel_printer.go b/panel_printer.go index 709f7c807..43e09a521 100644 --- a/panel_printer.go +++ b/panel_printer.go @@ -89,7 +89,7 @@ func (p PanelPrinter) getRawOutput() string { func (p PanelPrinter) Srender() (string, error) { var ret string - if RawOutput { + if RawOutput.Load() { return p.getRawOutput(), nil } diff --git a/paragraph_printer.go b/paragraph_printer.go index 81b71aba1..dcba6bfae 100644 --- a/paragraph_printer.go +++ b/paragraph_printer.go @@ -34,7 +34,7 @@ func (p ParagraphPrinter) WithWriter(writer io.Writer) *ParagraphPrinter { // Sprint formats using the default formats for its operands and returns the resulting string. // Spaces are added between operands when neither is a string. func (p ParagraphPrinter) Sprint(a ...interface{}) string { - if RawOutput { + if RawOutput.Load() { return Sprint(a...) } diff --git a/prefix_printer.go b/prefix_printer.go index 6823c94c4..4d9737fac 100644 --- a/prefix_printer.go +++ b/prefix_printer.go @@ -156,11 +156,11 @@ func (p PrefixPrinter) WithWriter(writer io.Writer) *PrefixPrinter { // Spaces are added between operands when neither is a string. func (p *PrefixPrinter) Sprint(a ...interface{}) string { m := Sprint(a...) - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return "" } - if RawOutput { + if RawOutput.Load() { if p.Prefix.Text != "" { return Sprintf("%s: %s", strings.TrimSpace(p.Prefix.Text), Sprint(a...)) } else { @@ -215,7 +215,7 @@ func (p *PrefixPrinter) Sprint(a ...interface{}) string { // Sprintln formats using the default formats for its operands and returns the resulting string. // Spaces are always added between operands and a newline is appended. func (p PrefixPrinter) Sprintln(a ...interface{}) string { - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return "" } str := fmt.Sprintln(a...) @@ -224,7 +224,7 @@ func (p PrefixPrinter) Sprintln(a ...interface{}) string { // Sprintf formats according to a format specifier and returns the resulting string. func (p PrefixPrinter) Sprintf(format string, a ...interface{}) string { - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return "" } return p.Sprint(Sprintf(format, a...)) @@ -233,7 +233,7 @@ func (p PrefixPrinter) Sprintf(format string, a ...interface{}) string { // Sprintfln formats according to a format specifier and returns the resulting string. // Spaces are always added between operands and a newline is appended. func (p PrefixPrinter) Sprintfln(format string, a ...interface{}) string { - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return "" } return p.Sprintf(format, a...) + "\n" @@ -244,7 +244,7 @@ func (p PrefixPrinter) Sprintfln(format string, a ...interface{}) string { // It returns the number of bytes written and any write error encountered. func (p *PrefixPrinter) Print(a ...interface{}) *TextPrinter { tp := TextPrinter(p) - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return &tp } p.LineNumberOffset-- @@ -259,7 +259,7 @@ func (p *PrefixPrinter) Print(a ...interface{}) *TextPrinter { // It returns the number of bytes written and any write error encountered. func (p *PrefixPrinter) Println(a ...interface{}) *TextPrinter { tp := TextPrinter(p) - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return &tp } Fprint(p.Writer, p.Sprintln(a...)) @@ -271,7 +271,7 @@ func (p *PrefixPrinter) Println(a ...interface{}) *TextPrinter { // It returns the number of bytes written and any write error encountered. func (p *PrefixPrinter) Printf(format string, a ...interface{}) *TextPrinter { tp := TextPrinter(p) - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return &tp } Fprint(p.Writer, p.Sprintf(format, a...)) @@ -284,7 +284,7 @@ func (p *PrefixPrinter) Printf(format string, a ...interface{}) *TextPrinter { // It returns the number of bytes written and any write error encountered. func (p *PrefixPrinter) Printfln(format string, a ...interface{}) *TextPrinter { tp := TextPrinter(p) - if p.Debugger && !PrintDebugMessages { + if p.Debugger && !PrintDebugMessages.Load() { return &tp } p.LineNumberOffset++ diff --git a/print.go b/print.go index a58e5fa6a..3acd1a2cd 100644 --- a/print.go +++ b/print.go @@ -4,29 +4,42 @@ import ( "fmt" "io" "strings" + "sync" "github.com/gookit/color" ) +// Need to use this because "github.com/gookit/color" is NOT a thread-safe library for Print & Sprintf functions. +// Used to protect against some unsafe actions in Fprint as well +var pLock sync.RWMutex + // SetDefaultOutput sets the default output of pterm. func SetDefaultOutput(w io.Writer) { + pLock.Lock() + defer pLock.Unlock() color.SetOutput(w) } // Sprint formats using the default formats for its operands and returns the resulting string. // Spaces are added between operands when neither is a string. func Sprint(a ...interface{}) string { + pLock.Lock() + defer pLock.Unlock() return color.Sprint(a...) } // Sprintf formats according to a format specifier and returns the resulting string. func Sprintf(format string, a ...interface{}) string { + pLock.Lock() + defer pLock.Unlock() return color.Sprintf(format, a...) } // Sprintfln formats according to a format specifier and returns the resulting string. // Spaces are always added between operands and a newline is appended. func Sprintfln(format string, a ...interface{}) string { + pLock.Lock() + defer pLock.Unlock() return color.Sprintf(format, a...) + "\n" } @@ -98,44 +111,43 @@ func PrintOnErrorf(format string, a ...interface{}) { // Spaces are added between operands when neither is a string. // It returns the number of bytes written and any write error encountered. func Fprint(writer io.Writer, a ...interface{}) { - if !Output { + pLock.Lock() + defer pLock.Unlock() + if !Output.Load() { return } var ret string var printed bool - for _, bar := range ActiveProgressBarPrinters { + activeProgressBarPrinters.lock.Lock() + for _, bar := range activeProgressBarPrinters.printers { if bar.IsActive && bar.Writer == writer { ret += sClearLine() - ret += Sprinto(a...) + ret += "\r" + color.Sprint(a...) printed = true } } + activeProgressBarPrinters.lock.Unlock() - for _, spinner := range activeSpinnerPrinters { - if spinner.IsActive && spinner.Writer == writer { + activeSpinnerPrinters.lock.Lock() + for _, spinner := range activeSpinnerPrinters.printers { + if spinner.atomicIsActive.Load() && spinner.Writer == writer { ret += sClearLine() - ret += Sprinto(a...) + ret += "\r" + color.Sprint(a...) printed = true } } + activeSpinnerPrinters.lock.Unlock() if !printed { - ret = color.Sprint(Sprint(a...)) + ret = color.Sprint(a...) } if writer != nil { - color.Fprint(writer, Sprint(ret)) + color.Fprint(writer, color.Sprint(ret)) } else { - color.Print(Sprint(ret)) - } - - // Refresh all progressbars in case they were overwritten previously. Reference: #302 - for _, bar := range ActiveProgressBarPrinters { - if bar.IsActive { - bar.UpdateTitle(bar.Title) - } + color.Print(color.Sprint(ret)) } } @@ -154,22 +166,26 @@ func Fprintln(writer io.Writer, a ...interface{}) { // time.Sleep(time.Second) // pterm.Printo("Hello, Earth!") func Printo(a ...interface{}) { - if !Output { + pLock.Lock() + defer pLock.Unlock() + if !Output.Load() { return } - color.Print("\r" + Sprint(a...)) + color.Print("\r" + color.Sprint(a...)) } // Fprinto prints Printo to a custom writer. func Fprinto(w io.Writer, a ...interface{}) { - if !Output { + pLock.Lock() + defer pLock.Unlock() + if !Output.Load() { return } if w != nil { - color.Fprint(w, "\r", Sprint(a...)) + color.Fprint(w, "\r", color.Sprint(a...)) } else { - color.Print("\r", Sprint(a...)) + color.Print("\r", color.Sprint(a...)) } } @@ -183,5 +199,5 @@ func fClearLine(writer io.Writer) { } func sClearLine() string { - return Sprinto(strings.Repeat(" ", GetTerminalWidth())) + return "\r" + color.Sprint(strings.Repeat(" ", GetTerminalWidth())) } diff --git a/print_test.go b/print_test.go index 95bb00fb3..aaa8915d3 100644 --- a/print_test.go +++ b/print_test.go @@ -50,7 +50,7 @@ func TestSprinto(t *testing.T) { func TestPrint(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Print(randomString) @@ -60,20 +60,20 @@ func TestPrint(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Print(randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = true + pterm.EnableOutput() }) } func TestPrintln(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Println(randomString) @@ -83,20 +83,20 @@ func TestPrintln(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Println(randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = true + pterm.EnableOutput() }) } func TestPrintf(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printf(randomString) @@ -110,7 +110,7 @@ func TestPrintf(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printf(randomString) @@ -121,13 +121,13 @@ func TestPrintf(t *testing.T) { pterm.Printf("Hello, %s!", "World") }) testza.AssertEqual(t, "", out) - pterm.Output = true + pterm.EnableOutput() }) } func TestPrintfln(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printfln(randomString) @@ -141,7 +141,7 @@ func TestPrintfln(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printfln(randomString) @@ -152,13 +152,13 @@ func TestPrintfln(t *testing.T) { pterm.Printfln("Hello, %s!", "World") }) testza.AssertEqual(t, "", out) - pterm.Output = true + pterm.EnableOutput() }) } func TestFprint(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { // set default to null to confirm that its correctly using the provided writer @@ -170,7 +170,7 @@ func TestFprint(t *testing.T) { }) t.Run("confirm defaults to default output when no writer provided", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprint(nil, randomString) @@ -180,20 +180,20 @@ func TestFprint(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprint(w, randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = true + pterm.EnableOutput() }) } func TestFprintln(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { // set default to null to confirm that its correctly using the provided writer @@ -205,7 +205,7 @@ func TestFprintln(t *testing.T) { }) t.Run("confirm defaults to default output when no writer provided", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprintln(nil, randomString) @@ -215,20 +215,20 @@ func TestFprintln(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprintln(w, randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = true + pterm.EnableOutput() }) } func TestPrinto(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printo(randomString) @@ -238,20 +238,20 @@ func TestPrinto(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Printo(randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = false + pterm.DisableOutput() }) } func TestFprinto(t *testing.T) { t.Run("enabled output", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { // set default to null to confirm that its correctly using the provided writer @@ -263,7 +263,7 @@ func TestFprinto(t *testing.T) { }) t.Run("confirm defaults to default output when no writer provided", func(t *testing.T) { - pterm.Output = true + pterm.EnableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprinto(nil, randomString) @@ -273,14 +273,14 @@ func TestFprinto(t *testing.T) { }) t.Run("disabled output", func(t *testing.T) { - pterm.Output = false + pterm.DisableOutput() for _, randomString := range internal.RandomStrings { out := captureStdout(func(w io.Writer) { pterm.Fprinto(w, randomString) }) testza.AssertEqual(t, "", out) } - pterm.Output = true + pterm.EnableOutput() }) } diff --git a/progressbar_printer.go b/progressbar_printer.go index 2fb3f9105..10c801827 100644 --- a/progressbar_printer.go +++ b/progressbar_printer.go @@ -4,6 +4,7 @@ import ( "io" "strconv" "strings" + "sync" "time" "github.com/gookit/color" @@ -11,9 +12,12 @@ import ( "github.com/pterm/pterm/internal" ) -// ActiveProgressBarPrinters contains all running ProgressbarPrinters. +// activeProgressBarPrinters contains all running ProgressbarPrinters. // Generally, there should only be one active ProgressbarPrinter at a time. -var ActiveProgressBarPrinters []*ProgressbarPrinter +type atomicActiveProgressBarPrinters struct { + printers []*ProgressbarPrinter + lock *sync.Mutex +} var ( // DefaultProgressbar is the default ProgressbarPrinter. @@ -31,6 +35,11 @@ var ( BarFiller: " ", MaxWidth: 80, } + + activeProgressBarPrinters = atomicActiveProgressBarPrinters{ + printers: []*ProgressbarPrinter{}, + lock: &sync.Mutex{}, + } ) // ProgressbarPrinter shows a progress animation in the terminal. @@ -235,7 +244,7 @@ func (p *ProgressbarPrinter) updateProgress() *ProgressbarPrinter { bar = "" } - if !RawOutput { + if !RawOutput.Load() { Fprinto(p.Writer, before+bar+after) } return p @@ -258,14 +267,18 @@ func (p *ProgressbarPrinter) Add(count int) *ProgressbarPrinter { // Start the ProgressbarPrinter. func (p ProgressbarPrinter) Start(title ...interface{}) (*ProgressbarPrinter, error) { - if RawOutput && p.ShowTitle { + if RawOutput.Load() && p.ShowTitle { Fprintln(p.Writer, p.Title) } p.IsActive = true if len(title) != 0 { p.Title = Sprint(title...) } - ActiveProgressBarPrinters = append(ActiveProgressBarPrinters, &p) + + activeProgressBarPrinters.lock.Lock() + activeProgressBarPrinters.printers = append(activeProgressBarPrinters.printers, &p) + activeProgressBarPrinters.lock.Unlock() + p.startedAt = time.Now() p.updateProgress() diff --git a/progressbar_printer_test.go b/progressbar_printer_test.go index 70417d6c0..783fdd9b2 100644 --- a/progressbar_printer_test.go +++ b/progressbar_printer_test.go @@ -3,6 +3,7 @@ package pterm_test import ( "io" "os" + "strings" "testing" "time" @@ -236,18 +237,40 @@ func TestProgressbarPrinter_OutputToWriters(t *testing.T) { for testTitle, testCase := range testCases { t.Run(testTitle, func(t *testing.T) { - stderr, err := testza.CaptureStderr(func(w io.Writer) error { - pb, err := pterm.DefaultProgressbar.WithTitle("Hello world").WithWriter(os.Stderr).Start() + out := captureStdout(func(w io.Writer) { + pb, err := pterm.DefaultProgressbar.WithTitle("Hello world").WithWriter(w).Start() time.Sleep(time.Second) // Required otherwise the goroutine doesn't run and the text isnt outputted testza.AssertNoError(t, err) testCase.action(pb) time.Sleep(time.Second) // Required otherwise the goroutine doesn't run and the text isnt updated - return nil }) - testza.AssertNoError(t, err) - testza.AssertContains(t, stderr, "Hello world") - testza.AssertContains(t, stderr, testCase.expectOutputToContain) + testza.AssertContains(t, out, "Hello world") + testza.AssertContains(t, out, testCase.expectOutputToContain) }) } } + +// Test dirrectly from #302 +func TestProgressbarPrinter_InstallingPseudoList(t *testing.T) { + out := captureStdout(func(w io.Writer) { + var pseudoProgramList = strings.Split("pseudo-excel pseudo-photoshop pseudo-chrome pseudo-outlook pseudo-explorer "+ + "pseudo-dops pseudo-git pseudo-vsc pseudo-intellij pseudo-asd pseudo-scoop pseudo-minecraft", " ") + p, _ := pterm.DefaultProgressbar.WithTotal(len(pseudoProgramList)).WithTitle("Installing stuff").WithWriter(w).Start() + for i := 0; i < p.Total; i++ { + if pseudoProgramList[i] == "pseudo-minecraft" { + pterm.Warning.Println("Could not install pseudo-minecraft, The company policy forbids games.") + } else { + pterm.Success.Println("Installing " + pseudoProgramList[i]) + p.Increment() + } + time.Sleep(time.Second / 4) // test timer + } + p.Stop() + }) + + testza.AssertContains(t, out, "Installing stuff") + testza.AssertContains(t, out, "Installing pseudo-scoop") + testza.AssertContains(t, out, "3s") + testza.AssertContains(t, out, "Could not install pseudo-minecraft, The company policy forbids games.") +} diff --git a/pterm.go b/pterm.go index be3d9a529..dd65fa6b9 100644 --- a/pterm.go +++ b/pterm.go @@ -6,20 +6,22 @@ // View the animated examples here: https://github.com/pterm/pterm#-examples package pterm -import "github.com/gookit/color" +import ( + "github.com/gookit/color" + "go.uber.org/atomic" +) var ( // Output completely disables output from pterm if set to false. Can be used in CLI application quiet mode. - Output = true + Output = atomic.NewBool(true) // PrintDebugMessages sets if messages printed by the DebugPrinter should be printed. - PrintDebugMessages = false + PrintDebugMessages = atomic.NewBool(false) // RawOutput is set to true if pterm.DisableStyling() was called. // The variable indicates that PTerm will not add additional styling to text. // Use pterm.DisableStyling() or pterm.EnableStyling() to change this variable. - // Changing this variable directly, will disable or enable the output of colored text. - RawOutput = false + RawOutput = atomic.NewBool(false) ) func init() { @@ -28,28 +30,28 @@ func init() { // EnableOutput enables the output of PTerm. func EnableOutput() { - Output = true + Output.Store(true) } // DisableOutput disables the output of PTerm. func DisableOutput() { - Output = false + Output.Store(false) } // EnableDebugMessages enables the output of debug printers. func EnableDebugMessages() { - PrintDebugMessages = true + PrintDebugMessages.Store(true) } // DisableDebugMessages disables the output of debug printers. func DisableDebugMessages() { - PrintDebugMessages = false + PrintDebugMessages.Store(false) } // EnableStyling enables the default PTerm styling. // This also calls EnableColor. func EnableStyling() { - RawOutput = false + RawOutput.Store(false) EnableColor() } @@ -57,7 +59,7 @@ func EnableStyling() { // You can use this to print to text files etc. // This also calls DisableColor. func DisableStyling() { - RawOutput = true + RawOutput.Store(true) DisableColor() } diff --git a/pterm_test.go b/pterm_test.go index 485609e26..8daa97a8c 100644 --- a/pterm_test.go +++ b/pterm_test.go @@ -1,43 +1,44 @@ package pterm_test import ( + "testing" + "github.com/MarvinJWendt/testza" "github.com/pterm/pterm" - "testing" ) func TestDisableDebugMessages(t *testing.T) { - pterm.PrintDebugMessages = true + pterm.PrintDebugMessages.Store(true) pterm.DisableDebugMessages() - testza.AssertFalse(t, pterm.PrintDebugMessages) + testza.AssertFalse(t, pterm.PrintDebugMessages.Load()) } func TestEnableDebugMessages(t *testing.T) { pterm.EnableDebugMessages() - testza.AssertTrue(t, pterm.PrintDebugMessages) + testza.AssertTrue(t, pterm.PrintDebugMessages.Load()) } func TestDisableOutput(t *testing.T) { pterm.DisableOutput() - testza.AssertFalse(t, pterm.Output) + testza.AssertFalse(t, pterm.Output.Load()) } func TestEnableOutput(t *testing.T) { pterm.DisableOutput() pterm.EnableOutput() - testza.AssertTrue(t, pterm.Output) + testza.AssertTrue(t, pterm.Output.Load()) } func TestDisableStyling(t *testing.T) { - pterm.RawOutput = false + pterm.RawOutput.Store(false) pterm.DisableStyling() - testza.AssertTrue(t, pterm.RawOutput) + testza.AssertTrue(t, pterm.RawOutput.Load()) } func TestEnableStyling(t *testing.T) { - pterm.RawOutput = true + pterm.RawOutput.Store(true) pterm.EnableStyling() - testza.AssertFalse(t, pterm.RawOutput) + testza.AssertFalse(t, pterm.RawOutput.Load()) } func TestInterfaceImplementation(t *testing.T) { diff --git a/spinner_printer.go b/spinner_printer.go index 86d9c6559..9aa48727b 100644 --- a/spinner_printer.go +++ b/spinner_printer.go @@ -2,28 +2,40 @@ package pterm import ( "io" + "sync" "time" "github.com/pterm/pterm/internal" + "go.uber.org/atomic" ) -var activeSpinnerPrinters []*SpinnerPrinter - -// DefaultSpinner is the default SpinnerPrinter. -var DefaultSpinner = SpinnerPrinter{ - Sequence: []string{"▀ ", " ▀", " ▄", "▄ "}, - Style: &ThemeDefault.SpinnerStyle, - Delay: time.Millisecond * 200, - ShowTimer: true, - TimerRoundingFactor: time.Second, - TimerStyle: &ThemeDefault.TimerStyle, - MessageStyle: &ThemeDefault.SpinnerTextStyle, - InfoPrinter: &Info, - SuccessPrinter: &Success, - FailPrinter: &Error, - WarningPrinter: &Warning, +type atomicActiveSpinnerPrinters struct { + printers []*SpinnerPrinter + lock *sync.Mutex } +var ( + // DefaultSpinner is the default SpinnerPrinter. + DefaultSpinner = SpinnerPrinter{ + Sequence: []string{"▀ ", " ▀", " ▄", "▄ "}, + Style: &ThemeDefault.SpinnerStyle, + Delay: time.Millisecond * 200, + ShowTimer: true, + TimerRoundingFactor: time.Second, + TimerStyle: &ThemeDefault.TimerStyle, + MessageStyle: &ThemeDefault.SpinnerTextStyle, + InfoPrinter: &Info, + SuccessPrinter: &Success, + FailPrinter: &Error, + WarningPrinter: &Warning, + } + + activeSpinnerPrinters = atomicActiveSpinnerPrinters{ + printers: []*SpinnerPrinter{}, + lock: &sync.Mutex{}, + } +) + // SpinnerPrinter is a loading animation, which can be used if the progress is unknown. // It's an animation loop, which can have a text and supports throwing errors or warnings. // A TextPrinter is used to display all outputs, after the SpinnerPrinter is done. @@ -45,102 +57,140 @@ type SpinnerPrinter struct { IsActive bool startedAt time.Time - currentSequence string + currentSequence *atomic.String + + // Thread-safe versions of existing variables used internally + atomicIsActive *atomic.Bool + atomicText *atomic.String Writer io.Writer } +// Lazy init used to initialize thread-safe variables +func (s *SpinnerPrinter) lazyInit() { + if s.atomicIsActive == nil { + s.atomicIsActive = atomic.NewBool(s.IsActive) + } + if s.atomicText == nil { + s.atomicText = atomic.NewString(s.Text) + } + if s.currentSequence == nil { + s.currentSequence = atomic.NewString("") + } +} + // WithText adds a text to the SpinnerPrinter. func (s SpinnerPrinter) WithText(text string) *SpinnerPrinter { + s.lazyInit() + s.atomicText.Store(text) + // We still set Text here so it is available to the users, it is not read anywhere s.Text = text return &s } // WithSequence adds a sequence to the SpinnerPrinter. func (s SpinnerPrinter) WithSequence(sequence ...string) *SpinnerPrinter { + s.lazyInit() s.Sequence = sequence return &s } // WithStyle adds a style to the SpinnerPrinter. func (s SpinnerPrinter) WithStyle(style *Style) *SpinnerPrinter { + s.lazyInit() s.Style = style return &s } // WithDelay adds a delay to the SpinnerPrinter. func (s SpinnerPrinter) WithDelay(delay time.Duration) *SpinnerPrinter { + s.lazyInit() s.Delay = delay return &s } // WithMessageStyle adds a style to the SpinnerPrinter message. func (s SpinnerPrinter) WithMessageStyle(style *Style) *SpinnerPrinter { + s.lazyInit() s.MessageStyle = style return &s } // WithRemoveWhenDone removes the SpinnerPrinter after it is done. func (s SpinnerPrinter) WithRemoveWhenDone(b ...bool) *SpinnerPrinter { + s.lazyInit() s.RemoveWhenDone = internal.WithBoolean(b) return &s } // WithShowTimer shows how long the spinner is running. func (s SpinnerPrinter) WithShowTimer(b ...bool) *SpinnerPrinter { + s.lazyInit() s.ShowTimer = internal.WithBoolean(b) return &s } // WithTimerRoundingFactor sets the rounding factor for the timer. func (s SpinnerPrinter) WithTimerRoundingFactor(factor time.Duration) *SpinnerPrinter { + s.lazyInit() s.TimerRoundingFactor = factor return &s } // WithTimerStyle adds a style to the SpinnerPrinter timer. func (s SpinnerPrinter) WithTimerStyle(style *Style) *SpinnerPrinter { + s.lazyInit() s.TimerStyle = style return &s } // WithWriter sets the custom Writer. -func (p SpinnerPrinter) WithWriter(writer io.Writer) *SpinnerPrinter { - p.Writer = writer - return &p +func (s SpinnerPrinter) WithWriter(writer io.Writer) *SpinnerPrinter { + s.lazyInit() + s.Writer = writer + return &s } // UpdateText updates the message of the active SpinnerPrinter. // Can be used live. func (s *SpinnerPrinter) UpdateText(text string) { + s.lazyInit() + s.atomicText.Store(text) + // We still set Text here so it is available to the users, it is not read anywhere s.Text = text - if !RawOutput { + if !RawOutput.Load() { fClearLine(s.Writer) - Fprinto(s.Writer, s.Style.Sprint(s.currentSequence)+" "+s.MessageStyle.Sprint(s.Text)) + Fprinto(s.Writer, s.Style.Sprint(s.currentSequence.Load())+" "+s.MessageStyle.Sprint(s.atomicText.Load())) } - if RawOutput { - Fprintln(s.Writer, s.Text) + if RawOutput.Load() { + Fprintln(s.Writer, s.atomicText.Load()) } } // Start the SpinnerPrinter. func (s SpinnerPrinter) Start(text ...interface{}) (*SpinnerPrinter, error) { + s.lazyInit() + s.atomicIsActive.Store(true) s.IsActive = true + // We still set IsActive here so it is available to the users, it is not read anywhere s.startedAt = time.Now() - activeSpinnerPrinters = append(activeSpinnerPrinters, &s) + + activeSpinnerPrinters.lock.Lock() + activeSpinnerPrinters.printers = append(activeSpinnerPrinters.printers, &s) + activeSpinnerPrinters.lock.Unlock() if len(text) != 0 { - s.Text = Sprint(text...) + s.atomicText.Store(Sprint(text...)) } - if RawOutput { - Fprintln(s.Writer, s.Text) + if RawOutput.Load() { + Fprintln(s.Writer, s.atomicText.Load()) } go func() { - for s.IsActive { + for s.atomicIsActive.Load() { for _, seq := range s.Sequence { - if !s.IsActive || RawOutput { + if !s.atomicIsActive.Load() || RawOutput.Load() { continue } @@ -149,8 +199,8 @@ func (s SpinnerPrinter) Start(text ...interface{}) (*SpinnerPrinter, error) { timer = " (" + time.Since(s.startedAt).Round(s.TimerRoundingFactor).String() + ")" } fClearLine(s.Writer) - Fprinto(s.Writer, s.Style.Sprint(seq)+" "+s.MessageStyle.Sprint(s.Text)+s.TimerStyle.Sprint(timer)) - s.currentSequence = seq + Fprinto(s.Writer, s.Style.Sprint(seq)+" "+s.MessageStyle.Sprint(s.atomicText.Load())+s.TimerStyle.Sprint(timer)) + s.currentSequence.Store(seq) time.Sleep(s.Delay) } } @@ -161,10 +211,11 @@ func (s SpinnerPrinter) Start(text ...interface{}) (*SpinnerPrinter, error) { // Stop terminates the SpinnerPrinter immediately. // The SpinnerPrinter will not resolve into anything. func (s *SpinnerPrinter) Stop() error { - if !s.IsActive { + s.lazyInit() + if !s.atomicIsActive.Load() { return nil } - s.IsActive = false + s.atomicIsActive.Store(false) if s.RemoveWhenDone { fClearLine(s.Writer) Fprinto(s.Writer) @@ -178,6 +229,7 @@ func (s *SpinnerPrinter) Stop() error { // This is used for the interface LivePrinter. // You most likely want to use Start instead of this in your program. func (s *SpinnerPrinter) GenericStart() (*LivePrinter, error) { + s.lazyInit() _, _ = s.Start() lp := LivePrinter(s) return &lp, nil @@ -187,6 +239,7 @@ func (s *SpinnerPrinter) GenericStart() (*LivePrinter, error) { // This is used for the interface LivePrinter. // You most likely want to use Stop instead of this in your program. func (s *SpinnerPrinter) GenericStop() (*LivePrinter, error) { + s.lazyInit() _ = s.Stop() lp := LivePrinter(s) return &lp, nil @@ -195,12 +248,13 @@ func (s *SpinnerPrinter) GenericStop() (*LivePrinter, error) { // Info displays an info message // If no message is given, the text of the SpinnerPrinter will be reused as the default message. func (s *SpinnerPrinter) Info(message ...interface{}) { + s.lazyInit() if s.InfoPrinter == nil { s.InfoPrinter = &Info } if len(message) == 0 { - message = []interface{}{s.Text} + message = []interface{}{s.atomicText.Load()} } fClearLine(s.Writer) Fprinto(s.Writer, s.InfoPrinter.Sprint(message...)) @@ -210,12 +264,13 @@ func (s *SpinnerPrinter) Info(message ...interface{}) { // Success displays the success printer. // If no message is given, the text of the SpinnerPrinter will be reused as the default message. func (s *SpinnerPrinter) Success(message ...interface{}) { + s.lazyInit() if s.SuccessPrinter == nil { s.SuccessPrinter = &Success } if len(message) == 0 { - message = []interface{}{s.Text} + message = []interface{}{s.atomicText.Load()} } fClearLine(s.Writer) Fprinto(s.Writer, s.SuccessPrinter.Sprint(message...)) @@ -225,12 +280,13 @@ func (s *SpinnerPrinter) Success(message ...interface{}) { // Fail displays the fail printer. // If no message is given, the text of the SpinnerPrinter will be reused as the default message. func (s *SpinnerPrinter) Fail(message ...interface{}) { + s.lazyInit() if s.FailPrinter == nil { s.FailPrinter = &Error } if len(message) == 0 { - message = []interface{}{s.Text} + message = []interface{}{s.atomicText.Load()} } fClearLine(s.Writer) Fprinto(s.Writer, s.FailPrinter.Sprint(message...)) @@ -240,12 +296,13 @@ func (s *SpinnerPrinter) Fail(message ...interface{}) { // Warning displays the warning printer. // If no message is given, the text of the SpinnerPrinter will be reused as the default message. func (s *SpinnerPrinter) Warning(message ...interface{}) { + s.lazyInit() if s.WarningPrinter == nil { s.WarningPrinter = &Warning } if len(message) == 0 { - message = []interface{}{s.Text} + message = []interface{}{s.atomicText.Load()} } fClearLine(s.Writer) Fprinto(s.Writer, s.WarningPrinter.Sprint(message...)) diff --git a/spinner_printer_test.go b/spinner_printer_test.go index 998035596..24d85c609 100644 --- a/spinner_printer_test.go +++ b/spinner_printer_test.go @@ -164,12 +164,12 @@ func TestSpinnerPrinter_WithTimerRoundingFactor(t *testing.T) { } func TestSpinnerPrinter_WithRawOutput(t *testing.T) { - pterm.RawOutput = true + pterm.RawOutput.Store(true) s, _ := pterm.DefaultSpinner.Start() go func() { time.Sleep(time.Millisecond * 50) s.Stop() - pterm.RawOutput = false + pterm.RawOutput.Store(false) }() } diff --git a/terminal.go b/terminal.go index 24d95e3d7..145e76abc 100644 --- a/terminal.go +++ b/terminal.go @@ -3,6 +3,7 @@ package pterm import ( "os" + "go.uber.org/atomic" "golang.org/x/term" ) @@ -15,15 +16,15 @@ var FallbackTerminalWidth = 80 var FallbackTerminalHeight = 10 // forcedTerminalWidth, when set along with forcedTerminalHeight, forces the terminal width value. -var forcedTerminalWidth int = 0 +var forcedTerminalWidth *atomic.Int64 = atomic.NewInt64(0) // forcedTerminalHeight, when set along with forcedTerminalWidth, forces the terminal height value. -var forcedTerminalHeight int = 0 +var forcedTerminalHeight *atomic.Int64 = atomic.NewInt64(0) // GetTerminalWidth returns the terminal width of the active terminal. func GetTerminalWidth() int { - if forcedTerminalWidth > 0 { - return forcedTerminalWidth + if forcedTerminalWidth.Load() > 0 { + return int(forcedTerminalWidth.Load()) } width, _, _ := GetTerminalSize() return width @@ -31,8 +32,8 @@ func GetTerminalWidth() int { // GetTerminalHeight returns the terminal height of the active terminal. func GetTerminalHeight() int { - if forcedTerminalHeight > 0 { - return forcedTerminalHeight + if forcedTerminalHeight.Load() > 0 { + return int(forcedTerminalHeight.Load()) } _, height, _ := GetTerminalSize() return height @@ -40,8 +41,8 @@ func GetTerminalHeight() int { // GetTerminalSize returns the width and the height of the active terminal. func GetTerminalSize() (width, height int, err error) { - if forcedTerminalWidth > 0 && forcedTerminalHeight > 0 { - return forcedTerminalWidth, forcedTerminalHeight, nil + if forcedTerminalWidth.Load() > 0 && forcedTerminalHeight.Load() > 0 { + return int(forcedTerminalWidth.Load()), int(forcedTerminalHeight.Load()), nil } w, h, err := term.GetSize(int(os.Stdout.Fd())) if w <= 0 { @@ -58,7 +59,7 @@ func GetTerminalSize() (width, height int, err error) { // setForcedTerminalSize turns off terminal size autodetection. Usuful for unified tests. func SetForcedTerminalSize(width int, height int) { - forcedTerminalWidth = width - forcedTerminalHeight = height + forcedTerminalWidth.Store(int64(width)) + forcedTerminalHeight.Store(int64(height)) RecalculateTerminalSize() } diff --git a/utils_test.go b/utils_test.go index 521df4522..c75201e8b 100644 --- a/utils_test.go +++ b/utils_test.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "os" + "sync" "testing" "github.com/MarvinJWendt/testza" @@ -191,7 +192,33 @@ func testDoesNotOutput(t *testing.T, logic func(w io.Writer)) { pterm.EnableStyling() } -var outBuf bytes.Buffer +type Buffer struct { + b bytes.Buffer + m sync.Mutex +} + +func (b *Buffer) Read(p []byte) (n int, err error) { + b.m.Lock() + defer b.m.Unlock() + return b.b.Read(p) +} +func (b *Buffer) Write(p []byte) (n int, err error) { + b.m.Lock() + defer b.m.Unlock() + return b.b.Write(p) +} +func (b *Buffer) String() string { + b.m.Lock() + defer b.m.Unlock() + return b.b.String() +} +func (b *Buffer) Reset() { + b.m.Lock() + defer b.m.Unlock() + b.b.Reset() +} + +var outBuf Buffer // setupStdoutCapture sets up a fake stdout capture. func setupStdoutCapture() {