Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Sh | 5,891 | 82 | 9 days ago | 155 | May 23, 2022 | 86 | bsd-3-clause | Go | ||
A shell parser, formatter, and interpreter with bash support; includes shfmt | ||||||||||
Google Java Format | 4,949 | 77 | 91 | a month ago | 17 | March 07, 2022 | 107 | other | Java | |
Reformats Java source code to comply with Google Java Style. | ||||||||||
Prettier Eslint | 3,773 | 4,634 | 3,259 | 3 days ago | 98 | May 26, 2022 | 3 | mit | JavaScript | |
Code :arrow_right: prettier :arrow_right: eslint --fix :arrow_right: Formatted Code :sparkles: | ||||||||||
Rust.vim | 3,515 | 22 days ago | 116 | apache-2.0 | Vim Script | |||||
Vim configuration for Rust. | ||||||||||
Textlint | 2,583 | 395 | 142 | 2 days ago | 197 | September 20, 2022 | 51 | mit | TypeScript | |
The pluggable natural language linter for text and markdown. | ||||||||||
Dprint | 1,925 | 12 | 4 days ago | 89 | June 29, 2022 | 52 | mit | Rust | ||
Pluggable and configurable code formatting platform written in Rust. | ||||||||||
Neoformat | 1,763 | a month ago | 122 | bsd-2-clause | Vim Script | |||||
:sparkles: A (Neo)vim plugin for formatting code. | ||||||||||
Plugin Php | 1,603 | 50 | 30 | 3 days ago | 48 | July 02, 2022 | 91 | mit | PHP | |
Prettier PHP Plugin | ||||||||||
Bbuncrustifyplugin Xcode | 1,208 | 4 years ago | March 24, 2016 | 6 | mit | Objective-C | ||||
Xcode plugin to format source code using ClangFormat or Uncrustify | ||||||||||
Advanced Tables Obsidian | 1,085 | 6 months ago | 51 | gpl-3.0 | TypeScript | |||||
Improved table navigation, formatting, and manipulation in Obsidian.md |
A shell parser, formatter, and interpreter. Supports POSIX Shell, Bash, and mksh. Requires Go 1.19 or later.
To parse shell scripts, inspect them, and print them out, see the syntax examples.
For high-level operations like performing shell expansions on strings, see the shell examples.
go install mvdan.cc/sh/v3/cmd/[email protected]
shfmt
formats shell programs. See canonical.sh for a
quick look at its default style. For example:
shfmt -l -w script.sh
For more information, see its manpage, which can be viewed directly as Markdown or rendered with scdoc.
Packages are available on Alpine, Arch, Debian, Docker, Fedora, FreeBSD, Homebrew, MacPorts, NixOS, Scoop, Snapcraft, Void and webi.
go install mvdan.cc/sh/v3/cmd/[email protected]
Proof of concept shell that uses interp
. Note that it's not meant to replace a
POSIX shell at the moment, and its options are intentionally minimalistic.
We use Go's native fuzzing support. For instance:
cd syntax
go test -run=- -fuzz=ParsePrint
$ echo '${array[spaced string]}' | shfmt
1:16: not a valid arithmetic operator: string
$ echo '${array[dash-string]}' | shfmt
${array[dash - string]}
$((
and ((
ambiguity is not supported. Backtracking would complicate the
parser and make streaming support via io.Reader
impossible. The POSIX spec
recommends to space the operands if $( (
is meant.$ echo '$((foo); (bar))' | shfmt
1:1: reached ) without matching $(( with ))
export
and let
are parsed as keywords.
This allows statically building their syntax tree,
as opposed to keeping the arguments as a slice of words.
It is also required to support declare foo=(bar)
.
Note that this means expansions like declare {a,b}=c
are not supported.A subset of the Go packages are available as an npm package called mvdan-sh. See the _js directory for more information.
All release tags are published via Docker, such as v3.5.1
.
The latest stable release is currently published as v3
,
and the latest development version as latest
.
The images only include shfmt
; -alpine
variants exist on Alpine Linux.
To build a Docker image, run:
docker build -t my:tag -f cmd/shfmt/Dockerfile .
To use a Docker image, run:
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD:/mnt" -w /mnt my:tag <shfmt arguments>
The following editor integrations wrap shfmt
:
shell script
pluginOther noteworthy integrations include: