Opinionated code formatter for TypeScript and JavaScript.
- Prefer single quotes.
- No semicolons.
- Trailing commas for multi-line.
- No function parentheses for arrow function with single argument.
- Multi-line union and intersection use consistent leading separator.
Read exports/sane-fmt.typescript.json, src/rules.rs, and tests/rules.rs for more information.
Go to the release page.
From crates.io
cargo install sane-fmt
Links:
From NPM
npm i -g @sane-fmt/wasm32-wasi
Links:
The WASM package while work on all platform, it is slow to start. For better speed, install one of the following packages instead:
For Linux:
For macOS:
For Windows:
From Deno Registry
Links:
- https://deno.land/x/sane_fmt/
- https://github.com/sane-fmt/deno/
- https://sane-fmt.github.io/deno/
From Arch User Repository
paru -S sane-fmt
Links:
paru -S sane-fmt-bin
Links:
Use with Dprint
If you already have Dprint, you can skip installing sane-fmt
binary. Create a dprint.json
file with the following content:
{
"$schema": "https://dprint.dev/schemas/v0.json",
"projectType": "openSource",
"extends": "https://github.com/sane-fmt/sane-fmt/raw/master/exports/sane-fmt.dprint.json",
"includes": [
"**/*.js",
"**/*.ts"
],
"excludes": [
".git",
"node_modules"
],
"plugins": [
"https://plugins.dprint.dev/typescript-${DPRINT_TYPESCRIPT_VERSION}.wasm"
]
}
Notes:
- Replace
master
in the"extends"
line above with appropriate sane-fmt version. - Replace
${DPRINT_TYPESCRIPT_VERSION}
above with appropriate dprint-plugin-typescript version.
See also:
- sane-fmt.dprint.json: Dprint configuration with rules of sane-fmt.
- sane-fmt.typescript.json: Configuration of dprint-plugin-typescript with rules of sane-fmt.
sane-fmt --write
This command would reformat all TypeScript and JavaScript files.
sane-fmt
This command would check all TypeScript and JavaScript files.
sane-fmt --write foo.ts bar.js
This command would only reformat foo.ts
and bar.js
.
sane-fmt --write src/
This command would reformat all TypeScript and JavaScript files within src/
directory.
Each line of list.txt
is a path to a TypeScript/JavaScript file.
sane-fmt --include=list.txt
git ls-files | grep -Ei '\.(js|ts)$' | sane-fmt --include=-
sane-fmt
also provides a convenient way to integrate with GitHub Actions. To use it, simply add --log-format=github-actions
, like so:
sane-fmt --log-format=github-actions --details=diff
When this command is executed within a GitHub Actions runner, it will:
- Annotates unformatted files.
- Group diffs by file names (if
--details=diff
). - Export
total
,changed
, andunchanged
as outputs.
Recommendation: This action will install sane-fmt
and execute it for you.
sane-fmt --help
If you installed sane-fmt via the AUR, completions for bash, fish, and zsh are already installed for you.
Shell completion files are located in ./exports directory of this repo or the Release Page with name in form of completion.<extension>
where <extension>
is corresponding file extension of target language. Install them to appropriate locations in your filesystem to use.
sane-fmt
is an opinionated code formatter for TypeScript and JavaScript powered by dprint. You can think of it as a portable Dprint config file that is always up-to-date.
I want to apply a single, consistent formatting for all my codes regardless of environment without complex tooling.
I have considered using Prettier or Dprint, but that would mean having to set up Node.js even in non-Node.js environments. I also don't like copying my config files back-and-forth to update them.
On the other hand, setting up sane-fmt
is simple: just download the binary.
Customization is antithetical to the purpose of this project, and as such, the sane-fmt
command does not have customization capability.
However, if you still want a copy of sane-fmt
with your own customized rules, do one of the following: