From 02cdf82254fd033860702ee1187314a544ce7f12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:19:24 +0000 Subject: [PATCH 1/5] Bump actions/setup-go from 4 to 5 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index e49ac91..8211f1f 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Set up Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: '>=1.20.0' From 8b6a8411a73eb75e14065d8f77c60136b11c047c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Feb 2024 01:11:15 +0000 Subject: [PATCH 2/5] Bump golang.org/x/sys from 0.14.0 to 0.17.0 Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.14.0 to 0.17.0. - [Commits](https://github.com/golang/sys/compare/v0.14.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9959705..9068429 100644 --- a/go.mod +++ b/go.mod @@ -7,4 +7,4 @@ require ( github.com/mattn/go-isatty v0.0.20 ) -require golang.org/x/sys v0.14.0 +require golang.org/x/sys v0.17.0 diff --git a/go.sum b/go.sum index f5863d3..15e713e 100644 --- a/go.sum +++ b/go.sum @@ -5,5 +5,5 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= From 51a7bbf7dca7c369826997b8760aa8dcb026227a Mon Sep 17 00:00:00 2001 From: Fatih Arslan Date: Thu, 22 Feb 2024 10:43:12 +0300 Subject: [PATCH 3/5] ci: update Go and Staticcheck versions Signed-off-by: Fatih Arslan --- .github/workflows/go.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 8211f1f..a133d55 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -2,7 +2,6 @@ name: build on: push: branches: - - master - main pull_request: @@ -15,7 +14,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '>=1.20.0' + go-version: '>=1.22.0' - name: Check out code into the Go module directory uses: actions/checkout@v4 @@ -42,7 +41,7 @@ jobs: - name: Staticcheck uses: dominikh/staticcheck-action@v1.3.0 with: - version: "2023.1.2" + version: "2023.1.7" install-go: false - name: Build From 2ac809fb73860bc102e1369dc94860443c7d6514 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 01:41:57 +0000 Subject: [PATCH 4/5] Bump golang.org/x/sys from 0.17.0 to 0.18.0 Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.17.0 to 0.18.0. - [Commits](https://github.com/golang/sys/compare/v0.17.0...v0.18.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9068429..debb28d 100644 --- a/go.mod +++ b/go.mod @@ -7,4 +7,4 @@ require ( github.com/mattn/go-isatty v0.0.20 ) -require golang.org/x/sys v0.17.0 +require golang.org/x/sys v0.18.0 diff --git a/go.sum b/go.sum index 15e713e..917abaf 100644 --- a/go.sum +++ b/go.sum @@ -5,5 +5,5 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= From 00b1811a3d97bdd8f097cc128ab91600400e4c81 Mon Sep 17 00:00:00 2001 From: Klaus Post Date: Mon, 8 Apr 2024 13:10:58 +0200 Subject: [PATCH 5/5] Fix multi-parameter println spacing `fmt.Println` will add spaces between elements when there is multiple parameters sent. When wrapping the colors parameters were combined using `fmt.Sprint(a...)` - which does not space out parameters. Use `fmt.Sprintln` to combine parameters. Fixes #218 --- color.go | 13 +++++++++---- color_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/color.go b/color.go index c423428..81094e8 100644 --- a/color.go +++ b/color.go @@ -269,7 +269,7 @@ func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { // On Windows, users should wrap w with colorable.NewColorable() if w is of // type *os.File. func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, c.wrap(fmt.Sprint(a...))) + return fmt.Fprintln(w, c.wrap(sprintln(a...))) } // Println formats using the default formats for its operands and writes to @@ -278,7 +278,7 @@ func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { // encountered. This is the standard fmt.Print() method wrapped with the given // color. func (c *Color) Println(a ...interface{}) (n int, err error) { - return fmt.Fprintln(Output, c.wrap(fmt.Sprint(a...))) + return fmt.Fprintln(Output, c.wrap(sprintln(a...))) } // Sprint is just like Print, but returns a string instead of printing it. @@ -288,7 +288,7 @@ func (c *Color) Sprint(a ...interface{}) string { // Sprintln is just like Println, but returns a string instead of printing it. func (c *Color) Sprintln(a ...interface{}) string { - return fmt.Sprintln(c.Sprint(a...)) + return c.wrap(sprintln(a...)) + "\n" } // Sprintf is just like Printf, but returns a string instead of printing it. @@ -370,7 +370,7 @@ func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { // string. Windows users should use this in conjunction with color.Output. func (c *Color) SprintlnFunc() func(a ...interface{}) string { return func(a ...interface{}) string { - return fmt.Sprintln(c.Sprint(a...)) + return c.wrap(sprintln(a...)) + "\n" } } @@ -648,3 +648,8 @@ func HiCyanString(format string, a ...interface{}) string { return colorString(f func HiWhiteString(format string, a ...interface{}) string { return colorString(format, FgHiWhite, a...) } + +// sprintln is a helper function to format a string with fmt.Sprintln and trim the trailing newline. +func sprintln(a ...interface{}) string { + return strings.TrimSuffix(fmt.Sprintln(a...), "\n") +} diff --git a/color_test.go b/color_test.go index a8cc887..eb76d53 100644 --- a/color_test.go +++ b/color_test.go @@ -504,3 +504,34 @@ func TestIssue206_2(t *testing.T) { t.Errorf("Expecting %v, got '%v'\n", expectedResult, result) } } + +func TestIssue218(t *testing.T) { + // Adds a newline to the end of the last string to make sure it isn't trimmed. + params := []interface{}{"word1", "word2", "word3", "word4\n"} + + c := New(FgCyan) + c.Println(params...) + + var result = c.Sprintln(params...) + fmt.Println(params...) + fmt.Print(result) + + const expectedResult = "\x1b[36mword1 word2 word3 word4\n\x1b[0m\n" + + if !bytes.Equal([]byte(result), []byte(expectedResult)) { + t.Errorf("Sprintln: Expecting %v (%v), got '%v (%v)'\n", expectedResult, []byte(expectedResult), result, []byte(result)) + } + + fn := c.SprintlnFunc() + result = fn(params...) + if !bytes.Equal([]byte(result), []byte(expectedResult)) { + t.Errorf("SprintlnFunc: Expecting %v (%v), got '%v (%v)'\n", expectedResult, []byte(expectedResult), result, []byte(result)) + } + + var buf bytes.Buffer + c.Fprintln(&buf, params...) + result = buf.String() + if !bytes.Equal([]byte(result), []byte(expectedResult)) { + t.Errorf("Fprintln: Expecting %v (%v), got '%v (%v)'\n", expectedResult, []byte(expectedResult), result, []byte(result)) + } +}