Releases: mvdan/sh
v3.0.0
This is the first stable release as a proper module, now under mvdan.cc/sh/v3/...
. Go 1.12 or later is supported.
A large number of changes have been done since the last feature release a year ago. All users are encouraged to update. Below are the major highlights.
- cmd/shfmt
- Support for EditorConfig files
- Drop the dependency on
diff
for the-d
flag, now using pure Go
- syntax
- Overhaul escaped newlines, now represented as
WordPart
positions - Improve some operator type names, to consistently convey meaning
- Completely remove
StmtList
- Redesign
IfClause
, making its "else" anotherIfClause
node - Redesign
DeclClause
to remove its brokenOpts
field - Brace expression parsing is now done with a
BraceExp
word part - Improve comment alignment in
Printer
via a post-process step - Add support for the
~
bitwise negation operator - Record the use of deprecated tokens in the syntax tree
- Overhaul escaped newlines, now represented as
- interp
- Improve the module API as "handlers", to reduce confusion with Go modules
- Split
LookPath
out ofExecHandler
to allow custom behavior Run
now returnsnil
instead ofShellExitStatus(0)
OpenDevImpls
is removed; seeExampleOpenHandler
for an alternative
- expand
- Redesign
Variable
to reduce allocations - Add support for more escape sequences
- Make
Config
a bit more powerful viafunc
fields - Rework brace expansion via the new
BraceExp
word part
- Redesign
- pattern
- New package for shell pattern matching, extracted from
syntax
- Add support for multiple modes, including filenames and braces
- New package for shell pattern matching, extracted from
Special thanks to Konstantin Kulikov for his contribution to this release.
v3.0.0-beta1
This is one of the final pre-releases before v3.0.0. See the changelog for a summary of the included changes: https://github.com/mvdan/sh/blob/v3.0.0-beta1/CHANGELOG.md#unreleased
v2.6.4
Highlights:
- syntax
- Support array elements without values, like
declare -A x=([index]=)
- Parse
for i; do ...
uniquely, as it's short forfor i in "$@"
- Add missing error on unclosed nested backquotes
- Support array elements without values, like
- expand
- Don't expand tildes twice, fixing
echo ~
on Windows
- Don't expand tildes twice, fixing
- interp
- Fix the use of
Params
as an option toNew
- Support lowercase Windows volume names in
$PATH
- Fix the use of
Binaries built on go version go1.12 linux/amd64
.
v2.6.3
v2.6.2
Highlights:
- syntax
- Avoid premature reads in
Parser.Interactive
when parsing Unicode bytes - Fix parsing of certain Bash test expression involving newlines
Redirect.End
now takes theHdoc
field into accountValidName
now returnsfalse
for an empty string
- Avoid premature reads in
- expand
- Environment variables on Windows are case insensitive again
- interp
- Don't crash on
declare $unset=foo
- Fix a regression where executed programs would receive a broken environment
- Don't crash on
Note that the published Docker image was changed to set shfmt
as the entrypoint, so previous uses with arguments like docker run mvdan/shfmt:v2.6.1 shfmt --version
should now be docker run mvdan/shfmt:v2.6.2 --version
.
Binaries built on go version go1.11.2 linux/amd64
.
v2.6.1
v2.6.0
This is the biggest v2 release to date. It's now possible to write an interactive shell, and it's easier and safer to perform shell expansions.
This will be the last major v2 version, to allow converting the project to a Go module in v3.
Highlights:
- Go 1.10 or later required to build
- syntax
- Add
Parser.Interactive
to implement an interactive shell - Add
Parser.Document
to parse a single here-document body - Add
Parser.Words
to incrementally parse separate words - Add the
Word.Lit
helper method - Support custom indentation in
<<-
heredoc bodies
- Add
- interp
- Stabilize API and add some examples
- Introduce a constructor, and redesign
Runner.Reset
- Move the context from a field to function parameters
- Remove
Runner.Stmt
in favor ofRun
withShellExitStatus
- shell
- Stabilize API and add some examples
- Add
Expand
, as a more powerfulos.Expand
- Add
Fields
, similar to the oldRunner.Fields
Source*
functions now take a contextSource*
functions no longer try to sandbox
- expand
- New package, split from
interp
- Allows performing shell expansions in a controlled way
- Redesigned
Environ
andVariable
moved frominterp
- New package, split from
Binaries built on go version go1.11.2 linux/amd64
.
v2.5.1
v2.5.0
Highlights:
- syntax
- Add support for Bash's
{varname}<
redirects - Add
SpaceRedirects
to format redirects like> word
- Parse
$\"
correctly within double quotes - A few fixes where minification would break programs
- Printing of heredocs within
<()
no longer breaks them - Printing of single statements no longer adds empty lines
- Error on invalid parameter names like
${1a}
- Add support for Bash's
- interp
Runner.Dir
is now always an absolute path
- shell
Expand
now supports expanding a lone~
Expand
andSourceNode
now have default timeouts
- cmd/shfmt
- Add
-sr
to print spaces after redirect operators - Don't skip empty string values in
-tojson
- Include comment positions in
-tojson
- Add
Binaries built on go version go1.10.3 linux/amd64
.
v2.4.0
Highlights:
- Publish as a JS package, mvdan-sh
- syntax
- Add
DebugPrint
to pretty-print a syntax tree - Fix comment parsing and printing in some edge cases
- Indent
<<-
heredoc bodies if indenting with tabs - Add support for nested backquotes
- Relax parser to allow quotes in arithmetic expressions
- Don't rewrite
declare foo=
intodeclare foo
- Add
- interp
- Add support for
shopt -s globstar
- Replace
Runner.Env
with an interface
- Add support for
- shell
- Add
Expand
as a fully featured version ofos.Expand
- Add
- cmd/shfmt
- Set appropriate exit status when
-d
is used
- Set appropriate exit status when
Binaries built on go version go1.10.2 linux/amd64
.