sane-fmt
Opinionated code formatter for TypeScript and JavaScript.
Rules
- 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.
Installation
Download prebuilt binaries
Go to the release page.
crates.io
Fromcargo install sane-fmt
Links:
NPM
FromWASM (all platform)
npm i -g @sane-fmt/wasm32-wasi
Links:
Native binaries
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:
Arch User Repository
FromDownload source and compile
paru -S sane-fmt
Links:
Download prebuilt binary
paru -S sane-fmt-bin
Links:
Dprint
Use withIf you already have Dprint, you can skip installing sane-fmt
binary. Create a .dprintrc.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.dprintrc.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.dprintrc.json: Dprint configuration with rules of sane-fmt.
- sane-fmt.typescript.json: Configuration of dprint-plugin-typescript with rules of sane-fmt.
Usage
Format all TypeScript and JavaScript files
sane-fmt --write
This command would reformat all TypeScript and JavaScript files.
Check for all TypeScript and JavaScript files
sane-fmt
This command would check all TypeScript and JavaScript files.
Format only some files
sane-fmt --write foo.ts bar.js
This command would only reformat foo.ts
and bar.js
.
Format all TypeScript and JavaScript files in a directory
sane-fmt --write src/
This command would reformat all TypeScript and JavaScript files within src/
directory.
Check all TypeScript and JavaScript files in a list
Each line of list.txt
is a path to a TypeScript/JavaScript file.
sane-fmt --include=list.txt
Check all TypeScript and JavaScript files from a Git repo
git ls-files | grep -Ei '\.(js|ts)$' | sane-fmt --include=-
GitHub Actions
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.
Print help message
sane-fmt --help
Shell Completions
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.
Become a Patron
Frequently Asked Questions
What is this program?
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.
What is the point of this program?
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.
How to customize the rules?
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: