Hi, Below is a diff that updates devel/shellcheck to 0.10.0. Now that we can use a release again instead of a untagged version from their git repository, we can revert the manual stuff at the beginning of the Makefile that overrides cabal.port.mk.
Tested on amd64. Comments or OKs? Caspar Index: Makefile =================================================================== RCS file: /cvs/ports/devel/shellcheck/Makefile,v retrieving revision 1.17 diff -u -p -r1.17 Makefile --- Makefile 12 Nov 2023 15:38:05 -0000 1.17 +++ Makefile 21 Mar 2024 19:39:04 -0000 @@ -1,19 +1,7 @@ COMMENT = shell script analysis tool -# https://github.com/koalaman/shellcheck/issues/2860 -V = 0.9.0pl20231108 -GH_ACCOUNT = koalaman -GH_COMMIT = a71a13c2fca05b822cb16840792dc013ca76493f -GH_PROJECT = shellcheck - -# Overrides cabal.port.mk which would otherwise preempt bsd.port.mk -DISTNAME = ${GH_PROJECT}-${V} -DISTFILES = ${GH_DISTFILE} -PKGNAME = ${MODCABAL_EXECUTABLES}-${V} -SITES = ${SITES_GITHUB} - MODCABAL_STEM = ShellCheck -MODCABAL_VERSION = ${V} +MODCABAL_VERSION = 0.10.0 MODCABAL_EXECUTABLES = shellcheck PKGNAME = ${DISTNAME:L} CATEGORIES = devel @@ -26,25 +14,23 @@ PERMIT_PACKAGE = Yes WANTLIB = c ffi gmp iconv m pthread util -# cabal-bundler --openbsd ShellCheck-0.9.0 --executable shellcheck +# cabal-bundler --openbsd ShellCheck-0.10.0 --executable shellcheck MODULES = devel/cabal MODCABAL_MANIFEST = \ - Diff 0.4.1 0 \ + Diff 0.5 1 \ OneTuple 0.4.1.1 1 \ QuickCheck 2.14.3 0 \ StateVar 1.2.2 0 \ aeson 2.2.1.0 1 \ assoc 1.1 1 \ base-orphans 0.9.1 0 \ - bifunctors 5.6.1 2 \ + bifunctors 5.6.2 0 \ comonad 5.0.8 2 \ contravariant 1.5.5 0 \ - data-array-byte 0.1.0.1 2 \ data-fix 0.3.2 5 \ distributive 0.6.2.1 1 \ dlist 1.0 1 \ fgl 5.8.2.0 0 \ - foldable1-classes-compat 0.1 4 \ generically 0.1.1 2 \ hashable 1.4.3.0 1 \ indexed-traversable 0.1.3 0 \ @@ -52,8 +38,8 @@ MODCABAL_MANIFEST = \ integer-conversion 0.1.0.1 1 \ integer-logarithms 1.0.3.1 5 \ network-uri 2.6.4.2 1 \ - primitive 0.9.0.0 0 \ - random 1.2.1.1 1 \ + primitive 0.9.0.0 1 \ + random 1.2.1.2 0 \ regex-base 0.94.0.2 4 \ regex-tdfa 1.3.2.2 2 \ scientific 0.3.7.0 7 \ @@ -61,18 +47,18 @@ MODCABAL_MANIFEST = \ semigroupoids 6.0.0.1 1 \ splitmix 0.1.0.5 0 \ strict 0.5 1 \ - tagged 0.8.8 0 \ + tagged 0.8.8 1 \ text-iso8601 0.1 1 \ text-short 0.1.5 3 \ - th-abstraction 0.6.0.0 1 \ - th-compat 0.1.4 3 \ + th-abstraction 0.6.0.0 2 \ + th-compat 0.1.5 0 \ these 1.2 1 \ time-compat 1.9.6.1 6 \ transformers-compat 0.7.2 0 \ - unordered-containers 0.2.19.1 3 \ + unordered-containers 0.2.20 1 \ uuid-types 1.0.5.1 0 \ - vector 0.13.1.0 0 \ - vector-stream 0.1.0.0 3 \ + vector 0.13.1.0 1 \ + vector-stream 0.1.0.1 1 \ witherable 0.4.2 4 \ LIB_DEPENDS = converters/libiconv \ @@ -85,7 +71,7 @@ NO_TEST = Yes # pkg_add pandoc; cd ${WRKSRC}; ./manpage; cp shellcheck.1 ${FILESDIR}/ # (and update md5) post-patch: - @[ `md5 < ${WRKSRC}/shellcheck.1.md` == f06c4a4f31f71dee0aa6b1890e469d5d ] || \ + @[ `md5 < ${WRKSRC}/shellcheck.1.md` == b28cc3fbcd8c4978a8f0253955252fa5 ] || \ (echo "*** manpage changed; regenerate ${FILESDIR}/shellcheck.1"; sleep 3) post-install: Index: distinfo =================================================================== RCS file: /cvs/ports/devel/shellcheck/distinfo,v retrieving revision 1.8 diff -u -p -r1.8 distinfo --- distinfo 12 Nov 2023 15:38:05 -0000 1.8 +++ distinfo 21 Mar 2024 19:39:04 -0000 @@ -1,20 +1,19 @@ -SHA256 (hackage/Diff-0.4.1.tar.gz) = /V5Kqschm8uxSDT7hYDr4KrpBZWNCtdPUzjqKQs3JnA= +SHA256 (hackage/Diff-0.5.tar.gz) = A8yE3t+xj6aT8LC3BU1l6Sw4jQZXz0WtXp++P+i1RVE= +SHA256 (hackage/Diff-0.5_1.cabal) = nIqXLurZ4Hm5DGWB+o71dVZiwQ3QdZUbMrgBFFcEr7s= SHA256 (hackage/OneTuple-0.4.1.1.tar.gz) = yedk1O4eV8rYNBvV0N4zujpStnk/wTCWefK/YMAwuys= SHA256 (hackage/OneTuple-0.4.1.1_1.cabal) = Yy397RcghvufDibTV4vP/6P7bRNepajeF7ejP/bm5oI= SHA256 (hackage/QuickCheck-2.14.3.tar.gz) = XA8is2sooaj6EQs4GYGNPylJSjsN7brimfBkEjynBQE= +SHA256 (hackage/ShellCheck-0.10.0.tar.gz) = TQjbQy11o0SGpV9v/50+M0DOVhJceAS3+P0UQhuTbSE= SHA256 (hackage/StateVar-1.2.2.tar.gz) = Xks52jlWVqWYJ7AoBQiq/ccDNXmLUOXW/VJZYCYlGCU= SHA256 (hackage/aeson-2.2.1.0.tar.gz) = kU7v0OgNEttcch2qLLq0J6zuOXlfElxUYMH+SM+aXX8= SHA256 (hackage/aeson-2.2.1.0_1.cabal) = ojphqtqCM+EFc+FhLAsu/loaug1ZsF2+L2MwGCLxNss= SHA256 (hackage/assoc-1.1.tar.gz) = eqLmVIs9nUmihqwgY5R5qvbEehRGET7XhNmHN8X2DfQ= SHA256 (hackage/assoc-1.1_1.cabal) = VtD9HBeq9iaOgb8Zulr+GGEo1/iBJr1UbVsxUatpJlI= SHA256 (hackage/base-orphans-0.9.1.tar.gz) = W78to4LFshLWqL4vjEnt7g66MPJyoV/TLBPm5Ake8XI= -SHA256 (hackage/bifunctors-5.6.1.tar.gz) = BjgUcbW+FlFqGyxLIaUQGj2ZEDi/rOjgytFEwARNV/w= -SHA256 (hackage/bifunctors-5.6.1_2.cabal) = gvp+2PafC/o3XeEXqzZBTAuWqX7gRu3DrG2nopWpR1U= +SHA256 (hackage/bifunctors-5.6.2.tar.gz) = EIapKFBh7tDCxdPLZaoiPe/VL8ptBRW7ad3y28PZaXo= SHA256 (hackage/comonad-5.0.8.tar.gz) = 72zfLMKSzEPuaqlsWBsjX96oq0Sgv/sk3HmuKy7zPRM= SHA256 (hackage/comonad-5.0.8_2.cabal) = Sk2/vQP7SWOYdxD8qZTotWJL0Foz5flbdYGyb4IpxeM= SHA256 (hackage/contravariant-1.5.5.tar.gz) = Bi/WZYDXqtC1upPmRP+n/u5pJ271DyDU7Z8d63ZC3/o= -SHA256 (hackage/data-array-byte-0.1.0.1.tar.gz) = G7bsoLPgLQV/5/ThTIHvOVIW9CGrMP2qGxgBfJwCVgA= -SHA256 (hackage/data-array-byte-0.1.0.1_2.cabal) = rYniiysEYXVpj79UKvLOQ+XSr1Cq6fSNElZrG7PeHTw= SHA256 (hackage/data-fix-0.3.2.tar.gz) = OhctO8BjnDJzRell+dkCPgmUJYFLKNzbe2D/ZtZiGcw= SHA256 (hackage/data-fix-0.3.2_5.cabal) = zX1v+LaKyjtR2BFocPyMzbxVeYlWLNPVyUHk8Le8WvE= SHA256 (hackage/distributive-0.6.2.1.tar.gz) = 1zUTkuB49YyqRmMKS5xkPh4und3uRYSMXINY57Exa5E= @@ -22,8 +21,6 @@ SHA256 (hackage/distributive-0.6.2.1_1.c SHA256 (hackage/dlist-1.0.tar.gz) = Fz1jcyi7Fz/MNl8w0p/0qUKSoeDlVYrrPfwR3oFRARU= SHA256 (hackage/dlist-1.0_1.cabal) = Vf9p0gzmOPx3JzQu5n8vho2mHT3PN2P3kL+aoLFF5Wg= SHA256 (hackage/fgl-5.8.2.0.tar.gz) = RM8M9yDx0/sxaJyrIZrfmxpTZ7P79L1mePTRVvPow7Y= -SHA256 (hackage/foldable1-classes-compat-0.1.tar.gz) = 0FfD81jhprcsc1GbxkumqpWfBmwI/tafcyWFVe+V/xI= -SHA256 (hackage/foldable1-classes-compat-0.1_4.cabal) = +0s87dM9XCLFc8ObqpMMeOqk/rItQ6u2gMMUn4q5+k4= SHA256 (hackage/generically-0.1.1.tar.gz) = BMWkNr7EsEH3GnM/VqG9f0NfY93o0+tcH0jVW028Q88= SHA256 (hackage/generically-0.1.1_2.cabal) = N47ASbwoU7gBHfEWZH+9NLufAO3OmEDklX+Yq8CXWXw= SHA256 (hackage/hashable-1.4.3.0.tar.gz) = Mu+xbCiReGIJt8vlw535s6muUeg28aVPZGvEYCt6sPU= @@ -38,8 +35,8 @@ SHA256 (hackage/integer-logarithms-1.0.3 SHA256 (hackage/network-uri-2.6.4.2.tar.gz) = nBiJcxJuiTJQuIHyDogR3KBsIjwjQCsG96Hy6ZV5cig= SHA256 (hackage/network-uri-2.6.4.2_1.cabal) = b/+1c3OWK1ZRotuLCvcyCYs78CmnztdqmFVhXeICZYg= SHA256 (hackage/primitive-0.9.0.0.tar.gz) = aW1L0pHJTXNhQtYYIRfcpCWNPvKL/v22SayLXs0Jmcc= -SHA256 (hackage/random-1.2.1.1.tar.gz) = PhJy9+1qTXvRcSuQFD7DJv7psiV4kiI3n+ogqckMm3Y= -SHA256 (hackage/random-1.2.1.1_1.cabal) = 58H4gRWdXMeIYZye6LjzQLov8NtXHN89Ghlo68UQh4k= +SHA256 (hackage/primitive-0.9.0.0_1.cabal) = LgjFQJ41WcfxZp71DpoNmjl+aOz1ERDV4s7fBc3X2Tw= +SHA256 (hackage/random-1.2.1.2.tar.gz) = eQ9NwtIyfEU/9qrHvxU5n9Ej1V6SeTX2j4S130LZpLQ= SHA256 (hackage/regex-base-0.94.0.2.tar.gz) = e5lAj1gPW7Z6HEE+C8c1iGYIJRMxrTYyICDyFprqLvE= SHA256 (hackage/regex-base-0.94.0.2_4.cabal) = AyKy/NE1jzNV4Mhgjvpg0nsU0cnUdkUdvLkYE2O9iyc= SHA256 (hackage/regex-tdfa-1.3.2.2.tar.gz) = kz7VxUJGu1DjNdhriE/7cLwlK193b7KR8WKoCie9dbc= @@ -50,49 +47,48 @@ SHA256 (hackage/semialign-1.3.tar.gz) = SHA256 (hackage/semialign-1.3_1.cabal) = e+nvXKHWsFKZH2jAU6q2i50as7GTjJVXrITJeTeBUiM= SHA256 (hackage/semigroupoids-6.0.0.1.tar.gz) = faOKmJG9+CBf1lIs23EpVrjAv1xSmD2mApXI4FfXeTQ= SHA256 (hackage/semigroupoids-6.0.0.1_1.cabal) = R6I7RRwRTmU2HnE+j+NoKPyjqEKFMl6PREJUsqsMQ8U= -SHA256 (hackage/shellcheck-0.9.0pl20231108-a71a13c2.tar.gz) = F6rqb/T3emy7iYiGLIVAbogiUAJEkTKBAjR22okctvM= SHA256 (hackage/splitmix-0.1.0.5.tar.gz) = nfB6lhHvRfGxJYoLQS9NAskgJI9p0uLOjM2jKPfhMAI= SHA256 (hackage/strict-0.5.tar.gz) = P08Jld7C1SDQ4yFUL3FBLawCNlj9q2A9sENk11JpoP0= SHA256 (hackage/strict-0.5_1.cabal) = vVfXs2VZUd+qfR4TdNc1Lf6D+CqcmDCb86ZYfvjL2H0= SHA256 (hackage/tagged-0.8.8.tar.gz) = oIP6eDVRYgPBaEM6HI38ApCpSwX+2rVmrQZA/JE3pqc= +SHA256 (hackage/tagged-0.8.8_1.cabal) = kZPe+9492plyNszBGh2z4HPMUx/lI+E+llnfd2/rCzI= SHA256 (hackage/text-iso8601-0.1.tar.gz) = 9Y56RvlR8fE9KSngovhPbbeJTVWmQRaarzAK6praX88= SHA256 (hackage/text-iso8601-0.1_1.cabal) = rIbyUAynUds8DeAp3X54Jr73Nm1Z3ACFsA/GlcQ7n3Y= SHA256 (hackage/text-short-0.1.5.tar.gz) = o17GzeKtoITBoFDcWIW+WrAfhRuT10TPD6y8HBgALdo= SHA256 (hackage/text-short-0.1.5_3.cabal) = nHPJyRgspp7pLON1j1FbHAeM0WfYgszIxG+S9oxl4ZA= SHA256 (hackage/th-abstraction-0.6.0.0.tar.gz) = aepuyh8MALbh4fgynJCOx25zhV4s5ukazi+Lv5LFGjA= -SHA256 (hackage/th-abstraction-0.6.0.0_1.cabal) = 2JWfpqKBKvzdX28lX9a+iz4MoB5CVYalVFRPy3Cw7Hw= -SHA256 (hackage/th-compat-0.1.4.tar.gz) = 2Pl6wUq0e2uKew/bT/lUJjIuxWut0BZSrBXaSkTUurg= -SHA256 (hackage/th-compat-0.1.4_3.cabal) = Pn0bj5xyyrBMjf39Jlid1/MeAVrWQKIHrKO2VFd1Mv8= +SHA256 (hackage/th-abstraction-0.6.0.0_2.cabal) = MTdg1jCFGg66a9yxoetUPEycWDBy1wQGf6MkilJSqK4= +SHA256 (hackage/th-compat-0.1.5.tar.gz) = gfVfr8evrXdjwJy4t7QWXKN2Xtz3D/pCxzkwQ6E4Kh4= SHA256 (hackage/these-1.2.tar.gz) = qO1xdLf3kHZDYPSKq3L+o4KmCT7Tace8aIH64aus1Lg= SHA256 (hackage/these-1.2_1.cabal) = AR4i9okcoCj4fATqSHlmlsktWTMTqcaZ9/9Pn/167G4= SHA256 (hackage/time-compat-1.9.6.1.tar.gz) = rQe7AOuWeMITbTaAdSsArMTLxSJlS7MZm/McYe8ea4A= SHA256 (hackage/time-compat-1.9.6.1_6.cabal) = F2Me8BoDpvVfvhMWkPh/be6aFXKsyZtsBvBIgkcP+1I= SHA256 (hackage/transformers-compat-0.7.2.tar.gz) = tixzBMnzy8lGPQc5qoXLlInyF+oJK51iXUF1FPvMnWo= -SHA256 (hackage/unordered-containers-0.2.19.1.tar.gz) = Gye+xeDVIrJ6YCnr9MSm1ArLwIPHhwCOMvtVxLHRKNI= -SHA256 (hackage/unordered-containers-0.2.19.1_3.cabal) = HCjKQp45YN4DMJCFeaQnzKzd1wDLhOwZaeK75XYVKt0= +SHA256 (hackage/unordered-containers-0.2.20.tar.gz) = 2c+yh88AWS053Jw8rIuZYn6gjywBeY5wEw/Dn3yQ8R0= +SHA256 (hackage/unordered-containers-0.2.20_1.cabal) = dGwysj+TyxPlIwnlToLWnkMVEF+YFbH8rCWlcHFQXP8= SHA256 (hackage/uuid-types-1.0.5.1.tar.gz) = C+xtaYKzySv6XqsdITvi1LZpa5osOh8fBYEtw3Ytyiw= SHA256 (hackage/vector-0.13.1.0.tar.gz) = Y/JyJ56rirlBGg//sSUqwwmylzE/jjO+nrvC+YHt7O4= -SHA256 (hackage/vector-stream-0.1.0.0.tar.gz) = qIghD2Rn8VUJBlNzS+XMkgQGoHIn4NOttZCWcW/bgGw= -SHA256 (hackage/vector-stream-0.1.0.0_3.cabal) = iXeVnUvsVNnyxenUuqLKx6sm6ASnJZHfjbiH4Gkq6K4= +SHA256 (hackage/vector-0.13.1.0_1.cabal) = vAMsz7Udd1629AgsX8AvVBaw6g1mRKYNh2d6aTfy1w0= +SHA256 (hackage/vector-stream-0.1.0.1.tar.gz) = 0PUHM0vepUMaLwf1Jal/KedlIsMiEPXebVorTx1Cv3w= +SHA256 (hackage/vector-stream-0.1.0.1_1.cabal) = FqaeLtcdezXhaGD6xSD5T6TaEg65c9n4+/CqOnA9Sp8= SHA256 (hackage/witherable-0.4.2.tar.gz) = eQ0rsnQoNBkXO9iRBEOYYGdalBD3DyGRKXPs2QmLQQQ= SHA256 (hackage/witherable-0.4.2_4.cabal) = zsUWs13w/1OrAGjnCpEqC6e2XGcvvFVHJxg/qhla07g= -SIZE (hackage/Diff-0.4.1.tar.gz) = 8759 +SIZE (hackage/Diff-0.5.tar.gz) = 9122 +SIZE (hackage/Diff-0.5_1.cabal) = 1814 SIZE (hackage/OneTuple-0.4.1.1.tar.gz) = 5601 SIZE (hackage/OneTuple-0.4.1.1_1.cabal) = 2575 SIZE (hackage/QuickCheck-2.14.3.tar.gz) = 76849 +SIZE (hackage/ShellCheck-0.10.0.tar.gz) = 234856 SIZE (hackage/StateVar-1.2.2.tar.gz) = 5048 SIZE (hackage/aeson-2.2.1.0.tar.gz) = 341038 SIZE (hackage/aeson-2.2.1.0_1.cabal) = 6582 SIZE (hackage/assoc-1.1.tar.gz) = 3193 SIZE (hackage/assoc-1.1_1.cabal) = 1617 SIZE (hackage/base-orphans-0.9.1.tar.gz) = 26418 -SIZE (hackage/bifunctors-5.6.1.tar.gz) = 38170 -SIZE (hackage/bifunctors-5.6.1_2.cabal) = 3273 +SIZE (hackage/bifunctors-5.6.2.tar.gz) = 38193 SIZE (hackage/comonad-5.0.8.tar.gz) = 15227 SIZE (hackage/comonad-5.0.8_2.cabal) = 3631 SIZE (hackage/contravariant-1.5.5.tar.gz) = 13815 -SIZE (hackage/data-array-byte-0.1.0.1.tar.gz) = 6784 -SIZE (hackage/data-array-byte-0.1.0.1_2.cabal) = 1989 SIZE (hackage/data-fix-0.3.2.tar.gz) = 5842 SIZE (hackage/data-fix-0.3.2_5.cabal) = 1734 SIZE (hackage/distributive-0.6.2.1.tar.gz) = 8140 @@ -100,8 +96,6 @@ SIZE (hackage/distributive-0.6.2.1_1.cab SIZE (hackage/dlist-1.0.tar.gz) = 18667 SIZE (hackage/dlist-1.0_1.cabal) = 3812 SIZE (hackage/fgl-5.8.2.0.tar.gz) = 57401 -SIZE (hackage/foldable1-classes-compat-0.1.tar.gz) = 10484 -SIZE (hackage/foldable1-classes-compat-0.1_4.cabal) = 3782 SIZE (hackage/generically-0.1.1.tar.gz) = 2870 SIZE (hackage/generically-0.1.1_2.cabal) = 1169 SIZE (hackage/hashable-1.4.3.0.tar.gz) = 25601 @@ -116,8 +110,8 @@ SIZE (hackage/integer-logarithms-1.0.3.1 SIZE (hackage/network-uri-2.6.4.2.tar.gz) = 31309 SIZE (hackage/network-uri-2.6.4.2_1.cabal) = 3217 SIZE (hackage/primitive-0.9.0.0.tar.gz) = 60580 -SIZE (hackage/random-1.2.1.1.tar.gz) = 47109 -SIZE (hackage/random-1.2.1.1_1.cabal) = 6777 +SIZE (hackage/primitive-0.9.0.0_1.cabal) = 3171 +SIZE (hackage/random-1.2.1.2.tar.gz) = 47229 SIZE (hackage/regex-base-0.94.0.2.tar.gz) = 10488 SIZE (hackage/regex-base-0.94.0.2_4.cabal) = 2601 SIZE (hackage/regex-tdfa-1.3.2.2.tar.gz) = 83016 @@ -128,29 +122,29 @@ SIZE (hackage/semialign-1.3.tar.gz) = 10 SIZE (hackage/semialign-1.3_1.cabal) = 2888 SIZE (hackage/semigroupoids-6.0.0.1.tar.gz) = 36222 SIZE (hackage/semigroupoids-6.0.0.1_1.cabal) = 7465 -SIZE (hackage/shellcheck-0.9.0pl20231108-a71a13c2.tar.gz) = 458708 SIZE (hackage/splitmix-0.1.0.5.tar.gz) = 22399 SIZE (hackage/strict-0.5.tar.gz) = 12564 SIZE (hackage/strict-0.5_1.cabal) = 4120 SIZE (hackage/tagged-0.8.8.tar.gz) = 10094 +SIZE (hackage/tagged-0.8.8_1.cabal) = 2732 SIZE (hackage/text-iso8601-0.1.tar.gz) = 9578 SIZE (hackage/text-iso8601-0.1_1.cabal) = 2407 SIZE (hackage/text-short-0.1.5.tar.gz) = 25113 SIZE (hackage/text-short-0.1.5_3.cabal) = 3216 SIZE (hackage/th-abstraction-0.6.0.0.tar.gz) = 43152 -SIZE (hackage/th-abstraction-0.6.0.0_1.cabal) = 2303 -SIZE (hackage/th-compat-0.1.4.tar.gz) = 14838 -SIZE (hackage/th-compat-0.1.4_3.cabal) = 3224 +SIZE (hackage/th-abstraction-0.6.0.0_2.cabal) = 2303 +SIZE (hackage/th-compat-0.1.5.tar.gz) = 14893 SIZE (hackage/these-1.2.tar.gz) = 10606 SIZE (hackage/these-1.2_1.cabal) = 2882 SIZE (hackage/time-compat-1.9.6.1.tar.gz) = 59964 SIZE (hackage/time-compat-1.9.6.1_6.cabal) = 5076 SIZE (hackage/transformers-compat-0.7.2.tar.gz) = 46485 -SIZE (hackage/unordered-containers-0.2.19.1.tar.gz) = 58030 -SIZE (hackage/unordered-containers-0.2.19.1_3.cabal) = 3698 +SIZE (hackage/unordered-containers-0.2.20.tar.gz) = 59823 +SIZE (hackage/unordered-containers-0.2.20_1.cabal) = 3921 SIZE (hackage/uuid-types-1.0.5.1.tar.gz) = 11965 SIZE (hackage/vector-0.13.1.0.tar.gz) = 156855 -SIZE (hackage/vector-stream-0.1.0.0.tar.gz) = 12377 -SIZE (hackage/vector-stream-0.1.0.0_3.cabal) = 1404 +SIZE (hackage/vector-0.13.1.0_1.cabal) = 9015 +SIZE (hackage/vector-stream-0.1.0.1.tar.gz) = 12577 +SIZE (hackage/vector-stream-0.1.0.1_1.cabal) = 1583 SIZE (hackage/witherable-0.4.2.tar.gz) = 11876 SIZE (hackage/witherable-0.4.2_4.cabal) = 2342 Index: files/shellcheck.1 =================================================================== RCS file: /cvs/ports/devel/shellcheck/files/shellcheck.1,v retrieving revision 1.4 diff -u -p -r1.4 shellcheck.1 --- files/shellcheck.1 16 Dec 2022 19:29:05 -0000 1.4 +++ files/shellcheck.1 21 Mar 2024 19:39:04 -0000 @@ -1,30 +1,12 @@ -.\" Automatically generated by Pandoc 2.19.2 +.\" Automatically generated by Pandoc 3.1.12.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "SHELLCHECK" "1" "" "Shell script analysis tool" "" -.hy .SH NAME -.PP -shellcheck - Shell script analysis tool +shellcheck \- Shell script analysis tool .SH SYNOPSIS -.PP \f[B]shellcheck\f[R] [\f[I]OPTIONS\f[R]...] \f[I]FILES\f[R]... .SH DESCRIPTION -.PP ShellCheck is a static analysis and linting tool for sh/bash scripts. It\[aq]s mainly focused on handling typical beginner and intermediate level syntax errors and pitfalls where the shell just gives a cryptic @@ -34,113 +16,122 @@ advanced issues where corner cases can c ShellCheck gives shell specific advice. Consider this line: .IP -.nf -\f[C] +.EX (( area = 3.14*r*r )) -\f[R] -.fi +.EE .IP \[bu] 2 -For scripts starting with \f[V]#!/bin/sh\f[R] (or when using -\f[V]-s sh\f[R]), ShellCheck will warn that \f[V](( .. ))\f[R] is not +For scripts starting with \f[CR]#!/bin/sh\f[R] (or when using +\f[CR]\-s sh\f[R]), ShellCheck will warn that \f[CR](( .. ))\f[R] is not POSIX compliant (similar to checkbashisms). .IP \[bu] 2 -For scripts starting with \f[V]#!/bin/bash\f[R] (or using -\f[V]-s bash\f[R]), ShellCheck will warn that decimals are not +For scripts starting with \f[CR]#!/bin/bash\f[R] (or using +\f[CR]\-s bash\f[R]), ShellCheck will warn that decimals are not supported. .IP \[bu] 2 -For scripts starting with \f[V]#!/bin/ksh\f[R] (or using -\f[V]-s ksh\f[R]), ShellCheck will not warn at all, as \f[V]ksh\f[R] +For scripts starting with \f[CR]#!/bin/ksh\f[R] (or using +\f[CR]\-s ksh\f[R]), ShellCheck will not warn at all, as \f[CR]ksh\f[R] supports decimals in arithmetic contexts. .SH OPTIONS .TP -\f[B]-a\f[R],\ \f[B]--check-sourced\f[R] +\f[B]\-a\f[R],\ \f[B]\-\-check\-sourced\f[R] Emit warnings in sourced files. -Normally, \f[V]shellcheck\f[R] will only warn about issues in the +Normally, \f[CR]shellcheck\f[R] will only warn about issues in the specified files. With this option, any issues in sourced files will also be reported. .TP -\f[B]-C\f[R][\f[I]WHEN\f[R]],\ \f[B]--color\f[R][=\f[I]WHEN\f[R]] +\f[B]\-C\f[R][\f[I]WHEN\f[R]],\ \f[B]\-\-color\f[R][=\f[I]WHEN\f[R]] For TTY output, enable colors \f[I]always\f[R], \f[I]never\f[R] or \f[I]auto\f[R]. The default is \f[I]auto\f[R]. -\f[B]--color\f[R] without an argument is equivalent to -\f[B]--color=always\f[R]. +\f[B]\-\-color\f[R] without an argument is equivalent to +\f[B]\-\-color=always\f[R]. .TP -\f[B]-i\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]--include=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] +\f[B]\-i\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]\-\-include=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] Explicitly include only the specified codes in the report. -Subsequent \f[B]-i\f[R] options are cumulative, but all the codes can be -specified at once, comma-separated as a single argument. +Subsequent \f[B]\-i\f[R] options are cumulative, but all the codes can +be specified at once, comma\-separated as a single argument. Include options override any provided exclude options. .TP -\f[B]-e\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]--exclude=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] +\f[B]\-e\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]\-\-exclude=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] Explicitly exclude the specified codes from the report. -Subsequent \f[B]-e\f[R] options are cumulative, but all the codes can be -specified at once, comma-separated as a single argument. +Subsequent \f[B]\-e\f[R] options are cumulative, but all the codes can +be specified at once, comma\-separated as a single argument. +.TP +\f[B]\-\-extended\-analysis=true/false\f[R] +Enable/disable Dataflow Analysis to identify more issues (default true). +If ShellCheck uses too much CPU/RAM when checking scripts with several +thousand lines of code, extended analysis can be disabled with this flag +or a directive. +This flag overrides directives and rc files. .TP -\f[B]-f\f[R] \f[I]FORMAT\f[R], \f[B]--format=\f[R]\f[I]FORMAT\f[R] +\f[B]\-f\f[R] \f[I]FORMAT\f[R], \f[B]\-\-format=\f[R]\f[I]FORMAT\f[R] Specify the output format of shellcheck, which prints its results in the standard output. -Subsequent \f[B]-f\f[R] options are ignored, see \f[B]FORMATS\f[R] below -for more information. +Subsequent \f[B]\-f\f[R] options are ignored, see \f[B]FORMATS\f[R] +below for more information. .TP -\f[B]--list-optional\f[R] +\f[B]\-\-list\-optional\f[R] Output a list of known optional checks. -These can be enabled with \f[B]-o\f[R] flags or \f[B]enable\f[R] +These can be enabled with \f[B]\-o\f[R] flags or \f[B]enable\f[R] directives. .TP -\f[B]--norc\f[R] +\f[B]\-\-norc\f[R] Don\[aq]t try to look for .shellcheckrc configuration files. .TP -\f[B]-o\f[R]\ \f[I]NAME1\f[R][,\f[I]NAME2\f[R]...],\ \f[B]--enable=\f[R]\f[I]NAME1\f[R][,\f[I]NAME2\f[R]...] +\-\-rcfile\ RCFILE +Prefer the specified configuration file over searching for one in the +default locations. +.TP +\f[B]\-o\f[R]\ \f[I]NAME1\f[R][,\f[I]NAME2\f[R]...],\ \f[B]\-\-enable=\f[R]\f[I]NAME1\f[R][,\f[I]NAME2\f[R]...] Enable optional checks. The special name \f[I]all\f[R] enables all of them. -Subsequent \f[B]-o\f[R] options accumulate. +Subsequent \f[B]\-o\f[R] options accumulate. This is equivalent to specifying \f[B]enable\f[R] directives. .TP -\f[B]-P\f[R]\ \f[I]SOURCEPATH\f[R],\ \f[B]--source-path=\f[R]\f[I]SOURCEPATH\f[R] -Specify paths to search for sourced files, separated by \f[V]:\f[R] on -Unix and \f[V];\f[R] on Windows. -This is equivalent to specifying \f[V]search-path\f[R] directives. +\f[B]\-P\f[R]\ \f[I]SOURCEPATH\f[R],\ \f[B]\-\-source\-path=\f[R]\f[I]SOURCEPATH\f[R] +Specify paths to search for sourced files, separated by \f[CR]:\f[R] on +Unix and \f[CR];\f[R] on Windows. +This is equivalent to specifying \f[CR]search\-path\f[R] directives. .TP -\f[B]-s\f[R]\ \f[I]shell\f[R],\ \f[B]--shell=\f[R]\f[I]shell\f[R] +\f[B]\-s\f[R]\ \f[I]shell\f[R],\ \f[B]\-\-shell=\f[R]\f[I]shell\f[R] Specify Bourne shell dialect. -Valid values are \f[I]sh\f[R], \f[I]bash\f[R], \f[I]dash\f[R] and -\f[I]ksh\f[R]. -The default is to deduce the shell from the file\[aq]s \f[V]shell\f[R] -directive, shebang, or \f[V].bash/.bats/.dash/.ksh\f[R] extension, in +Valid values are \f[I]sh\f[R], \f[I]bash\f[R], \f[I]dash\f[R], +\f[I]ksh\f[R], and \f[I]busybox\f[R]. +The default is to deduce the shell from the file\[aq]s \f[CR]shell\f[R] +directive, shebang, or \f[CR].bash/.bats/.dash/.ksh\f[R] extension, in that order. -\f[I]sh\f[R] refers to POSIX \f[V]sh\f[R] (not the system\[aq]s), and +\f[I]sh\f[R] refers to POSIX \f[CR]sh\f[R] (not the system\[aq]s), and will warn of portability issues. .TP -\f[B]-S\f[R]\ \f[I]SEVERITY\f[R],\ \f[B]--severity=\f[R]\f[I]severity\f[R] +\f[B]\-S\f[R]\ \f[I]SEVERITY\f[R],\ \f[B]\-\-severity=\f[R]\f[I]severity\f[R] Specify minimum severity of errors to consider. Valid values in order of severity are \f[I]error\f[R], \f[I]warning\f[R], \f[I]info\f[R] and \f[I]style\f[R]. The default is \f[I]style\f[R]. .TP -\f[B]-V\f[R],\ \f[B]--version\f[R] +\f[B]\-V\f[R],\ \f[B]\-\-version\f[R] Print version information and exit. .TP -\f[B]-W\f[R] \f[I]NUM\f[R],\ \f[B]--wiki-link-count=NUM\f[R] +\f[B]\-W\f[R] \f[I]NUM\f[R],\ \f[B]\-\-wiki\-link\-count=NUM\f[R] For TTY output, show \f[I]NUM\f[R] wiki links to more information about mentioned warnings. Set to 0 to disable them entirely. .TP -\f[B]-x\f[R],\ \f[B]--external-sources\f[R] -Follow \f[V]source\f[R] statements even when the file is not specified +\f[B]\-x\f[R],\ \f[B]\-\-external\-sources\f[R] +Follow \f[CR]source\f[R] statements even when the file is not specified as input. -By default, \f[V]shellcheck\f[R] will only follow files specified on the -command line (plus \f[V]/dev/null\f[R]). -This option allows following any file the script may \f[V]source\f[R]. +By default, \f[CR]shellcheck\f[R] will only follow files specified on +the command line (plus \f[CR]/dev/null\f[R]). +This option allows following any file the script may \f[CR]source\f[R]. .RS .PP -This option may also be enabled using \f[V]external-sources=true\f[R] in -\f[V].shellcheckrc\f[R]. +This option may also be enabled using \f[CR]external\-sources=true\f[R] +in \f[CR].shellcheckrc\f[R]. This flag takes precedence. .RE .TP \f[B]FILES...\f[R] -One or more script files to check, or \[dq]-\[dq] for standard input. +One or more script files to check, or \[dq]\-\[dq] for standard input. .SH FORMATS .TP \f[B]tty\f[R] @@ -153,15 +144,13 @@ Useful for editors that support compilin .RS .PP For example, in Vim, -\f[V]:set makeprg=shellcheck\[rs] -f\[rs] gcc\[rs] %\f[R] will allow -using \f[V]:make\f[R] to check the script, and \f[V]:cnext\f[R] to jump -to the next error. +\f[CR]:set makeprg=shellcheck\[rs] \-f\[rs] gcc\[rs] %\f[R] will allow +using \f[CR]:make\f[R] to check the script, and \f[CR]:cnext\f[R] to +jump to the next error. .IP -.nf -\f[C] +.EX <file>:<line>:<column>: <type>: <message> -\f[R] -.fi +.EE .RE .TP \f[B]checkstyle\f[R] @@ -170,9 +159,8 @@ Supported directly or through plugins by systems. .RS .IP -.nf -\f[C] -<?xml version=\[aq]1.0\[aq] encoding=\[aq]UTF-8\[aq]?> +.EX +<?xml version=\[aq]1.0\[aq] encoding=\[aq]UTF\-8\[aq]?> <checkstyle version=\[aq]4.3\[aq]> <file name=\[aq]file\[aq]> <error @@ -185,30 +173,27 @@ systems. </file> ... </checkstyle> -\f[R] -.fi +.EE .RE .TP \f[B]diff\f[R] -Auto-fixes in unified diff format. -Can be piped to \f[V]git apply\f[R] or \f[V]patch -p1\f[R] to +Auto\-fixes in unified diff format. +Can be piped to \f[CR]git apply\f[R] or \f[CR]patch \-p1\f[R] to automatically apply fixes. .RS .IP -.nf -\f[C] ---- a/test.sh +.EX +\-\-\- a/test.sh +++ b/test.sh -\[at]\[at] -2,6 +2,6 \[at]\[at] +\[at]\[at] \-2,6 +2,6 \[at]\[at] ## Example of a broken script. for f in $(ls *.m3u) do -- grep -qi hq.*mp3 $f \[rs] -+ grep -qi hq.*mp3 \[dq]$f\[dq] \[rs] - && echo -e \[aq]Playlist $f contains a HQ file in mp3 format\[aq] +\- grep \-qi hq.*mp3 $f \[rs] ++ grep \-qi hq.*mp3 \[dq]$f\[dq] \[rs] + && echo \-e \[aq]Playlist $f contains a HQ file in mp3 format\[aq] done -\f[R] -.fi +.EE .RE .TP \f[B]json1\f[R] @@ -218,8 +203,7 @@ ShellCheck\[aq]s json is compact and con Tabs are counted as 1 character. .RS .IP -.nf -\f[C] +.EX { comments: [ { @@ -233,8 +217,7 @@ Tabs are counted as 1 character. ... ] } -\f[R] -.fi +.EE .RE .TP \f[B]json\f[R] @@ -246,94 +229,93 @@ Suppress all normal output. Exit with zero if no issues are found, otherwise exit with one. Stops processing after the first issue. .SH DIRECTIVES -.PP ShellCheck directives can be specified as comments in the shell script. -If they appear before the first command, they are considered file-wide. +If they appear before the first command, they are considered file\-wide. Otherwise, they apply to the immediately following command or block: .IP -.nf -\f[C] +.EX # shellcheck key=value key=value -command-or-structure -\f[R] -.fi +command\-or\-structure +.EE .PP -For example, to suppress SC2035 about using \f[V]./*.jpg\f[R]: +For example, to suppress SC2035 about using \f[CR]./*.jpg\f[R]: .IP -.nf -\f[C] +.EX # shellcheck disable=SC2035 echo \[dq]Files: \[dq] *.jpg -\f[R] -.fi +.EE .PP To tell ShellCheck where to look for an otherwise dynamically determined file: .IP -.nf -\f[C] +.EX # shellcheck source=./lib.sh source \[dq]$(find_install_dir)/lib.sh\[dq] -\f[R] -.fi +.EE .PP Here a shell brace group is used to suppress a warning on multiple lines: .IP -.nf -\f[C] +.EX # shellcheck disable=SC2016 { echo \[aq]Modifying $PATH\[aq] echo \[aq]PATH=foo:$PATH\[aq] >> \[ti]/.bashrc } -\f[R] -.fi +.EE .PP Valid keys are: .TP \f[B]disable\f[R] Disables a comma separated list of error codes for the following command. -The command can be a simple command like \f[V]echo foo\f[R], or a +The command can be a simple command like \f[CR]echo foo\f[R], or a compound command like a function definition, subshell block or loop. A range can be be specified with a dash, e.g. -\f[V]disable=SC3000-SC4000\f[R] to exclude 3xxx. -All warnings can be disabled with \f[V]disable=all\f[R]. +\f[CR]disable=SC3000\-SC4000\f[R] to exclude 3xxx. +All warnings can be disabled with \f[CR]disable=all\f[R]. .TP \f[B]enable\f[R] Enable an optional check by name, as listed with -\f[B]--list-optional\f[R]. -Only file-wide \f[V]enable\f[R] directives are considered. +\f[B]\-\-list\-optional\f[R]. +Only file\-wide \f[CR]enable\f[R] directives are considered. .TP -\f[B]external-sources\f[R] -Set to \f[V]true\f[R] in \f[V].shellcheckrc\f[R] to always allow +\f[B]extended\-analysis\f[R] +Set to true/false to enable/disable dataflow analysis. +Specifying \f[CR]# shellcheck extended\-analysis=false\f[R] in +particularly large (2000+ line) auto\-generated scripts will reduce +ShellCheck\[aq]s resource usage at the expense of certain checks. +Extended analysis is enabled by default. +.TP +\f[B]external\-sources\f[R] +Set to \f[CR]true\f[R] in \f[CR].shellcheckrc\f[R] to always allow ShellCheck to open arbitrary files from \[aq]source\[aq] statements (the way most tools do). .RS .PP -This option defaults to \f[V]false\f[R] only due to ShellCheck\[aq]s +This option defaults to \f[CR]false\f[R] only due to ShellCheck\[aq]s origin as a remote service for checking untrusted scripts. It can safely be enabled for normal development. .RE .TP \f[B]source\f[R] -Overrides the filename included by a \f[V]source\f[R]/\f[V].\f[R] +Overrides the filename included by a \f[CR]source\f[R]/\f[CR].\f[R] statement. This can be used to tell shellcheck where to look for a file whose name is determined at runtime, or to skip a source by telling it to use -\f[V]/dev/null\f[R]. +\f[CR]/dev/null\f[R]. .TP -\f[B]source-path\f[R] -Add a directory to the search path for \f[V]source\f[R]/\f[V].\f[R] +\f[B]source\-path\f[R] +Add a directory to the search path for \f[CR]source\f[R]/\f[CR].\f[R] statements (by default, only ShellCheck\[aq]s working directory is included). Absolute paths will also be rooted in these paths. -The special path \f[V]SCRIPTDIR\f[R] can be used to specify the +The special path \f[CR]SCRIPTDIR\f[R] can be used to specify the currently checked script\[aq]s directory, as in -\f[V]source-path=SCRIPTDIR\f[R] or -\f[V]source-path=SCRIPTDIR/../libs\f[R]. -Multiple paths accumulate, and \f[V]-P\f[R] takes precedence over them. +\f[CR]source\-path=SCRIPTDIR\f[R] or +\f[CR]source\-path=SCRIPTDIR/../libs\f[R]. +Multiple paths accumulate, and \f[CR]\-P\f[R] takes precedence over +them. .TP \f[B]shell\f[R] Overrides the shell detected from the shebang. @@ -341,66 +323,60 @@ This is useful for files meant to be inc shebang), or possibly as a more targeted alternative to \[aq]disable=SC2039\[aq]. .SH RC FILES -.PP -Unless \f[V]--norc\f[R] is used, ShellCheck will look for a file -\f[V].shellcheckrc\f[R] or \f[V]shellcheckrc\f[R] in the script\[aq]s +Unless \f[CR]\-\-norc\f[R] is used, ShellCheck will look for a file +\f[CR].shellcheckrc\f[R] or \f[CR]shellcheckrc\f[R] in the script\[aq]s directory and each parent directory. -If found, it will read \f[V]key=value\f[R] pairs from it and treat them -as file-wide directives. +If found, it will read \f[CR]key=value\f[R] pairs from it and treat them +as file\-wide directives. .PP -Here is an example \f[V].shellcheckrc\f[R]: +Here is an example \f[CR].shellcheckrc\f[R]: .IP -.nf -\f[C] +.EX # Look for \[aq]source\[aq]d files relative to the checked script, # and also look for absolute paths in /mnt/chroot -source-path=SCRIPTDIR -source-path=/mnt/chroot +source\-path=SCRIPTDIR +source\-path=/mnt/chroot # Since 0.9.0, values can be quoted with \[aq]\[aq] or \[dq]\[dq] to allow spaces -source-path=\[dq]My Documents/scripts\[dq] +source\-path=\[dq]My Documents/scripts\[dq] # Allow opening any \[aq]source\[aq]d file, even if not specified as input -external-sources=true +external\-sources=true # Turn on warnings for unquoted variables with safe values -enable=quote-safe-variables +enable=quote\-safe\-variables # Turn on warnings for unassigned uppercase variables -enable=check-unassigned-uppercase +enable=check\-unassigned\-uppercase -# Allow [ ! -z foo ] instead of suggesting -n +# Allow [ ! \-z foo ] instead of suggesting \-n disable=SC2236 -\f[R] -.fi +.EE .PP -If no \f[V].shellcheckrc\f[R] is found in any of the parent directories, -ShellCheck will look in \f[V]\[ti]/.shellcheckrc\f[R] followed by the -XDG config directory (usually \f[V]\[ti]/.config/shellcheckrc\f[R]) on -Unix, or \f[V]%APPDATA%/shellcheckrc\f[R] on Windows. +If no \f[CR].shellcheckrc\f[R] is found in any of the parent +directories, ShellCheck will look in \f[CR]\[ti]/.shellcheckrc\f[R] +followed by the XDG config directory (usually +\f[CR]\[ti]/.config/shellcheckrc\f[R]) on Unix, or +\f[CR]%APPDATA%/shellcheckrc\f[R] on Windows. Only the first file found will be used. .PP Note for Snap users: the Snap sandbox disallows access to hidden files. -Use \f[V]shellcheckrc\f[R] without the dot instead. +Use \f[CR]shellcheckrc\f[R] without the dot instead. .PP Note for Docker users: ShellCheck will only be able to look for files -that are mounted in the container, so \f[V]\[ti]/.shellcheckrc\f[R] will -not be read. +that are mounted in the container, so \f[CR]\[ti]/.shellcheckrc\f[R] +will not be read. .SH ENVIRONMENT VARIABLES -.PP -The environment variable \f[V]SHELLCHECK_OPTS\f[R] can be set with +The environment variable \f[CR]SHELLCHECK_OPTS\f[R] can be set with default flags: .IP -.nf -\f[C] -export SHELLCHECK_OPTS=\[aq]--shell=bash --exclude=SC2016\[aq] -\f[R] -.fi +.EX +export SHELLCHECK_OPTS=\[aq]\-\-shell=bash \-\-exclude=SC2016\[aq] +.EE .PP Its value will be split on spaces and prepended to the command line on each invocation. .SH RETURN VALUES -.PP ShellCheck uses the following exit codes: .IP \[bu] 2 0: All files successfully scanned with no issues. @@ -416,67 +392,59 @@ unknown flag). 4: ShellCheck was invoked with bad options (e.g. unknown formatter). .SH LOCALE -.PP This version of ShellCheck is only available in English. -All files are leniently decoded as UTF-8, with a fallback of ISO-8859-1 -for invalid sequences. -\f[V]LC_CTYPE\f[R] is respected for output, and defaults to UTF-8 for -locales where encoding is unspecified (such as the \f[V]C\f[R] locale). +All files are leniently decoded as UTF\-8, with a fallback of +ISO\-8859\-1 for invalid sequences. +\f[CR]LC_CTYPE\f[R] is respected for output, and defaults to UTF\-8 for +locales where encoding is unspecified (such as the \f[CR]C\f[R] locale). .PP Windows users seeing -\f[V]commitBuffer: invalid argument (invalid character)\f[R] should set -their terminal to use UTF-8 with \f[V]chcp 65001\f[R]. +\f[CR]commitBuffer: invalid argument (invalid character)\f[R] should set +their terminal to use UTF\-8 with \f[CR]chcp 65001\f[R]. .SH KNOWN INCOMPATIBILITIES -.PP (If nothing in this section makes sense, you are unlikely to be affected by it) .PP To avoid confusing and misguided suggestions, ShellCheck requires -function bodies to be either \f[V]{ brace groups; }\f[R] or -\f[V]( subshells )\f[R], and function names containing \f[V][]*=!\f[R] -are only recognized after a \f[V]function\f[R] keyword. +function bodies to be either \f[CR]{ brace groups; }\f[R] or +\f[CR]( subshells )\f[R], and function names containing \f[CR][]*=!\f[R] +are only recognized after a \f[CR]function\f[R] keyword. .PP The following unconventional function definitions are identical in Bash, but ShellCheck only recognizes the latter. .IP -.nf -\f[C] +.EX [x!=y] () [[ $1 ]] function [x!=y] () { [[ $1 ]]; } -\f[R] -.fi +.EE .PP -Shells without the \f[V]function\f[R] keyword do not allow these +Shells without the \f[CR]function\f[R] keyword do not allow these characters in function names to begin with. -Function names containing \f[V]{}\f[R] are not supported at all. +Function names containing \f[CR]{}\f[R] are not supported at all. .PP -Further, if ShellCheck sees \f[V][x!=y]\f[R] it will assume this is an +Further, if ShellCheck sees \f[CR][x!=y]\f[R] it will assume this is an invalid comparison. To invoke the above function, quote the command as in -\f[V]\[aq][x!=y]\[aq]\f[R], or to retain the same globbing behavior, use -\f[V]command [x!=y]\f[R]. +\f[CR]\[aq][x!=y]\[aq]\f[R], or to retain the same globbing behavior, +use \f[CR]command [x!=y]\f[R]. .PP -ShellCheck imposes additional restrictions on the \f[V][\f[R] command to -help diagnose common invalid uses. -While \f[V][ $x= 1 ]\f[R] is defined in POSIX, ShellCheck will assume it -was intended as the much more likely comparison -\f[V][ \[dq]$x\[dq] = 1 ]\f[R] and fail accordingly. -For unconventional or dynamic uses of the \f[V][\f[R] command, use -\f[V]test\f[R] or \f[V]\[rs][\f[R] instead. +ShellCheck imposes additional restrictions on the \f[CR][\f[R] command +to help diagnose common invalid uses. +While \f[CR][ $x= 1 ]\f[R] is defined in POSIX, ShellCheck will assume +it was intended as the much more likely comparison +\f[CR][ \[dq]$x\[dq] = 1 ]\f[R] and fail accordingly. +For unconventional or dynamic uses of the \f[CR][\f[R] command, use +\f[CR]test\f[R] or \f[CR]\[rs][\f[R] instead. .SH REPORTING BUGS -.PP Bugs and issues can be reported on GitHub: .PP https://github.com/koalaman/shellcheck/issues .SH AUTHORS -.PP ShellCheck is developed and maintained by Vidar Holen, with assistance from a long list of wonderful contributors. .SH COPYRIGHT -.PP -Copyright 2012-2022, Vidar Holen and contributors. +Copyright 2012\-2024, Vidar Holen and contributors. Licensed under the GNU General Public License version 3 or later, see https://gnu.org/licenses/gpl.html .SH SEE ALSO -.PP sh(1) bash(1)