Skip to content

A formatter for the leptos view! macro

License

Notifications You must be signed in to change notification settings

chrisp60/leptosfmt

This branch is 77 commits behind bram209/leptosfmt:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dfc05ea · Oct 10, 2023
Jun 29, 2023
Oct 10, 2023
Jul 5, 2023
Oct 10, 2023
Oct 10, 2023
Mar 21, 2023
Oct 10, 2023
Oct 10, 2023
Oct 10, 2023
Mar 23, 2023
Mar 23, 2023
Oct 10, 2023
Sep 25, 2023
May 29, 2023
Mar 23, 2023

Repository files navigation

leptosfmt

crates.io build security discord

A formatter for the leptos view! macro

All notable changes are documented in: CHANGELOG.md

Install

cargo install leptosfmt

or for trying out unreleased features:

cargo install --git https://github.com/bram209/leptosfmt.git

Usage

Usage: leptosfmt [OPTIONS] [INPUT_PATTERNS]...

Arguments:
  [INPUT_PATTERNS]...  A space separated list of file, directory or glob

Options:
  -m, --max-width <MAX_WIDTH>      Maximum width of each line
  -t, --tab-spaces <TAB_SPACES>    Number of spaces per tab
  -c, --config-file <CONFIG_FILE>  Configuration file
  -s, --stdin                      Format stdin and write to stdout
  -r, --rustfmt                    Format with rustfmt after formatting with leptosfmt (requires stdin)
  -q, --quiet                      
      --check                      Check if the file is correctly formatted. Exit with code 1 if not
  -h, --help                       Print help
  -V, --version                    Print version

Using with Rust Analyzer

You can set the rust-analyzer.rustfmt.overrideCommand setting.

  "rust-analyzer.rustfmt.overrideCommand": ["leptosfmt", "--stdin", "--rustfmt"]

And to configure rustfmt, place a rustfmt.toml file in the root of your project:

edition = "2021"
# other config...

Note: For VSCode users, I recommend to use workpsace settings (CMD + shift + p -> Open workspace settings), so that you can only configure leptosfmt for workpsaces that are using leptos. For Neovim users, I recommend using neoconf.nvim for managing project-local LSP configuration.

Configuration

You can configure all settings through a leptosfmt.toml file.

max_width = 100 # Maximum width of each line
tab_spaces = 4 # Number of spaces per tab
indentation_style = "Auto" # "Tabs", "Spaces" or "Auto"
newline_style = "Auto" # "Unix", "Windows" or "Auto"
attr_value_brace_style = "WhenRequired" # "Always", "AlwaysUnlessLit", "WhenRequired" or "Preserve"

To see what each setting does, the see configuration docs

Examples

Single file

Format a specific file by name

leptosfmt ./examples/counter/src/lib.rs

Current directory

Format all .rs files within the current directory

leptosfmt .

Directory

Format all .rs files within the examples directory

leptosfmt ./examples

Glob

Format all .rs files ending with _test.rs within the examples directory

leptosfmt ./examples/**/*_test.rs

A note on non-doc comments

Currently this formatter does not support non-doc comments in code blocks. It uses a fork of prettyplease for formatting rust code, and prettyplease does not support this. I would like to not diverge this fork too much (so I can easily keep in sync with upstream), therefore I didn't add non-doc comment support in my prettyplease fork for now. This means that you can use non-doc comments throughout your view macro, as long as they don't reside within code blocks.

Pretty-printer algorithm

The pretty-printer is based on Philip Karlton’s Mesa pretty-printer, as described in the appendix to Derek C. Oppen, “Pretty Printing” (1979), Stanford Computer Science Department STAN-CS-79-770, http://i.stanford.edu/pub/cstr/reports/cs/tr/79/770/CS-TR-79-770.pdf. This algorithm's implementation is taken from prettyplease which is adapted from rustc_ast_pretty.

The algorithm takes from an input stream of length n and an output device with margin width m, the algorithm requires time O(n) and space O(m). The algorithm is described in terms of two parallel processes; the first scans the input stream to determine the space required to print logical blocks of tokens; the second uses this information to decide where to break lines of text; the two processes communicate by means of a buffer of size o(m). The algorithm does not wait for the entire stream to be input, but begins printing as soon as it has received a linefull of input.

About

A formatter for the leptos view! macro

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%