diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index dd199fc..06c03af 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -13,28 +13,24 @@ permissions: contents: read jobs: - golangci: - name: lint + test: + name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 with: - fetch-depth: 0 + go-version-file: go.mod + - name: go mod tidy + run: | + go mod tidy + if [ -n "$(git status --porcelain)" ]; then + echo "Run 'go mod tidy' and push it" + exit 1 + fi - name: golangci-lint - uses: golangci/golangci-lint-action@v2 - - test: - runs-on: ubuntu-latest - steps: - - name: Checkout source - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup go - uses: actions/setup-go@v4 + uses: golangci/golangci-lint-action@v8 with: - go-version: '>=1.17' - - - name: Run tests - run: go test -v ./... \ No newline at end of file + version: latest + - name: Run unit tests + run: go test -v ./... diff --git a/.golangci.yml b/.golangci.yml index f279c24..d8b58d0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,11 @@ +version: "2" + +formatters: + enable: + - goimports + - gci + - gofumpt + linters: enable: - asciicheck @@ -12,32 +20,34 @@ linters: - errname - errorlint - funlen - - goimports - - gci - goconst - - gofumpt - gosec - lll - misspell - revive - unconvert - gosec - -linters-settings: - errcheck: - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. - check-blank: true - gosimple: - # Select the Go version to target. - go: "1.17" - # https://staticcheck.io/docs/options#checks - checks: ["all"] - govet: - check-shadowing: true - staticcheck: - go: "1.17" - # https://staticcheck.io/docs/options#checks - checks: ["all"] - decorder: - disable-dec-order-check: false - disable-init-func-first-check: false + exclusions: + rules: + - linters: + - revive + text: "exported (type|function|const|method) .* should have comment" + - linters: + - revive + text: "should have a package comment" + - linters: + - govet + text: "declaration of \"err\" shadows" + settings: + errcheck: + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. + check-blank: true + govet: + enable: + - shadow + staticcheck: + # https://staticcheck.io/docs/options#checks + checks: ["all", "-ST1000"] + decorder: + disable-dec-order-check: false + disable-init-func-first-check: false diff --git a/cmd/termsvg/export/export.go b/cmd/termsvg/export/export.go index b836682..da60952 100644 --- a/cmd/termsvg/export/export.go +++ b/cmd/termsvg/export/export.go @@ -3,6 +3,7 @@ package export import ( "bytes" "os" + "path/filepath" "github.com/mrmarble/termsvg/internal/svg" "github.com/mrmarble/termsvg/pkg/asciicast" @@ -37,7 +38,7 @@ func (cmd *Cmd) Run() error { } func export(input, output string, mini bool, bgColor, textColor string, noWindow bool) error { - inputFile, err := os.ReadFile(input) + inputFile, err := os.ReadFile(filepath.Clean(input)) if err != nil { return err } @@ -47,31 +48,31 @@ func export(input, output string, mini bool, bgColor, textColor string, noWindow return err } - outputFile, err := os.Create(output) - if err != nil { - return err - } - defer outputFile.Close() + out := new(bytes.Buffer) + var data []byte + svg.Export(*cast, out, bgColor, textColor, noWindow) if mini { - out := new(bytes.Buffer) - svg.Export(*cast, out, bgColor, textColor, noWindow) - m := minify.New() m.AddFunc("image/svg+xml", msvg.Minify) - b, err := m.Bytes("image/svg+xml", out.Bytes()) if err != nil { return err } - - _, err = outputFile.Write(b) - if err != nil { - return err - } + data = b } else { - svg.Export(*cast, outputFile, bgColor, textColor, noWindow) + data = out.Bytes() + } + outputFile, err := os.Create(output) + if err != nil { + return err + } + _, err = outputFile.Write(data) + if err != nil { + //nolint:gosec,errcheck + outputFile.Close() + return err } - return nil + return outputFile.Close() } diff --git a/cmd/termsvg/play/play.go b/cmd/termsvg/play/play.go index 2335080..739a6ad 100644 --- a/cmd/termsvg/play/play.go +++ b/cmd/termsvg/play/play.go @@ -3,6 +3,7 @@ package play import ( "fmt" "os" + "path/filepath" "time" "github.com/mrmarble/termsvg/pkg/asciicast" @@ -19,7 +20,7 @@ func (cmd *Cmd) Run() error { } func play(path string, idleCap, speed float64) error { - file, err := os.ReadFile(path) + file, err := os.ReadFile(filepath.Clean(path)) if err != nil { return err } diff --git a/cmd/termsvg/rec/rec.go b/cmd/termsvg/rec/rec.go index 0d44559..59a6287 100644 --- a/cmd/termsvg/rec/rec.go +++ b/cmd/termsvg/rec/rec.go @@ -66,7 +66,7 @@ func rec(file, command string, skipFirstLine bool) error { return err } - err = os.WriteFile(file, js, os.ModePerm) + err = os.WriteFile(file, js, 0o600) if err != nil { return err } diff --git a/go.mod b/go.mod index 9428407..bb002cc 100644 --- a/go.mod +++ b/go.mod @@ -1,27 +1,26 @@ module github.com/mrmarble/termsvg -go 1.17 +go 1.23.0 + +toolchain go1.24.5 require ( github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b - github.com/creack/pty v1.1.21 + github.com/alecthomas/kong v1.12.0 + github.com/creack/pty v1.1.24 + github.com/google/go-cmp v0.7.0 github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02 - github.com/sebdah/goldie/v2 v2.5.3 - github.com/tdewolff/minify/v2 v2.20.16 - golang.org/x/term v0.17.0 + github.com/rs/zerolog v1.34.0 + github.com/sebdah/goldie/v2 v2.7.1 + github.com/tdewolff/minify/v2 v2.23.8 + golang.org/x/term v0.33.0 ) require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/sergi/go-diff v1.3.1 // indirect - github.com/tdewolff/parse/v2 v2.7.11 // indirect -) - -require ( - github.com/alecthomas/kong v0.8.1 - github.com/google/go-cmp v0.6.0 - github.com/rs/zerolog v1.32.0 - golang.org/x/sys v0.17.0 // indirect + github.com/sergi/go-diff v1.0.0 // indirect + github.com/tdewolff/parse/v2 v2.8.1 // indirect + golang.org/x/sys v0.34.0 // indirect ) diff --git a/go.sum b/go.sum index 42a6de3..b3f0b26 100644 --- a/go.sum +++ b/go.sum @@ -3,34 +3,25 @@ github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0= -github.com/alecthomas/assert/v2 v2.1.0/go.mod h1:b/+1DI2Q6NckYi+3mXyH3wFb8qG37K/DuK80n7WefXA= -github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY= -github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= -github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE= -github.com/alecthomas/repr v0.1.0/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/kong v1.12.0 h1:oKd/0fHSdajj5PfGDd3ScvEvpVJf9mT2mb5r9xYadYM= +github.com/alecthomas/kong v1.12.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= -github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02 h1:AgcIVYPa6XJnU3phs104wLj8l5GEththEw6+F79YsIY= github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -40,27 +31,22 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y= -github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/sebdah/goldie/v2 v2.7.1 h1:PkBHymaYdtvEkZV7TmyqKxdmn5/Vcj+8TpATWZjnG5E= +github.com/sebdah/goldie/v2 v2.7.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/tdewolff/argp v0.0.0-20240126212256-acdb2fb50090/go.mod h1:fF+gnKbmf3iMG+ErLiF+orMU/InyZIEnKVVigUjfriw= -github.com/tdewolff/minify/v2 v2.20.16 h1:/C8dtRkxLTIyUlKlBz46gDiktCrE8a6+c1gTrnPFz+U= -github.com/tdewolff/minify/v2 v2.20.16/go.mod h1:/FvxV9KaTrFu35J9I2FhRvWSBxcHj8sDSdwBFh5voxM= -github.com/tdewolff/parse/v2 v2.7.11 h1:v+W45LnzmjndVlfqPCT5gGjAAZKd1GJGOPJveTIkBY8= -github.com/tdewolff/parse/v2 v2.7.11/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= -github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= -github.com/tdewolff/test v1.0.11-0.20231101010635-f1265d231d52/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= -github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 h1:IkjBCtQOOjIn03u/dMQK9g+Iw9ewps4mCl1nB8Sscbo= -github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= +github.com/tdewolff/minify/v2 v2.23.8 h1:tvjHzRer46kwOfpdCBCWsDblCw3QtnLJRd61pTVkyZ8= +github.com/tdewolff/minify/v2 v2.23.8/go.mod h1:VW3ISUd3gDOZuQ/jwZr4sCzsuX+Qvsx87FDMjk6Rvno= +github.com/tdewolff/parse/v2 v2.8.1 h1:J5GSHru6o3jF1uLlEKVXkDxxcVx6yzOlIVIotK4w2po= +github.com/tdewolff/parse/v2 v2.8.1/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= +github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= +github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -76,14 +62,12 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.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= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= +golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -92,9 +76,4 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= diff --git a/internal/svg/svg.go b/internal/svg/svg.go index b31e4ba..873d8c3 100644 --- a/internal/svg/svg.go +++ b/internal/svg/svg.go @@ -65,7 +65,6 @@ func createCanvas(svg *svg.SVG, cast asciicast.Cast, noWindow bool) { } else { canvas.Rect(0, 0, canvas.paddedWidth(), canvas.paddedHeight(), "fill:"+backgroundColorOverride) } - //nolint:gomnd canvas.Group(fmt.Sprintf(`transform="translate(%d,%d)"`, padding, int(padding*1.5))) } canvas.addStyles() @@ -152,7 +151,7 @@ func (c *Canvas) addStyles() { colors = append(colors, css.Block{Selector: fmt.Sprintf(".%s", class), Rules: css.Rules{"fill": color}}) } - styles := generateKeyframes(c.Cast, int32(c.paddedWidth())) + styles := generateKeyframes(c.Cast, c.paddedWidth()) // If custom colors have been provided, use them instead if foregroundColorOverride != "" { styles += fmt.Sprintf(".a{fill:%s}", foregroundColorOverride) @@ -234,10 +233,10 @@ func (c *Canvas) applyBG(bg vt10x.Color) string { return "" } -func generateKeyframes(cast asciicast.Cast, width int32) string { +func generateKeyframes(cast asciicast.Cast, width int) string { css := "@keyframes k {" for i, frame := range cast.Events { - css += generateKeyframe(float32(frame.Time*100/cast.Header.Duration), width*int32(i)) + css += generateKeyframe(float32(frame.Time*100/cast.Header.Duration), width*i) } css += "}" @@ -245,6 +244,6 @@ func generateKeyframes(cast asciicast.Cast, width int32) string { return css } -func generateKeyframe(percent float32, translate int32) string { +func generateKeyframe(percent float32, translate int) string { return fmt.Sprintf("%.3f%%{transform:translateX(-%dpx)}", percent, translate) } diff --git a/internal/testutils/testutils.go b/internal/testutils/testutils.go index 4912039..6e247c2 100644 --- a/internal/testutils/testutils.go +++ b/internal/testutils/testutils.go @@ -17,10 +17,13 @@ func GoldenData(t Helper, identifier string) []byte { goldenPath := "testdata/" + identifier + ".golden" + //nolint:gosec f, err := os.Open(goldenPath) if err != nil { t.Fatalf("Error opening file %s: %s", goldenPath, err) } + + //nolint:errcheck defer f.Close() data, err := io.ReadAll(f) diff --git a/internal/uniqueid/unique_test.go b/internal/uniqueid/unique_test.go index 3144756..1fad816 100644 --- a/internal/uniqueid/unique_test.go +++ b/internal/uniqueid/unique_test.go @@ -47,6 +47,6 @@ func diff(t *testing.T, x interface{}, y interface{}) { diff := cmp.Diff(x, y) if diff != "" { - t.Fatalf(diff) + t.Fatal(diff) } } diff --git a/pkg/asciicast/event_test.go b/pkg/asciicast/event_test.go index d04697d..ac9ff49 100644 --- a/pkg/asciicast/event_test.go +++ b/pkg/asciicast/event_test.go @@ -40,7 +40,7 @@ func TestJSONMarshal(t *testing.T) { diff := cmp.Diff(string(output), tc.output) if diff != "" { - t.Fatalf(diff) + t.Fatal(diff) } }) } @@ -76,7 +76,7 @@ func TestJSONUnmarshal(t *testing.T) { } diff := cmp.Diff(output, tc.output) if diff != "" { - t.Fatalf(diff) + t.Fatal(diff) } }) } diff --git a/pkg/color/color.go b/pkg/color/color.go index 5096a61..9bd5d41 100644 --- a/pkg/color/color.go +++ b/pkg/color/color.go @@ -14,14 +14,15 @@ func GetColor(c vt10x.Color) string { case c >= 1<<24: return colors[int(vt10x.LightGrey)] case c >= 1<<8: - rgb := intToRGB(int(c)) + rgb := intToRGB(uint32(c)) return fmt.Sprintf("#%02x%02x%02x", rgb.R, rgb.B, rgb.G) default: return colors[int(c)] } } -func intToRGB(c int) color.RGBA { +func intToRGB(c uint32) color.RGBA { + //nolint:gosec return color.RGBA{ R: uint8(c >> 16), G: uint8(c >> 8),