prettyplease
quote
prettyplease | quote | |
---|---|---|
8 | 3 | |
588 | 1,231 | |
- | - | |
7.7 | 7.3 | |
22 days ago | 21 days ago | |
Rust | Rust | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
prettyplease
-
Practical Procedural Macros in Rust
Nice blog, another very useful crate to use when working with proc-macro is https://github.com/dtolnay/prettyplease, for formatting generated code (very useful for debugging!), that does not bails out like rustfmt sometimes does.
-
Minimalist Rust formatter as an alternative to rustfmt?
I doubt you would want to actually use this human-consumed code, but an interesting alternative that I know of is David Tolnay's prettyplease. It tries to be lightweight and consistent for auto-generated code.
-
Gene Michaels: Alternative Rust code formatter
btw there is also https://github.com/dtolnay/prettyplease
-
Anyone have lot's of problems with rustfmt?
This, I also have a bunch of files that seem to break rustfmt. Ime, it doesn't exactly refuse to format the whole file but it's picky in what and to what degree it chooses to format, basically anything flying in the complex blocks. I have run into prettyplease but I'm yet to actually try it on these offenders.
-
Hey Rustaceans! Got an easy question? Ask here (5/2022)!
prettyplease
-
Is generating code from JSON a good macro use case?
Optionally, format the generated code to make it more readable. You can run rustfmt on the output file, or use prettyplease before writing the file.
- Prettyp lease: A minimal Syn syntax tree pretty- printer
- prettyplease: A minimal Syn syntax tree pretty-printer
quote
-
C++ vs. Rust Build Times
A surprising source of slow compile times can be declarative macros in Rust [0].
I believe the core of the problem is that it has to reparse the code to pattern match for the macro.
One egregious patter is tt-munchers [1] where your macro is implemented recursively, requiring it to reparse the source on each call [2].
In one of my projects, someone decided to wrap a lot of core functions in simple macros (ie nt tt-munchers) to simplify the signatures. Unlike most macros which are used occasionally and have small inputs, this was a lot of input. When I refactored the code, I suspect dropping the macros is the reason CI times were cut in half and a clean `cargo check` went from 3s to 0.5s.
[0]: https://nnethercote.github.io/2022/04/12/how-to-speed-up-the...
[1]: https://veykril.github.io/tlborm/decl-macros/patterns/tt-mun...
[2]: https://github.com/dtolnay/quote/blob/31c3be473d0457e29c4f47...
-
Is generating code from JSON a good macro use case?
In the build.rs, call your code generation function (probably in a separate crate added in build-dependencies). This function will read your input files, and use something like quote to generate code.
-
Any good resources for learning Rust macros?
Or you can pair them with crates like syn, and quote for quasi-quoting, and then it's easy to make transformations on the AST of Rust input code. A lot of libraries do this for code-generation and hiding away a lot of complexity (example wasm-bindgen).
What are some alternatives?
prettier-plugin-rust - Prettier Rust is an opinionated code formatter that autocorrects bad syntax.
cargo-expand - Subcommand to show result of macro expansion
tokio-tungstenite - Future-based Tungstenite for Tokio. Lightweight stream-based WebSocket implementation
proc-macro-workshop - Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019]
rosetta - Easy to use Rust i18n library based on code generation
Bytecode - A Rust proc-macro crate which derives functions to compile and parse back enums and structs to and from a bytecode representation
topiary
component-keycloak - Commodore Component for Keycloak
darling - A Rust proc-macro attribute parser
rust-fsm - Finite state machine framework for Rust with readable specifications
hickory - Command line tool for scheduling Python scripts
syn - Parser for Rust source code