From: David Uhden Collado Subject: [UPDATE] devel/shfmt 3.6.0 -> 3.14.0 To: ports@openbsd.org Date: Fri, 28 Aug 2026 17:44:00 +0000 Hello, Please find attached an updated version of the patch I sent previously. Since shfmt 3.14.0 has now been released, I updated the port directly from 3.6.0 to 3.14.0 instead of stopping at 3.13.1. Please disregard the previous patch. The upstream release notes and full comparison are available at: https://github.com/mvdan/sh/releases https://github.com/mvdan/sh/compare/v3.6.0...v3.14.0 In short, the changes since 3.6.0 include substantial improvements to the parser, formatter, interpreter, shell expansion, and script detection code. shfmt gained EditorConfig support for additional formatting options, including simplify and minify, null-delimited output for --list and --find, safer handling of non-regular files, and improved handling of incomplete shell input. Shell detection has also been significantly improved. shfmt can infer the shell variant from filenames such as .bash_profile and .zshrc, and 3.14.0 adds further control over shebang-based detection while scanning directories. One of the largest additions is initial Zsh parser and formatter support. This includes Zsh-specific parameter expansion, subscripting, special parameters, EditorConfig [[zsh]] sections, and automatic language detection from common Zsh filenames. The Bash/POSIX interpreter has also received a large number of improvements, including support for dotglob and extglob, additional declare, type, and read options, $RANDOM and $SRANDOM, $BASH_REMATCH, $! and wait PID, improved variable and array handling, and numerous fixes for expansion, redirection, globbing, process substitution, and error handling. The syntax and expansion packages received broader API and correctness improvements as well, including iterator APIs, better brace expansion, more accurate glob semantics, improved here-document and tilde expansion handling, and fixes for a number of Bash, POSIX, mksh, and Zsh parsing edge cases. For the port, MODGO_VERSION is now set to v3.14.0 and I regenerated modules.inc and distinfo for the current upstream Go dependency set. No local patches or package list changes are required. This revised patch supersedes the 3.13.1 update I sent previously. Thank you for your time and consideration. Best regards, David. Index: devel/shfmt/Makefile =================================================================== RCS file: /cvs/ports/devel/shfmt/Makefile,v diff -u -p -u -p -r1.9 Makefile --- devel/shfmt/Makefile 18 Jun 2023 10:14:22 -0000 1.9 +++ devel/shfmt/Makefile 28 Aug 2026 17:34:51 -0000 @@ -1,7 +1,7 @@ COMMENT = shell parser, formatter, and interpreter MODGO_MODNAME = mvdan.cc/sh/v3 -MODGO_VERSION = v3.6.0 +MODGO_VERSION = v3.14.0 DISTNAME = shfmt-${MODGO_VERSION} Index: devel/shfmt/distinfo =================================================================== RCS file: /cvs/ports/devel/shfmt/distinfo,v diff -u -p -u -p -r1.5 distinfo --- devel/shfmt/distinfo 18 Jun 2023 10:14:22 -0000 1.5 +++ devel/shfmt/distinfo 28 Aug 2026 17:34:51 -0000 @@ -1,52 +1,88 @@ -SHA256 (go_modules/github.com/creack/pty/@v/v1.1.18.mod) = BBOkGR3M1sdbDMdMtxrxVkBw8uy/zjq0ujzMnXAf2Cw= -SHA256 (go_modules/github.com/creack/pty/@v/v1.1.18.zip) = fcrad4LgTw1LR9UNTvNfNvLID5CSMQGRSUgEKb2xduU= +SHA256 (go_modules/github.com/creack/pty/@v/v1.1.24.mod) = o5ef0ywA810X6zuX0LPMb077BXv3gnE2H6dzUx5gFTE= +SHA256 (go_modules/github.com/creack/pty/@v/v1.1.24.zip) = dU4lJT52pVg7gNV9Ot06/mj8TZ8qSQloqdHtqMj9iBU= SHA256 (go_modules/github.com/creack/pty/@v/v1.1.9.mod) = 6rBwW8ShjdMVwnpOPbqPIKnhIwZfogYzlmMytczPdzE= -SHA256 (go_modules/github.com/frankban/quicktest/@v/v1.14.4.mod) = aLKthKInPSO6xKV0F3Wj+llKB9KnH4DoR6fWPFOlvZ8= -SHA256 (go_modules/github.com/frankban/quicktest/@v/v1.14.4.zip) = 3uueG53Rg2Lt50i1+TfQguZ8Q/J5wmWnOxT1yDbvXWo= -SHA256 (go_modules/github.com/google/go-cmp/@v/v0.5.9.mod) = 58dmnUod1Ym6PgJLon9D8pPbYR/gdc4g17iENw1j/r0= -SHA256 (go_modules/github.com/google/go-cmp/@v/v0.5.9.zip) = MkUIdKx1bvXUf2uBkwUQUwS5gZBFoW4/EFKJt88lLFE= -SHA256 (go_modules/github.com/google/renameio/v2/@v/v2.0.0.mod) = dqhi31Livy4fWN833CgRSk8HwOrf4uWGaUd1HY1/S0w= -SHA256 (go_modules/github.com/google/renameio/v2/@v/v2.0.0.zip) = bis93O3Wu1/2abjilL78mjXAHt4w/QChg/xjfOfJ/Y4= +SHA256 (go_modules/github.com/go-quicktest/qt/@v/v1.102.0.mod) = L5/jytzHuu7ucGhRCkrgJIa9OAeyIhE+hxHoGxSlrWU= +SHA256 (go_modules/github.com/go-quicktest/qt/@v/v1.102.0.zip) = y81WfUgggfY3nYRManUTfyv5qJ3v0GBGZZlRygOkQTQ= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.6.0.mod) = 58dmnUod1Ym6PgJLon9D8pPbYR/gdc4g17iENw1j/r0= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.7.0.mod) = Mch0odKhjmKwVQ+CPOeldcjex/j9nU+hlZuxLX98DxQ= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.7.0.zip) = ZKnOBG8sMg43g/ug0fShX4oY8LAJtnvyf3YwkZ2z9Tk= +SHA256 (go_modules/github.com/google/renameio/v2/@v/v2.0.2.mod) = Jc2c5ds2RAvoazVyXTJRmcxWBjKcAq6R0GPTYnU6osA= +SHA256 (go_modules/github.com/google/renameio/v2/@v/v2.0.2.zip) = TqH37JOMwiBoJ/Ep9A7Zomb03zAZj8/wjeB9pLcidss= SHA256 (go_modules/github.com/kr/pretty/@v/v0.3.1.mod) = hPPkCAOx69SoAuVXlLmZffCxc8SAnoVy/5BC7FWMobw= SHA256 (go_modules/github.com/kr/pretty/@v/v0.3.1.zip) = 7PWkrySCbDrXWM4GQQygji1Y5NlQU747nd4uFIUsDNw= SHA256 (go_modules/github.com/kr/text/@v/v0.2.0.mod) = 9jh5sgT2zolc6lNZS4FPWsCvCEhrM7HKecZXOE77xyY= SHA256 (go_modules/github.com/kr/text/@v/v0.2.0.zip) = No6zGPkaW2e+kFxHAyq1wxodSal4SLEBGg0KISKzC6Q= SHA256 (go_modules/github.com/pkg/diff/@v/v0.0.0-20210226163009-20ebb0f2a09e.mod) = XVuUVOLQIK8MdgNWjoaQS5m+/E1dZ8OoUF9hIVib0R8= SHA256 (go_modules/github.com/pkg/diff/@v/v0.0.0-20210226163009-20ebb0f2a09e.zip) = 81sj/dK5Ui3dRsxcAWG08HZcUUR11dTKKoasoxOIyL0= +SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.12.0.mod) = e/5bA6stTZVNm3TqzbLMv2ve9jQgGwALl/mg0gIx3H4= +SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.15.0.mod) = H/o/PB0q2dQFE69mEMIdUq4oOWKGeYVN9CEhL2op7Cc= +SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.15.0.zip) = yE2VgYFhhAfmHw+DfAoiYBbMe7DebSbS2C/UduO/H3A= SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.mod) = kFmpfaKZDIGaCXZ6XpvYeEtFpXt6JeKQVbvRsKqhRP8= -SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.zip) = fXd5CLnJGhaF8tcJVQ5rdHjhTpxGmd/9fwoVDjbbx+k= -SHA256 (go_modules/golang.org/x/sync/@v/v0.1.0.mod) = Qh9hOWhtWJHz3FpWPQmVeA0yefZcrU0iXOpSaGeUFhw= -SHA256 (go_modules/golang.org/x/sync/@v/v0.1.0.zip) = 9RC+xgCeGYgtGZU+cnMTfTTfhsZZSTRdcvEjolXC7NI= -SHA256 (go_modules/golang.org/x/sys/@v/v0.3.0.mod) = 8DMzMJb+GY8xUd7tk/LeunTlC7/nc5E0BFvDt85KUCQ= -SHA256 (go_modules/golang.org/x/sys/@v/v0.3.0.zip) = y98Y476fIRypYmhKwZ1B1L4kBCiY7AzGZL+NHClV04Q= -SHA256 (go_modules/golang.org/x/term/@v/v0.3.0.mod) = HlYfdBO3S00wyi1smHTM0Tu4yU2qDmwjd7rZ6c9tvlg= -SHA256 (go_modules/golang.org/x/term/@v/v0.3.0.zip) = HNnVjqLYYpm4VphyOOY5KlDmiNBGnMs7SkaTSfJDlQc= -SHA256 (go_modules/mvdan.cc/editorconfig/@v/v0.2.0.mod) = 9Zm959knns+MkZaERhjWNHJZ0j2u5YLTb+XzjOUfLIo= -SHA256 (go_modules/mvdan.cc/editorconfig/@v/v0.2.0.zip) = qeQ61HQvJ/ey+yeCDTalFxxUD6Q/nsXZK5tm0KA7ctE= -SHA256 (shfmt-v3.6.0.zip) = 9O0sWTiojonGHIm/fzUzgo8k/2LTdOdTohl++rmIJ5Y= -SIZE (go_modules/github.com/creack/pty/@v/v1.1.18.mod) = 38 -SIZE (go_modules/github.com/creack/pty/@v/v1.1.18.zip) = 26597 +SHA256 (go_modules/github.com/yuin/goldmark/@v/v1.4.13.mod) = 7n/kRmIDoB06wZrcE0zeyZvG3nGZLCjz3Zp0SAv/BgM= +SHA256 (go_modules/github.com/yuin/goldmark/@v/v1.4.13.zip) = u0GmArF0NF/aOSyK2D/MkyF8KFx2NplndjC+kP63peM= +SHA256 (go_modules/golang.org/x/mod/@v/v0.21.0.mod) = 6+gZF0QRVCmfcyuKoJ8plSl1LfKYVcpNcCaUbRu+zYI= +SHA256 (go_modules/golang.org/x/mod/@v/v0.29.0.mod) = JVIB9tCpC4BHCwKdVrR5GONXy9PkO0bHgKxWEqWmgAQ= +SHA256 (go_modules/golang.org/x/mod/@v/v0.29.0.zip) = fHNmcscqpXG2XBEGu7KmTlh91CZaGPAFnJkPlcUReWI= +SHA256 (go_modules/golang.org/x/net/@v/v0.46.0.mod) = emR2w8b4a8zBMPw6Vb6bXiULng3PVNjLndixT5LXVBE= +SHA256 (go_modules/golang.org/x/net/@v/v0.46.0.zip) = qxdIsqUJqxf9ynoRAfrw4MGHnewO2Y4qcoMESTVtcNI= +SHA256 (go_modules/golang.org/x/sync/@v/v0.17.0.mod) = 0zPFS3SviguOx0jTfFly0nudCIueRci/XDq1INIRMJA= +SHA256 (go_modules/golang.org/x/sync/@v/v0.17.0.zip) = xdz9MuIj7cegA6UaFmqBdZpL7MuakeuFOFtNZ6HIIMY= +SHA256 (go_modules/golang.org/x/sys/@v/v0.26.0.mod) = 0iezJfYh9OvijTm6dz6pm4cPOTt8CcNFksNlsW3VYN4= +SHA256 (go_modules/golang.org/x/sys/@v/v0.37.0.mod) = 9BGBTYOpboZ4Gx3uQcEluVBNpUItujfMHWOwFq45z+I= +SHA256 (go_modules/golang.org/x/sys/@v/v0.47.0.mod) = V/Q5PqGNVEahI2OzXCOmFthD+hZpxxIacKK8OpZ31mU= +SHA256 (go_modules/golang.org/x/sys/@v/v0.47.0.zip) = zawBPdztAmKSbsKf/NpkXaOWcOYcflt2HlcraxgJuxs= +SHA256 (go_modules/golang.org/x/telemetry/@v/v0.0.0-20251008203120-078029d740a8.mod) = CRcBZmyGkD4z/5OVCq72lOYEvvD15Egv9oag8V7RSPA= +SHA256 (go_modules/golang.org/x/telemetry/@v/v0.0.0-20251008203120-078029d740a8.zip) = dljysAuB37X94CdwwuCW+gelxuO0XTn2zwrMzqaOL7M= +SHA256 (go_modules/golang.org/x/term/@v/v0.45.0.mod) = YsP50aWuEiZKtI4siswIyfIBvalhneFxVE61cUt0rsU= +SHA256 (go_modules/golang.org/x/term/@v/v0.45.0.zip) = s6OvaJcotDASrhshSCVxo1wDPFRemOAhYGvU/PH3kQg= +SHA256 (go_modules/golang.org/x/tools/@v/v0.26.0.mod) = L/wCTGvxTRRqy+FH+5gQTfO8Zgz7Fqdd4chP5QyKNNA= +SHA256 (go_modules/golang.org/x/tools/@v/v0.37.0.mod) = 29BOzSltTasnBnZq383S1SwnNFYT1jFoL4+kNxr1Su8= +SHA256 (go_modules/golang.org/x/tools/@v/v0.38.0.mod) = qViO2A/jO7EIuMicDihsTlyC+UqYJWSWrqCy5T3+yRQ= +SHA256 (go_modules/golang.org/x/tools/@v/v0.38.0.zip) = f1hwDaXDnY0ZWHIn0kIQEdTMoEB2wcE+u74Ui4UWd8Y= +SHA256 (go_modules/mvdan.cc/editorconfig/@v/v0.3.0.mod) = 6hl29DmEYwNahO3PuerQWQ4aqP3tMefo/3oNyjEOIuY= +SHA256 (go_modules/mvdan.cc/editorconfig/@v/v0.3.0.zip) = qlDEPnibAl8EvqlQ8QQxSUbS+qUDVEK/X3QV65eGD+E= +SHA256 (shfmt-v3.14.0.zip) = 6N8dOO6gxTwdIuqEO3a7kZYqVjuqp6r6xfrhOdUVl7w= +SIZE (go_modules/github.com/creack/pty/@v/v1.1.24.mod) = 38 +SIZE (go_modules/github.com/creack/pty/@v/v1.1.24.zip) = 40880 SIZE (go_modules/github.com/creack/pty/@v/v1.1.9.mod) = 39 -SIZE (go_modules/github.com/frankban/quicktest/@v/v1.14.4.mod) = 121 -SIZE (go_modules/github.com/frankban/quicktest/@v/v1.14.4.zip) = 55637 -SIZE (go_modules/github.com/google/go-cmp/@v/v0.5.9.mod) = 41 -SIZE (go_modules/github.com/google/go-cmp/@v/v0.5.9.zip) = 130220 -SIZE (go_modules/github.com/google/renameio/v2/@v/v2.0.0.mod) = 46 -SIZE (go_modules/github.com/google/renameio/v2/@v/v2.0.0.zip) = 22986 +SIZE (go_modules/github.com/go-quicktest/qt/@v/v1.102.0.mod) = 504 +SIZE (go_modules/github.com/go-quicktest/qt/@v/v1.102.0.zip) = 35901 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.6.0.mod) = 41 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.7.0.mod) = 41 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.7.0.zip) = 130179 +SIZE (go_modules/github.com/google/renameio/v2/@v/v2.0.2.mod) = 46 +SIZE (go_modules/github.com/google/renameio/v2/@v/v2.0.2.zip) = 24151 SIZE (go_modules/github.com/kr/pretty/@v/v0.3.1.mod) = 117 SIZE (go_modules/github.com/kr/pretty/@v/v0.3.1.zip) = 13388 SIZE (go_modules/github.com/kr/text/@v/v0.2.0.mod) = 68 SIZE (go_modules/github.com/kr/text/@v/v0.2.0.zip) = 12607 SIZE (go_modules/github.com/pkg/diff/@v/v0.0.0-20210226163009-20ebb0f2a09e.mod) = 36 SIZE (go_modules/github.com/pkg/diff/@v/v0.0.0-20210226163009-20ebb0f2a09e.zip) = 219375 +SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.12.0.mod) = 167 +SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.15.0.mod) = 141 +SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.15.0.zip) = 196760 SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.mod) = 112 -SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.zip) = 210263 -SIZE (go_modules/golang.org/x/sync/@v/v0.1.0.mod) = 25 -SIZE (go_modules/golang.org/x/sync/@v/v0.1.0.zip) = 27781 -SIZE (go_modules/golang.org/x/sys/@v/v0.3.0.mod) = 33 -SIZE (go_modules/golang.org/x/sys/@v/v0.3.0.zip) = 1862151 -SIZE (go_modules/golang.org/x/term/@v/v0.3.0.mod) = 67 -SIZE (go_modules/golang.org/x/term/@v/v0.3.0.zip) = 19924 -SIZE (go_modules/mvdan.cc/editorconfig/@v/v0.2.0.mod) = 38 -SIZE (go_modules/mvdan.cc/editorconfig/@v/v0.2.0.zip) = 12867 -SIZE (shfmt-v3.6.0.zip) = 244864 +SIZE (go_modules/github.com/yuin/goldmark/@v/v1.4.13.mod) = 41 +SIZE (go_modules/github.com/yuin/goldmark/@v/v1.4.13.zip) = 229017 +SIZE (go_modules/golang.org/x/mod/@v/v0.21.0.mod) = 86 +SIZE (go_modules/golang.org/x/mod/@v/v0.29.0.mod) = 86 +SIZE (go_modules/golang.org/x/mod/@v/v0.29.0.zip) = 172650 +SIZE (go_modules/golang.org/x/net/@v/v0.46.0.mod) = 157 +SIZE (go_modules/golang.org/x/net/@v/v0.46.0.zip) = 1923996 +SIZE (go_modules/golang.org/x/sync/@v/v0.17.0.mod) = 36 +SIZE (go_modules/golang.org/x/sync/@v/v0.17.0.zip) = 25707 +SIZE (go_modules/golang.org/x/sys/@v/v0.26.0.mod) = 33 +SIZE (go_modules/golang.org/x/sys/@v/v0.37.0.mod) = 35 +SIZE (go_modules/golang.org/x/sys/@v/v0.47.0.mod) = 35 +SIZE (go_modules/golang.org/x/sys/@v/v0.47.0.zip) = 2022425 +SIZE (go_modules/golang.org/x/telemetry/@v/v0.0.0-20251008203120-078029d740a8.mod) = 133 +SIZE (go_modules/golang.org/x/telemetry/@v/v0.0.0-20251008203120-078029d740a8.zip) = 1017205 +SIZE (go_modules/golang.org/x/term/@v/v0.45.0.mod) = 70 +SIZE (go_modules/golang.org/x/term/@v/v0.45.0.zip) = 21694 +SIZE (go_modules/golang.org/x/tools/@v/v0.26.0.mod) = 341 +SIZE (go_modules/golang.org/x/tools/@v/v0.37.0.mod) = 301 +SIZE (go_modules/golang.org/x/tools/@v/v0.38.0.mod) = 301 +SIZE (go_modules/golang.org/x/tools/@v/v0.38.0.zip) = 2822153 +SIZE (go_modules/mvdan.cc/editorconfig/@v/v0.3.0.mod) = 38 +SIZE (go_modules/mvdan.cc/editorconfig/@v/v0.3.0.zip) = 13853 +SIZE (shfmt-v3.14.0.zip) = 345112 Index: devel/shfmt/modules.inc =================================================================== RCS file: /cvs/ports/devel/shfmt/modules.inc,v diff -u -p -u -p -r1.5 modules.inc --- devel/shfmt/modules.inc 18 Jun 2023 10:14:22 -0000 1.5 +++ devel/shfmt/modules.inc 28 Aug 2026 17:34:51 -0000 @@ -1,17 +1,30 @@ MODGO_MODULES = \ - github.com/creack/pty v1.1.18 \ - github.com/frankban/quicktest v1.14.4 \ - github.com/google/go-cmp v0.5.9 \ - github.com/google/renameio/v2 v2.0.0 \ + github.com/creack/pty v1.1.24 \ + github.com/go-quicktest/qt v1.102.0 \ + github.com/google/go-cmp v0.7.0 \ + github.com/google/renameio/v2 v2.0.2 \ github.com/kr/pretty v0.3.1 \ github.com/kr/text v0.2.0 \ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e \ - github.com/rogpeppe/go-internal v1.9.0 \ - golang.org/x/sync v0.1.0 \ - golang.org/x/sys v0.3.0 \ - golang.org/x/term v0.3.0 \ - mvdan.cc/editorconfig v0.2.0 + github.com/rogpeppe/go-internal v1.15.0 \ + github.com/yuin/goldmark v1.4.13 \ + golang.org/x/mod v0.29.0 \ + golang.org/x/net v0.46.0 \ + golang.org/x/sync v0.17.0 \ + golang.org/x/sys v0.47.0 \ + golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 \ + golang.org/x/term v0.45.0 \ + golang.org/x/tools v0.38.0 \ + mvdan.cc/editorconfig v0.3.0 MODGO_MODFILES = \ - github.com/creack/pty v1.1.9 + github.com/creack/pty v1.1.9 \ + github.com/google/go-cmp v0.6.0 \ + github.com/rogpeppe/go-internal v1.12.0 \ + github.com/rogpeppe/go-internal v1.9.0 \ + golang.org/x/mod v0.21.0 \ + golang.org/x/sys v0.26.0 \ + golang.org/x/sys v0.37.0 \ + golang.org/x/tools v0.26.0 \ + golang.org/x/tools v0.37.0