Releases: mvdan/sh
Releases · mvdan/sh
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
.
v2.3.0
Highlights:
- syntax
- Case clause patterns are no longer forced on a single line
- Add
ExpandBraces
, to perform Bash brace expansion on words - Improve the handling of backslashes within backquotes
- Improve the parsing of Bash test regexes
- interp
- Support
$DIRSTACK
,${param[@]#word}
, and${param,word}
- Support
- cmd/shfmt
- Add
-d
, to display diffs when formatting differs - Promote
-exp.tojson
to-tojson
- Add
Pos
andEnd
fields to nodes in-tojson
- Inline
StmtList
fields to simplify the-tojson
output - Support
-l
on standard input
- Add
Binaries built on go version go1.10 linux/amd64
.
v2.2.1
Highlights:
- syntax
- Don't error on
${1:-default}
- Allow single quotes in
${x['str key']}
as well as double quotes - Add support for
${!foo[@]}
- Don't simplify
foo[$x]
tofoo[x]
, to not break string indexes - Fix
Stmt.End
when the end token is the background operator&
- Never apply the negation operator
!
to&&
and||
lists - Apply the background operator
&
to entire&&
and||
lists - Fix
StopAt
when the stop string is at the beginning of the source - In
N>word
, check thatN
is a valid numeric literal - Fix a couple of crashers found via fuzzing
- Don't error on
- cmd/shfmt
- Don't error if non-bash files can't be written to
Binaries built on go version go1.9.3 linux/amd64
.
v2.2.0
Highlights:
- Tests on Mac and Windows are now ran as part of CI
- syntax
- Add
StopAt
to stop lexing at a custom arbitrary token - Add
TranslatePattern
andQuotePattern
for pattern matching - Minification support added to the printer - see
Minify
- Add ParamExp.Names to represent
${!prefix*}
- Add TimeClause.PosixFormat for its
-p
flag - Fix parsing of assignment values containing
=
- Fix parsing of parameter expansions followed by a backslash
- Fix quotes in parameter expansion operators like
${v:-'def'}
- Fix parsing of negated declare attributes like
declare +x name
- Fix parsing of
${#@}
- Reject bad parameter expansion operators like
${v@WRONG}
- Reject inline array variables like
a=(b c) prog
- Reject indexing of special vars like
${1[3]}
- Reject
${!name}
when in POSIX mode - Reject multiple parameter expansion actions like
${#v:-def}
- Add
- interp
- Add Bash brace expansion support, including
{a,b}
and{x..y}
- Pattern matching actions are more correct and precise
- Exported some Runner internals, including
Vars
andFuncs
- Use the interpreter's
$PATH
to find binaries - Roll our own globbing to use our own pattern matching code
- Support the
getopts
sh builtin - Support the
read
bash builtin - Numerous changes to improve Windows support
- Add Bash brace expansion support, including
- shell
- New experimental package with high-level utility functions
- Add
SourceFile
to get the variables declared in a script - Add
SourceNode
as a lower-level version of the above
- cmd/shfmt
- Add
-mn
, which minifies programs viasyntax.Minify
- Add
Binaries built on go version go1.9.2 linux/amd64
.
v2.1.0
Highlights:
- syntax
- Add
Stmts
, to parse one statement at a time - Walk no longer ignores comments
- Parameter expansion end fixes, such as
$foo.bar
- Whitespace alignment can now be kept - see
KeepPadding
- Introduce an internal newline token to simplify the parser
- Fix
Block.Pos
to actually return the start position - Fix mishandling of inline comments in two edge cases
- Add
- interp
- Expose
Fields
to expand words into strings - First configurable modules - cmds and files
- Add support for the new
TimeClause
- Add support for namerefs and readonly vars
- Add support for associative arrays (maps)
- More sh builtins:
exec return
- More bash builtins:
command pushd popd dirs
- More
test
operators:-b -c -t -o
- Configurable kill handling - see
KillTimeout
- Expose
- cmd/shfmt
- Add
-f
to just list all the shell files found - Add
-kp
to keep the column offsets in place
- Add
- cmd/gosh
- Now supports a basic interactive mode
Binaries built on go version go1.9.2 linux/amd64
.
v2.0.0
Highlights:
- The package import paths were moved to
mvdan.cc/sh/...
- syntax
- Parser and Printer structs introduced with functional options
- Node positions are now independent -
Position
merged intoPos
- All comments are now attached to nodes
- Support
mksh
- MirBSD's Korn Shell, used in Android - Various changes to the AST:
EvalClause
removed;eval
is no longer parsed as a keyword- Add support for Bash's
time
andselect
- Merge
UntilClause
intoWhileClause
- Moved
Stmt.Assigns
toCallExpr.Assigns
- Remove
Elif
- chainIfClause
nodes instead
- Support for indexed assignments like
a[i]=b
- Allow expansions in arithmetic expressions again
- Unclosed heredocs now produce an error
- Binary ops are kept in the same line - see
BinaryNextLine
- Switch cases are not indented by default - see
SwitchCaseIndent
- cmd/shfmt
- Add
-s
, which simplifies programs viasyntax.Simplify
- Add
-ln <lang>
, like-ln mksh
- Add
-bn
to put binary ops in the next line, like in v1 - Add
-ci
to indent switch cases, like in v1
- Add
- interp
- Some progress made, though still experimental
- Most of POSIX done - some builtins remain to be done
Binaries built on go version go1.8.3 linux/amd64
.
v2.0-beta1
See #144.
v1.3.1
Highlights:
- syntax
- Fix parsing of
${foo[$bar]}
- Fix printer regression where
> >(foo)
would be turned into>>(foo)
- Break comment alignment on any line without a comment, fixing formatting issues
- Error on keywords like
fi
anddone
used as commands
- Fix parsing of
Binaries built on go version go1.8.3 linux/amd64
.
v1.3.0
Highlights:
- syntax
- Fix backslashes in backquote command substitutions
- Disallow some test expressions like
[[ a == ! b ]]
- Disallow some parameter expansions like
${$foo}
- Disallow some arithmetic expressions like
((1=3))
and(($(echo 1 + 2)))
- Binary commands like
&&
,||
and pipes are now left-associative
- fileutil
CouldBeScript
may now return true on non-regular files such as symlinks
- interp
- New experimental package to interpret a
syntax.File
in pure Go
- New experimental package to interpret a
Binaries built on go version go1.8.1 linux/amd64
.