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