diff --git a/complete.go b/complete.go index 0641c39..87f376c 100644 --- a/complete.go +++ b/complete.go @@ -53,6 +53,14 @@ var ( exit = os.Exit ) +// SetExitFunc sets the function used to exit the program (by default os.Exit) +// and returns the previous value. +func SetExitFunc(fn func(code int)) (previous func(int)) { + previous = exit + exit = fn + return previous +} + // Complete the command line arguments for the given command in the case that the program // was invoked with COMP_LINE and COMP_POINT environment variables. In that case it will also // `os.Exit()`. The program name should be provided for installation purposes. diff --git a/go.mod b/go.mod index f510a56..3cdbf29 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,16 @@ module github.com/posener/complete/v2 go 1.20 require ( - bou.ke/monkey v1.0.2 github.com/posener/autogen v0.0.3 github.com/posener/script v1.2.0 github.com/stretchr/testify v1.8.4 + golang.org/x/tools v0.35.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/mod v0.26.0 // indirect + golang.org/x/sync v0.16.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ee4b3b5..3e2bb06 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ -bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI= -bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA= 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/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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/posener/autogen v0.0.3 h1:V3e1E2GiNhK3yzd26NA7TiYCgeFuNkv1CkHlXJ7sqzA= @@ -10,6 +10,12 @@ github.com/posener/script v1.2.0 h1:DrZz0qFT8lCLkYNi1PleLDANFnKxJ2VmlNPJbAkVLsE= github.com/posener/script v1.2.0/go.mod h1:s4sVvRXtdc/1aK6otTSeW2BVXndO8MsoOVUwK74zcg4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/gocomplete/tests_test.go b/gocomplete/tests_test.go index dbe72cf..8696878 100644 --- a/gocomplete/tests_test.go +++ b/gocomplete/tests_test.go @@ -11,7 +11,6 @@ import ( "strings" "testing" - "bou.ke/monkey" "github.com/posener/complete/v2" ) @@ -53,8 +52,8 @@ func TestPredictions(t *testing.T) { func BenchmarkFake(b *testing.B) {} func Example() { - p := monkey.Patch(os.Exit, func(int) {}) - defer p.Unpatch() + p := complete.SetExitFunc(func(int) {}) + defer complete.SetExitFunc(p) os.Setenv("COMP_LINE", "go ru") os.Setenv("COMP_POINT", "5") main() @@ -76,7 +75,8 @@ func equal(s1, s2 []string) bool { } func TestErrorSupression(t *testing.T) { - defer monkey.Patch(os.Exit, func(int) {}).Unpatch() + p := complete.SetExitFunc(func(int) {}) + defer complete.SetExitFunc(p) // Completion API environment variable names. const envLine, envPoint = "COMP_LINE", "COMP_POINT"