diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 98c5439..88458b2 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -1,13 +1,13 @@ name: checks env: - HOMEBREW_NO_ANALYTICS: '1' - STAVEFILE_VERBOSE: '1' - STAVEFILE_DEBUG: '1' + HOMEBREW_NO_ANALYTICS: "1" + STAVEFILE_VERBOSE: "1" + STAVEFILE_DEBUG: "1" on: push: - branches: [ main ] + branches: [main] pull_request: workflow_dispatch: @@ -17,7 +17,7 @@ concurrency: jobs: checks: - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d6e158f..ee58fd1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,9 +1,9 @@ name: release env: - HOMEBREW_NO_ANALYTICS: '1' - STAVEFILE_VERBOSE: '1' - STAVEFILE_DEBUG: '1' + HOMEBREW_NO_ANALYTICS: "1" + STAVEFILE_VERBOSE: "1" + STAVEFILE_DEBUG: "1" defaults: run: @@ -23,7 +23,7 @@ permissions: jobs: release: timeout-minutes: 30 - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.golangci.yml b/.golangci.yml index 83e2265..764dcb7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -37,7 +37,7 @@ linters: - gocyclo - godot - goheader - - gomodguard + - gomodguard_v2 - goprintffuncname - gosec - govet @@ -46,7 +46,7 @@ linters: - ineffassign - interfacebloat - intrange -# - ireturn # Go internals for parsing Go code often return interfaces. + # - ireturn # Go internals for parsing Go code often return interfaces. - lll - loggercheck - maintidx @@ -86,7 +86,7 @@ linters: - varnamelen - wastedassign - whitespace -# - wrapcheck # Stave outputs error messages directly to the user, so wrapping is actually not what we want in this project. + # - wrapcheck # Stave outputs error messages directly to the user, so wrapping is actually not what we want in this project. - zerologlint settings: cyclop: @@ -105,6 +105,8 @@ linters: ignore-comments: true gocognit: min-complexity: 50 + goconst: + ignore-tests: true gocritic: settings: captLocal: @@ -113,21 +115,20 @@ linters: skipRecvDeref: false gocyclo: min-complexity: 50 - gomodguard: + gomodguard_v2: blocked: - modules: - - github.com/golang/protobuf: - recommendations: - - google.golang.org/protobuf - reason: see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules - - github.com/satori/go.uuid: - recommendations: - - github.com/google/uuid - reason: satori's package is not maintained - - github.com/gofrs/uuid: - recommendations: - - github.com/google/uuid - reason: gofrs' package is not go module + - module: github.com/golang/protobuf + recommendations: + - google.golang.org/protobuf + reason: see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules + - module: github.com/satori/go.uuid + recommendations: + - github.com/google/uuid + reason: satori's package is not maintained + - module: github.com/gofrs/uuid + recommendations: + - github.com/google/uuid + reason: gofrs' package is not go module gosec: excludes: - G703 # This rule is about enabling arbitrary path traversal via injected user input; which, yeah, this is stave and it can do that. @@ -207,7 +208,7 @@ linters: disabled: false - name: context-as-argument arguments: - - allowTypesBefore: '*testing.T,*github.com/user/repo/testing.Harness' + - allowTypesBefore: "*testing.T,*github.com/user/repo/testing.Harness" disabled: false - name: context-keys-type disabled: false @@ -417,7 +418,7 @@ linters: - gocritic source: //noinspection - linters: - - revive + - revive text: "var-naming: avoid package names that conflict with Go standard library" - linters: - bodyclose diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ca1e7e..86a20c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.14.8] - 2026-05-19 + +### Changed + +- Bump Go version to `1.25.10` (and update dependencies). + ## [0.14.7] - 2026-04-23 ### Changed @@ -547,7 +553,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added parallelism-by-default to use of Go tools from inside Stave. - Parallelized tests where possible, including locking mechanism to prevent parallel tests in same `testdata/(xyz/)` subdir. -[unreleased]: https://github.com/yaklabco/stave/compare/v0.14.7...HEAD +[unreleased]: https://github.com/yaklabco/stave/compare/v0.14.8...HEAD +[0.14.8]: https://github.com/yaklabco/stave/compare/v0.14.7...v0.14.8 [0.14.7]: https://github.com/yaklabco/stave/compare/v0.14.6...v0.14.7 [0.14.6]: https://github.com/yaklabco/stave/compare/v0.14.5...v0.14.6 [0.14.5]: https://github.com/yaklabco/stave/compare/v0.14.4...v0.14.5 diff --git a/config/hooks.go b/config/hooks.go index bda0898..7fa45e4 100644 --- a/config/hooks.go +++ b/config/hooks.go @@ -23,36 +23,64 @@ type HookTarget struct { // HooksConfig maps Git hook names to their configured targets. type HooksConfig map[string][]HookTarget +const ( + HookNameApplypatchMsg = "applypatch-msg" + HookNamePreApplypatch = "pre-applypatch" + HookNamePostApplypatch = "post-applypatch" + HookNamePreCommit = "pre-commit" + HookNamePrepareCommitMsg = "prepare-commit-msg" + HookNameCommitMsg = "commit-msg" + HookNamePostCommit = "post-commit" + HookNamePreRebase = "pre-rebase" + HookNamePostCheckout = "post-checkout" + HookNamePostMerge = "post-merge" + HookNamePrePush = "pre-push" + HookNamePreReceive = "pre-receive" + HookNameUpdate = "update" + HookNamePostReceive = "post-receive" + HookNamePostUpdate = "post-update" + HookNamePushToCheckout = "push-to-checkout" + HookNamePreAutoGc = "pre-auto-gc" + HookNamePostRewrite = "post-rewrite" + HookNameSendemailValidate = "sendemail-validate" + HookNameFsmonitorWatchman = "fsmonitor-watchman" + HookNameP4PreSubmit = "p4-pre-submit" + HookNameP4Changelist = "p4-changelist" + HookNameP4PrepareChangelist = "p4-prepare-changelist" + HookNameP4PostChangelist = "p4-post-changelist" + HookNamePostIndexChange = "post-index-change" +) + // knownGitHooks is the set of standard Git hook names. // Used to warn on unrecognized hook names. // //nolint:gochecknoglobals // package-level lookup table for hook validation var knownGitHooks = lo.Keyify([]string{ - "applypatch-msg", - "pre-applypatch", - "post-applypatch", - "pre-commit", - "prepare-commit-msg", - "commit-msg", - "post-commit", - "pre-rebase", - "post-checkout", - "post-merge", - "pre-push", - "pre-receive", - "update", - "post-receive", - "post-update", - "push-to-checkout", - "pre-auto-gc", - "post-rewrite", - "sendemail-validate", - "fsmonitor-watchman", - "p4-pre-submit", - "p4-changelist", - "p4-prepare-changelist", - "p4-post-changelist", - "post-index-change", + HookNameApplypatchMsg, + HookNamePreApplypatch, + HookNamePostApplypatch, + HookNamePreCommit, + HookNamePrepareCommitMsg, + HookNameCommitMsg, + HookNamePostCommit, + HookNamePreRebase, + HookNamePostCheckout, + HookNamePostMerge, + HookNamePrePush, + HookNamePreReceive, + HookNameUpdate, + HookNamePostReceive, + HookNamePostUpdate, + HookNamePushToCheckout, + HookNamePreAutoGc, + HookNamePostRewrite, + HookNameSendemailValidate, + HookNameFsmonitorWatchman, + HookNameP4PreSubmit, + HookNameP4Changelist, + HookNameP4PrepareChangelist, + HookNameP4PostChangelist, + HookNamePostIndexChange, }) // IsKnownGitHook returns true if the hook name is a recognized Git hook. diff --git a/go.mod b/go.mod index e0b85d6..3bdd1f6 100644 --- a/go.mod +++ b/go.mod @@ -1,16 +1,16 @@ module github.com/yaklabco/stave -go 1.25.9 +go 1.25.10 require ( - charm.land/lipgloss/v2 v2.0.2 - github.com/caarlos0/svu/v3 v3.4.0 + charm.land/lipgloss/v2 v2.0.3 + github.com/caarlos0/svu/v3 v3.4.1 github.com/charmbracelet/fang v1.0.0 github.com/charmbracelet/log v1.0.0 github.com/charmbracelet/x/term v0.2.2 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc - github.com/fsnotify/fsnotify v1.9.0 - github.com/go-git/go-git/v5 v5.17.2 + github.com/fsnotify/fsnotify v1.10.1 + github.com/go-git/go-git/v5 v5.19.1 github.com/gobwas/glob v0.2.3 github.com/google/uuid v1.6.0 github.com/muesli/reflow v0.3.0 @@ -19,20 +19,20 @@ require ( github.com/spf13/viper v1.21.0 github.com/stretchr/testify v1.11.1 github.com/yaklabco/direnv/v2 v2.37.2-0.20260408140756-a0bfab26dddf - golang.org/x/tools v0.43.0 + golang.org/x/tools v0.45.0 ) require ( github.com/BurntSushi/toml v1.6.0 // indirect - github.com/Masterminds/semver/v3 v3.4.0 // indirect + github.com/Masterminds/semver/v3 v3.5.0 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/bitfield/gotestdox v0.2.2 // indirect github.com/charmbracelet/colorprofile v0.4.3 // indirect github.com/charmbracelet/lipgloss v1.1.0 // indirect - github.com/charmbracelet/ultraviolet v0.0.0-20260330092749-0f94982c930b // indirect - github.com/charmbracelet/x/ansi v0.11.6 // indirect + github.com/charmbracelet/ultraviolet v0.0.0-20260511121909-c840852527f3 // indirect + github.com/charmbracelet/x/ansi v0.11.7 // indirect github.com/charmbracelet/x/cellbuf v0.0.15 // indirect - github.com/charmbracelet/x/exp/charmtone v0.0.0-20260406091427-a791e22d5143 // indirect + github.com/charmbracelet/x/exp/charmtone v0.0.0-20260519012233-798e623c8447 // indirect github.com/charmbracelet/x/termios v0.1.1 // indirect github.com/charmbracelet/x/windows v0.2.2 // indirect github.com/clipperhouse/displaywidth v0.11.0 // indirect @@ -40,7 +40,7 @@ require ( github.com/dnephin/pflag v1.0.7 // indirect github.com/fatih/color v1.19.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.8.0 // indirect + github.com/go-git/go-billy/v5 v5.9.0 // indirect github.com/go-logfmt/logfmt v0.6.1 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -48,7 +48,7 @@ require ( github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/lucasb-eyer/go-colorful v1.4.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-runewidth v0.0.23 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/mango v0.2.0 // indirect @@ -56,7 +56,7 @@ require ( github.com/muesli/mango-pflag v0.2.0 // indirect github.com/muesli/roff v0.1.0 // indirect github.com/muesli/termenv v0.16.0 // indirect - github.com/pelletier/go-toml/v2 v2.3.0 // indirect + github.com/pelletier/go-toml/v2 v2.3.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect @@ -66,13 +66,13 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect + golang.org/x/mod v0.36.0 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/term v0.41.0 // indirect - golang.org/x/text v0.35.0 // indirect + golang.org/x/sys v0.44.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/gotestsum v1.13.0 // indirect diff --git a/go.sum b/go.sum index 01e8855..8cd7389 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,17 @@ -charm.land/lipgloss/v2 v2.0.2 h1:xFolbF8JdpNkM2cEPTfXEcW1p6NRzOWTSamRfYEw8cs= -charm.land/lipgloss/v2 v2.0.2/go.mod h1:KjPle2Qd3YmvP1KL5OMHiHysGcNwq6u83MUjYkFvEkM= +charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU= +charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= +github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o= github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w= github.com/bitfield/gotestdox v0.2.2 h1:x6RcPAbBbErKLnapz1QeAlf3ospg8efBsedU93CDsnE= github.com/bitfield/gotestdox v0.2.2/go.mod h1:D+gwtS0urjBrzguAkTM2wodsTQYFHdpx8eqRJ3N+9pY= -github.com/caarlos0/svu/v3 v3.4.0 h1:58fo2yKs+YaoDKEpo9RG3sQYiB+YmYGUa8yxz+x4vq0= -github.com/caarlos0/svu/v3 v3.4.0/go.mod h1:mI//T18y9bma8puRKBF5k/rFCm0gLPszQBBUJSCNj3Q= +github.com/caarlos0/svu/v3 v3.4.1 h1:YWhuxMkvvWBhHv27uQ/E8mBMj+R0LcwwTxriAdHnHGg= +github.com/caarlos0/svu/v3 v3.4.1/go.mod h1:ArIe333I36pNeEGAPSQRmUwRQtQ8TR03xp23apFPfRs= github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= github.com/charmbracelet/fang v1.0.0 h1:jESBY40agJOlLYnnv9jE0mLqDGTxEk0hkOnx7YGyRlQ= @@ -20,14 +20,14 @@ github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoF github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= github.com/charmbracelet/log v1.0.0 h1:HVVVMmfOorfj3BA9i8X8UL69Hoz9lI0PYwXfJvOdRc4= github.com/charmbracelet/log v1.0.0/go.mod h1:uYgY3SmLpwJWxmlrPwXvzVYujxis1vAKRV/0VQB7yWA= -github.com/charmbracelet/ultraviolet v0.0.0-20260330092749-0f94982c930b h1:ASDO9RT6SNKTQN87jO2bRfxHFJq8cgeYdFzivY2gCeM= -github.com/charmbracelet/ultraviolet v0.0.0-20260330092749-0f94982c930b/go.mod h1:Vo8TffMf0q7Uho/n8e6XpBZvOWtd3g39yX+9P5rRutA= -github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8= -github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ= +github.com/charmbracelet/ultraviolet v0.0.0-20260511121909-c840852527f3 h1:pxGjlWZFcRQMWAdtjRelpL3Gbu8iYIyuO3Eqbd037Ow= +github.com/charmbracelet/ultraviolet v0.0.0-20260511121909-c840852527f3/go.mod h1:SnKWaPaTnkTNXJgdgdquu66de12V8pW/b/qlTGaF9xg= +github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= +github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q= -github.com/charmbracelet/x/exp/charmtone v0.0.0-20260406091427-a791e22d5143 h1:zmBor0ftFNqVFp9U59ZoEDRUCIYSGOGSIfGGkNZRufs= -github.com/charmbracelet/x/exp/charmtone v0.0.0-20260406091427-a791e22d5143/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20260519012233-798e623c8447 h1:ZJxL6oPAQXzr21550ad/ZNkHKC3Ita70bl4xVZUPqqE= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20260519012233-798e623c8447/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY= github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA= github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= @@ -49,14 +49,14 @@ github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0= -github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY= -github.com/go-git/go-git/v5 v5.17.2 h1:B+nkdlxdYrvyFK4GPXVU8w1U+YkbsgciIR7f2sZJ104= -github.com/go-git/go-git/v5 v5.17.2/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo= +github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmmBPA= +github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw= +github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00= +github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ= github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE= github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= @@ -81,8 +81,8 @@ github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= -github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= @@ -100,8 +100,8 @@ github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= -github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= -github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= +github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= @@ -138,22 +138,22 @@ github.com/yaklabco/direnv/v2 v2.37.2-0.20260408140756-a0bfab26dddf h1:vBvd306Ig github.com/yaklabco/direnv/v2 v2.37.2-0.20260408140756-a0bfab26dddf/go.mod h1:Q6SgBrVaKeL+JevNgbtZ9MnqqnV5YFCRf61RkxDLfU4= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= +golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/internal/parse/globals.go b/internal/parse/globals.go index ea34c56..413d11b 100644 --- a/internal/parse/globals.go +++ b/internal/parse/globals.go @@ -1,10 +1,18 @@ //nolint:gochecknoglobals // These are all intended as constants (and are private). package parse +const ( + stringType = "string" + intType = "int" + float64Type = "float64" + boolType = "bool" + timeType = "time.Duration" +) + var argTypes = map[string]string{ - "string": "string", - "int": "int", - "float64": "float64", - "&{time Duration}": "time.Duration", - "bool": "bool", + stringType: stringType, + intType: intType, + float64Type: float64Type, + boolType: boolType, + "&{time Duration}": timeType, } diff --git a/internal/parse/parse.go b/internal/parse/parse.go index a066fbe..603b611 100644 --- a/internal/parse/parse.go +++ b/internal/parse/parse.go @@ -129,10 +129,10 @@ func (f Function) ExecCode() string { var parseargs string for iArg, theArg := range f.Args { switch theArg.Type { - case "string": + case stringType: parseargs += fmt.Sprintf(` theArg%d := _targetArgs[%d]`, iArg, iArg) - case "int": + case intType: parseargs += fmt.Sprintf(` theArg%d, err := strconv.Atoi(_targetArgs[%d]) if err != nil { @@ -140,7 +140,7 @@ func (f Function) ExecCode() string { os.Exit(2) } `, iArg, iArg, iArg) - case "float64": + case float64Type: parseargs += fmt.Sprintf(` theArg%d, err := strconv.ParseFloat(_targetArgs[%d], 64) if err != nil { @@ -148,7 +148,7 @@ func (f Function) ExecCode() string { os.Exit(2) } `, iArg, iArg, iArg) - case "bool": + case boolType: parseargs += fmt.Sprintf(` theArg%d, err := strconv.ParseBool(_targetArgs[%d]) if err != nil { @@ -156,7 +156,7 @@ func (f Function) ExecCode() string { os.Exit(2) } `, iArg, iArg, iArg) - case "time.Duration": + case timeType: parseargs += fmt.Sprintf(` theArg%d, err := time.ParseDuration(_targetArgs[%d]) if err != nil { @@ -328,13 +328,15 @@ func Package(path string, files []string, multiline bool) (*PkgInfo, error) { hasDupes, names := checkDupeTargets(pkgInfo) if hasDupes { msg := "Build targets must be case insensitive, thus the following targets conflict:\n" - var msgSb277 strings.Builder + var builder strings.Builder for _, v := range names { if len(v) > 1 { - msgSb277.WriteString(" " + strings.Join(v, ", ") + "\n") + builder.WriteString(" ") + builder.WriteString(strings.Join(v, ", ")) + builder.WriteString("\n") } } - msg += msgSb277.String() + msg += builder.String() return nil, errors.New(msg) }