All Versions
47
Latest Version
Avg Release Cycle
58 days
Latest Release
696 days ago

Changelog History
Page 4

  • v2.4.0 Changes

    May 16, 2018

    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= into declare foo
    • interp
      • Add support for shopt -s globstar
      • Replace Runner.Env with an interface
    • shell
      • Add Expand as a fully featured version of os.Expand
    • cmd/shfmt
      • Set appropriate exit status when -d is used
  • v2.3.0 Changes

    March 07, 2018

    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}
    • cmd/shfmt
      • Add -d, to display diffs when formatting differs
      • Promote -exp.tojson to -tojson
      • Add Pos and End fields to nodes in -tojson
      • Inline StmtList fields to simplify the -tojson output
      • Support -l on standard input
  • v2.2.1 Changes

    January 25, 2018

    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] to foo[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 that N is a valid numeric literal
      • Fix a couple of crashers found via fuzzing
    • cmd/shfmt
      • Don't error if non-bash files can't be written to
  • v2.2.0 Changes

    January 18, 2018

    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 and QuotePattern 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}
    • 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 and Funcs
      • 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
    • 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 via syntax.Minify
  • v2.1.0 Changes

    November 25, 2017

    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
    • 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
    • cmd/shfmt
      • Add -f to just list all the shell files found
      • Add -kp to keep the column offsets in place
    • cmd/gosh
      • Now supports a basic interactive mode
  • v2.0.0 Changes

    August 30, 2017

    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 into Pos
      • 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 and select
      • Merge UntilClause into WhileClause
      • Moved Stmt.Assigns to CallExpr.Assigns
      • Remove Elif - chain IfClause 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 via syntax.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
    • interp
      • Some progress made, though still experimental
      • Most of POSIX done - some builtins remain to be done
  • v1.3.1 Changes

    May 26, 2017

    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 and done used as commands
  • v1.3.0 Changes

    April 24, 2017

    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
  • v1.2.0 Changes

    February 22, 2017

    Highlights:

    • syntax
      • Add support for escaped characters in bash regular expressions
    • fileutil
      • New package with some code moved from cmd/shfmt, now importable
      • New funcs HasShebang and CouldBeScript
      • Require shebangs to end with whitespace to reject #!/bin/shfoo
  • v1.1.0 Changes

    January 05, 2017

    Highlights:

    • syntax
      • Parse [[ a = b ]] like [[ a == b ]], deprecating TsAssgn in favour of TsEqual
      • Add support for the -k, -G, -O and -N unary operators inside [[ ]]
      • Add proper support for ! in parameter expansions, like ${!foo}
      • Fix a couple of crashes found via fuzzing
    • cmd/shfmt
      • Rewrite [[ a = b ]] into the saner [[ a == b ]] (see above)