Format markdown code snippets using your favorite code formatters.
mdsf 0.3.1-dev
Format markdown code snippets using your favorite code formatters
Mads Hougesen <mads@mhouge.dk>
Usage: mdsf <COMMAND>
Commands:
format Run formatters on input files
verify Verify files are formatted
init Create a new mdsf config
completions Generate shell completion
cache-prune Remove old caches
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
The latest version of mdsf
can be downloaded directly from github.com/hougesen/mdsf/releases.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/hougesen/mdsf/releases/latest/download/mdsf-installer.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://github.com/hougesen/mdsf/releases/latest/download/mdsf-installer.ps1 | iex"
Install using the published crate:
cargo install mdsf --locked
or directly from source:
git clone git@github.com:hougesen/mdsf.git
cargo install --path ./mdsf --bin mdsf
If you do not have Cargo installed, you need to install it first.
You can install mdsf using npm:
npm install -g mdsf-cli
mdsf format .
or run it directly using npx:
npx mdsf-cli format .
brew install hougesen/tap/mdsf
mdsf format file.md
Run formatters on input files
Usage: mdsf format [OPTIONS] [INPUT]...
Arguments:
[INPUT]... Path to files and/or directories
Options:
--config <CONFIG> Path to config
--debug Log stdout and stderr of formatters
--log-level <LOG_LEVEL> [possible values: trace, debug, info, warn, error, off]
--threads <THREADS> Amount of threads to use. Defaults to 0 (auto)
--cache Only format changed codeblocks
-h, --help Print help
-V, --version Print version
mdsf verify docs/
Verify files are formatted
Usage: mdsf verify [OPTIONS] [INPUT]...
Arguments:
[INPUT]... Path to files and/or directories
Options:
--config <CONFIG> Path to config
--debug Log stdout and stderr of formatters
--log-level <LOG_LEVEL> [possible values: trace, debug, info, warn, error, off]
--threads <THREADS> Amount of threads to use. Defaults to 0 (auto)
-h, --help Print help
-V, --version Print version
The default configuration of mdsf
aims to as sane as possible. For that reason the default formatter for each language is the one most people have installed.
If you are interested in customizing which formatter is run, you can create a new mdsf
configuration file by running
mdsf init
mdsf
supports running multiple formatters on the save code snippet.
{
"languages": {
// Only run `ruff` on Python snippets,
"python": "ruff:format",
// Run `usort` on file and then `black`
"python": ["usort", "black"],
// Run `usort`, if that fails run `isort`, finally run `black`
"python": [["usort", "isort"], "black"],
// Formatters listed under "*" will be run on any snippet.
"*": ["typos"],
// Formatters listed under "_" will only be run when there is not formatter configured for the file type OR globally ("*").
"_": "prettier"
}
}
Note
mdsf is not a package manager.
Only tools that are already installed will be used.
mdsf
currently supports 216 commands. Feel free to open an issue/pull-request if your favorite tool is missing! 😃
Name | Command |
---|---|
alejandra |
alejandra --quiet PATH |
ameba |
ameba --fix PATH |
asmfmt |
asmfmt -w PATH |
astyle |
astyle --quiet PATH |
auto-optional |
auto-optional PATH |
autocorrect |
autocorrect --fix PATH |
autoflake |
autoflake --quiet --in-place PATH |
autopep8 |
autopep8 --in-place PATH |
beancount-black |
bean-black PATH |
beautysh |
beautysh PATH |
bibtex-tidy |
bibtex-tidy -m PATH |
bicep:format |
bicep format PATH |
biome:check |
biome check --write PATH |
biome:format |
biome format --write PATH |
biome:lint |
biome lint --write PATH |
black |
black --quiet PATH |
blade-formatter |
blade-formatter --write PATH |
blue |
blue --quiet PATH |
bpfmt |
bpfmt -w PATH |
brittany |
brittany --write-mode=inplace PATH |
brunette |
brunette --quiet PATH |
bsfmt |
bsfmt PATH --write |
bslint |
bslint --fix PATH |
buf:format |
buf format --write PATH |
buildifier |
buildifier PATH |
cabal-fmt |
cabal-fmt --inplace PATH |
cabal-prettify |
cabal-prettify PATH |
cabal:format |
cabal format PATH |
caddy:fmt |
caddy fmt PATH -w |
caramel:fmt |
caramel fmt PATH |
clang-format |
clang-format -i PATH |
clang-tidy |
clang-tidy --fix PATH |
cljfmt:fix |
cljfmt fix PATH |
cljstyle |
cljstyle fix PATH |
codespell |
codespell PATH --check-hidden --write-changes |
crlfmt |
crlfmt -w PATH |
crystal:format |
crystal tool format PATH |
csharpier |
dotnet csharpier PATH |
css-beautify |
css-beautify -r --type css -f PATH |
csscomb |
csscomb -t PATH |
d2:fmt |
d2 fmt PATH |
dart:fix |
dart fix --apply PATH |
dart:format |
dart format PATH |
dcm:fix |
dcm fix PATH |
dcm:format |
dcm format PATH |
deno:fmt |
deno fmt --quiet PATH |
deno:lint |
deno lint --fix PATH |
dfmt |
dfmt -i PATH |
dhall |
dhall format PATH |
djade |
djade PATH |
djlint |
djlint PATH --reformat |
docformatter |
docformatter --in-place PATH |
dockfmt |
dockfmt fmt -w PATH |
docstrfmt |
docstrfmt PATH |
doctoc |
doctoc PATH |
dotenv-linter:fix |
dotenv-linter fix PATH |
dprint:fmt |
dprint fmt PATH |
easy-coding-standard |
ecs check PATH --fix --no-interaction |
efmt |
efmt -w PATH |
elm-format |
elm-format --elm-version=0.19 --yes PATH |
erb-formatter |
erb-format PATH --write |
erlfmt |
erlfmt -w PATH_STRING |
eslint |
eslint --fix PATH |
fantomas |
fantomas PATH |
fish_indent |
fish_indent -w PATH |
fixjson |
fixjson -w PATH |
floskell |
floskell PATH |
fnlfmt |
fnlfmt PATH |
forge:fmt |
forge fmt PATH |
fourmolu |
fourmolu -i PATH |
fprettify |
fprettify PATH |
gci |
gci write --skip-generated --skip-vender PATH |
gdformat |
gdformat PATH |
gersemi |
gersemi -i -q PATH |
gleam:format |
gleam format PATH |
gluon:fmt |
gluon fmt PATH |
gofmt |
gofmt -w PATH |
gofumpt |
gofumpt -w PATH |
goimports-reviser |
goimports-reviser -format PATH |
goimports |
goimports -w PATH |
golines |
golines -w PATH |
google-java-format |
google-java-format -i PATH |
grain:format |
grain format PATH -o PATH |
haml-lint |
haml-lint --auto-correct PATH |
hfmt |
hfmt -w PATH |
hindent |
hindent PATH |
hlint |
hlint --refactor -i PATH |
html-beautify |
html-beautify -r --type html -f PATH |
htmlbeautifier |
htmlbeautifier PATH |
imba:fmt |
imba fmt -f PATH |
isort |
isort --quiet PATH |
joker |
joker --format --write PATH |
js-beautify |
js-beautify -r --type js -f PATH |
json5format |
json5format -r PATH |
jsona:format |
jsona format PATH |
jsona:lint |
jsona lint PATH |
jsonlint |
jsonlint -i PATH |
jsonnetfmt |
jsonnetfmt -i PATH |
juliaformatter.jl |
julia -E using JuliaFormatter;format_file(\"\") |
just |
just --fmt --unstable --justfile PATH |
kcl:fmt |
kcl fmt PATH |
kdlfmt |
kdlfmt format PATH |
kdoc-formatter |
kdoc-formatter --quiet PATH |
ktfmt |
ktfmt --format --log-level=error PATH |
ktlint |
ktlint --format --log-level=error PATH |
kulala-fmt |
kulala-fmt PATH |
leptosfmt |
leptosfmt --quiet PATH |
liquidsoap-prettier |
liquidsoap-prettier --write PATH |
luaformatter |
lua-format -i PATH |
markdownfmt |
markdownfmt -w PATH |
markdownlint-cli2 |
markdownlint-cli2 --fix PATH |
markdownlint |
markdownlint --fix PATH |
markuplint |
markuplint --fix PATH |
mdformat |
mdformat PATH |
mdslw |
mdslw PATH |
misspell |
misspell -w PATH |
mix:format |
mix format PATH |
mojo:format |
mojo format -q PATH |
nginxbeautifier |
nginxbeautifier PATH |
nickel:format |
nickel format PATH |
nimpretty |
nimpretty PATH |
nixfmt |
nixfmt PATH |
nixpkgs-fmt |
nixpkgs-fmt PATH |
nph |
nph PATH |
npm-groovy-lint |
npm-groovy-lint --format PATH |
ocamlformat |
ocamlformat --ignore-invalid-option --inplace --enable-outside-detected-project PATH |
ocp-indent |
ocp-indent --inplace PATH |
opa:fmt |
opa fmt PATH -w |
ormolu |
ormolu --mode inplace PATH |
oxlint |
oxlint --fix PATH |
packer:fmt |
packer fmt PATH |
perltidy |
perltidy -b PATH |
pg_format |
pg_format --inplace PATH |
php-cs-fixer:fix |
php-cs-fixer fix PATH |
phpcbf |
phpcbf PATH |
phpinsights:fix |
phpinsights fix PATH --no-interaction --quiet |
pint |
pint PATH |
prettier |
prettier --embedded-language-formatting off --log-level error --write PATH |
pretty-php |
pretty-php PATH |
prettypst |
prettypst PATH |
protolint |
protolint lint -fix PATH |
ptop |
ptop PATH PATH |
puppet-lint |
puppet-lint --fix PATH |
purs-tidy |
purs-tidy format-in-place PATH |
purty |
purty --write PATH |
pycln |
pycln --no-gitignore --quiet PATH |
pyink |
pyink --quiet PATH |
pyment |
pyment -w PATH |
qmlfmt |
qmlfmt -w PATH |
raco:fmt |
raco fmt -i PATH |
refmt |
refmt --in-place PATH |
reformat-gherkin |
reformat-gherkin PATH |
reorder-python-imports |
reorder-python-imports PATH |
rescript:format |
rescript format PATH |
roc:format |
roc format PATH |
rstfmt |
rstfmt PATH |
rubocop |
rubocop --fix-layout --autocorrect --format quiet PATH |
rubyfmt |
rubyfmt -i PATH |
ruff:check |
ruff check --fix --quiet PATH |
ruff:format |
ruff format --quiet PATH |
rufo |
rufo --simple-exit PATH |
rune:fmt |
rune fmt PATH |
rustfmt |
rustfmt --edition 2021 --quiet PATH |
rustywind |
rustywind --write PATH |
scalafmt |
scalafmt --quiet --mode any PATH |
scalariform |
scalariform PATH |
shellharden |
shellharden --transform --replace PATH |
shfmt |
shfmt --write PATH |
sleek |
sleek PATH |
smlfmt |
smlfmt --force PATH |
snakefmt |
snakefmt PATH |
sql-formatter |
sql-formatter --fix PATH |
sqlfluff:fix |
sqlfluff fix --dialect ansi PATH |
sqlfluff:format |
sqlfluff format --dialect ansi PATH |
sqlfmt |
sqlfmt PATH |
sqruff |
sqruff fix PATH |
standardjs |
standard --fix PATH |
standardrb |
standardrb --fix PATH |
stylefmt |
stylefmt PATH |
stylelint |
stylelint --fix PATH |
stylish-haskell |
stylish-haskell --inplace PATH |
stylua |
stylua --verify PATH |
superhtml:fmt |
superhtml fmt PATH |
swift-format |
swift-format --in-place PATH |
swiftformat |
swiftformat --quiet PATH |
taplo |
taplo format PATH |
templ:fmt |
templ fmt PATH |
terraform:fmt |
terraform fmt -write=true PATH |
terragrunt:hclfmt |
terragrunt hclfmt --terragrunt-hclfmt-file PATH |
tlint:format |
tlint format PATH |
tofu:fmt |
tofu fmt -write=true PATH |
topiary |
topiary format PATH |
ts-standard |
ts-standard --fix PATH |
tsqllint |
tsqllint --fix PATH |
twig-cs-fixer:lint |
twig-cs-fixer lint PATH --fix --no-interaction --quiet |
typos |
typos -w --no-ignore --hidden PATH |
typstfmt |
typstfmt PATH |
typstyle |
typstyle -i PATH |
ufmt |
ufmt format PATH |
uiua:fmt |
uiua fmt PATH |
unimport |
unimport -r PATH |
usort |
usort format PATH |
v:fmt |
v fmt -w PATH |
veryl:fmt |
veryl fmt PATH |
vhdl-style-guide |
vsg -f PATH --fix |
wfindent |
wfindent PATH |
xmlformat |
xmlformat --overwrite PATH |
xmllint |
xmllint --format PATH --output PATH |
xo |
xo --fix PATH |
yamlfix |
yamlfix PATH |
yamlfmt |
yamlfmt -quiet PATH |
yapf |
yapf --in-place PATH |
yew-fmt |
yew-fmt --edition 2021 --quiet PATH |
zig:fmt |
zig fmt PATH |
ziggy:fmt |
ziggy fmt PATH |
zprint |
zprint -w PATH |
Shell completions can be generated using mdsf completions <SHELL>
.
Generate shell completion
Usage: mdsf completions <SHELL>
Arguments:
<SHELL> [possible values: bash, elvish, fish, powershell, zsh]
Options:
-h, --help Print help
-V, --version Print version
Add the following to your .bashrc
.
eval "$(mdsf completions bash)"
Add the following to your .zshrc
.
eval "$(mdsf completions zsh)"
Add the following to ~/.config/fish/config.fish
.
mdsf completions fish | source
Add the following to your PowerShell configuration (Can be found by running $PROFILE
).
Invoke-Expression (&mdsf completions powershell)
Add the following to ~/.elvish/rc.elv
.
eval (mdsf completions elvish)
mdsf was inspired by the amazing neovim formatting plugin conform.nvim.
- conform.nvim using
injected
mode. - mdformat.