- Notifications
You must be signed in to change notification settings - Fork8
Prettier Rust is an opinionated code formatter that autocorrects bad syntax.
License
jinxdash/prettier-plugin-rust
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The massively popularPrettier code formatter, now withRust support!
Get Started: InstallVSCode ExtensionPrettier - Code formatter (Rust)
What usually happens once people start using Prettier is that they realize how much time and mental energy they actually spend formatting their code. No matter how incomplete or broken the code you're working on is, with the Prettier Editor Extension you can always just press the
Format Document
key binding and *poof*, the code snaps right into place.
- Beautiful, uniform and consistent — Prettier is strongly opinionated, with no style options.
- There when you need it the most — Prettier can format code that won't compile(e.g. missing annotations)
- Speed up the day-to-day — Prettier auto-fixes common syntax errors(e.g. missing semicolons, blocks, parentheses)
> input | > formatted |
---|---|
constLEET =1337/// My WIP code draft#![feature(crate_visibility_modifier)]asynccratefnfoo(arg){ arg.0 *=3.14 +LEET&1337 arg.1(|b, c| ->T&c).await} | constLEET =1337;#![feature(crate_visibility_modifier)]/// My WIP code draftcrateasyncfnfoo(arg){ arg.0 *=(3.14 +LEET)&1337;(arg.1)(|b, c| ->T{&c}).await} |
Formatting succeeds and fixes 7 syntax errors.
https://prettier.io/docs/en/configuration
// .prettierrc.json{"useTabs":false,"tabWidth":4,"printWidth":100,"endOfLine":"lf",// -- Not supported yet --// "trailingComma": "es5",// "embeddedLanguageFormatting": "auto",// Example override"overrides":{"files":["tests/*.rs"],"options":{"printWidth":80}}}
See alternative configuration using a TOML file
# .prettierrc.tomluseTabs =falsetabWidth =4printWidth =100endOfLine ="lf"# -- Not supported yet --# trailingComma = "es5"# embeddedLanguageFormatting = "auto"# Example overrideoverrides = [ {files = ["tests/*.rs"],options = {printWidth =80 } }]
- Add
// prettier-ignore
or#[rustfmt::skip]
above it - Add
#![rustfmt::skip]
inside blocks or files - Create a
.prettierignore
file to glob-match files, like.gitignore
- Curlies
!{}
format like blocks,![]
and!()
like comma-separated expressions - Formatting inside macro invocations is more conservative, since macros can be token-sensitive
- Popular/built-in macros with original syntax rules get custom formatting (e.g.
matches!
,if_chains!
...)[Not implemented yet] - Macro Declarations are only partially formatted (the transformed part isn't yet, but could be in the future)
- Macros that can't be formatted are silently ignored
Yes! Prettier Rust formats most nightly features. Support depends onjinx-rust
.
Easy install + auto-updates
VSCode | Search and install
Prettier - Code formatter (Rust)
[direct link]Request your favorite editor:[file an issue]
RequiresNodeJS +Prettier Extension (built-in Jetbrains IDEs)
npm install --global prettier-plugin-rust prettier
Restart IDE after installing.
To update (manual only!!):npm upgrade --global prettier-plugin-rust prettier
To check installed version:npm ls -g --depth=0 prettier-plugin-rust prettier
To check latest version:npm info prettier-plugin-rust version
RequiresNodeJS
Install
prettier
andprettier-plugin-rust
globallynpm install --global prettier-plugin-rust prettier
Use theprettier CLI to format rust files. E.g. run:
prettier --write**/*.rs
RequiresNodeJS
Install
prettier
andprettier-plugin-rust
in the projectnpm install --save-dev prettier-plugin-rust prettier
Link to the plugin's location in your prettier config:
"plugins": ["./node_modules/prettier-plugin-rust"]
Use theprettier CLI to format rust files. E.g. run:
npx prettier --write**/*.rs
You can also use the plugin programmatically:
importprettierfrom"prettier";import*asrustPluginfrom"prettier-plugin-rust";prettier.format(code,{plugins:[rustPlugin]});
No crate yet. Above options are available in the meantime.
It's all about the Editor Integration — Having the ability to format your code while you work on it really makes for a great developer experience, and autocompletion for Rust's strict syntax is such a massive time save. Once you've tried the extension there really is no coming back.
All-in-all the difference in code style is minimal, so adopting Prettier Rust won't drastically change your codebase. The real downside is the harsher integration with the Rust ecosystem, but it'll get better eventually.
Point by point:
- the extension streamlines your work in the editor
- it can format code that won't compile(e.g. code with missing type annotations)
- it autocorrects syntax errors(e.g. missing semicolons, blocks, parentheses...)
- it is strongly opinionated with no style options, so code is uniform across projects.
- it produces more readable code in some cases (e.g. condition chains, compound expressions, patterns)
- it supports everything out-of-the-box (e.g. nightly features, macros)
- it consistently prints code in the same way, whereas Rustfmt preserves arbitrary style at places
- it can be used for other languages (e.g. markdown, html, typescript, java, python, ruby)
- it formats language embeds. So rust code blocks in non-rust files (e.g. markdown), and supported languages in rust doc comments.[NOTE: the latter is not yet implemented]
- the extension streamlines your work in the editor
Unfortunately Rustfmt cannot implement those features by design.
Rustfmt parses code with rustc. Rustc is strict and unforgiving as it always assumes code is at its "final version", thus every slight deviation from the accepted syntax crashes the parser. There's also that rustc has many lint-like checks within the parser. The intention is to save work for the compiler down the line, unfortunately it also means that rustc sometimes fails to parse syntactically correct code.
Prettier Rust however is based onjinx-rust. Jinx-rust is built specifically for Rust tooling. Hence it's designed to tolerate a wide range of syntax errors, supports missing nodes and sometimes even infers user intent (e.g. Javascript's
!==
)Jinx-rust has a littleplaidoyer in its readme arguing for Rust Toolingnot to use the official rustc parserhere.
The Prettier Rust syntax autocorrection feature is intended to be an adaptation of how Prettier Typescript autocorrects javascript code with missing semicolons.
You can effectively think of Prettier Rust syntax autocorrection as auto-applying the Rust compiler's suggested syntax fixes automatically (e.g. "semicolon missing here", "parenthesize this" or "add a block around that")
Otherwise if your codebase compiles, then Prettier Rust is just a formatter like any other. It won't change the syntax of valid rust code. Moreover, it doesn't reorganize imports, split comments or combine attributes.
Rest assured, Prettier Rust actually does not take style decisions on its own. Prettier Rust is essentially a 1:1 adaptation of Prettier Typescript, hence the opinions it implements have been battle tested and agreed-upon bymillions and millions of users already.
About
Prettier Rust is an opinionated code formatter that autocorrects bad syntax.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.