#web-framework #formatter #view #macro #cli #format #format-file

app leptosfmt

Leptos Web框架的视图宏格式化CLI工具

18个版本

0.1.30 2024年7月23日
0.1.18 2023年12月22日
0.1.17 2023年10月10日
0.1.12 2023年7月31日
0.1.4 2023年3月27日

#182Web编程

Download history 438/week @ 2024-05-04 460/week @ 2024-05-11 426/week @ 2024-05-18 392/week @ 2024-05-25 432/week @ 2024-06-01 294/week @ 2024-06-08 494/week @ 2024-06-15 625/week @ 2024-06-22 490/week @ 2024-06-29 285/week @ 2024-07-06 364/week @ 2024-07-13 637/week @ 2024-07-20 618/week @ 2024-07-27 419/week @ 2024-08-03 436/week @ 2024-08-10 478/week @ 2024-08-17

2,024 每月下载量

MIT/Apache

110KB
2.5K SLoC

leptosfmt

crates.io build security discord

leptos视图宏的格式化工具

所有显著更改均在以下文档中记录:CHANGELOG.md

安装

cargo安装leptosfmt

或尝试未发布的功能

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

使用方法

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)
      --override-macro-names <OVERRIDE_MACRO_NAMES>...
          Override formatted macro names
  -e, --experimental-tailwind
          Format attributes with tailwind
      --tailwind-attr-names <TAILWIND_ATTR_NAMES>...
          Override attributes to be formatted with tailwind [default: class]
  -q, --quiet

      --check
          Check if the file is correctly formatted. Exit with code 1 if not
  -h, --help
          Print help
  -V, --version
          Print version

与Rust Analyzer一起使用

您可以通过设置 rust-analyzer.rustfmt.overrideCommand

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

并且 必须 配置 rustfmt 以使用正确的版本,在项目根目录中放置一个 rustfmt.toml 文件

edition = "2021"
# (optional) other config...

注意:对于VSCode用户,我建议使用工作区设置(CMD + shift + p -> 打开工作区设置),这样您可以为使用leptos的工作区配置 leptosfmt。对于Neovim用户,我建议使用 neoconf.nvim 来管理项目本地的LSP配置。

基于不稳定目录的rust-analyzer配置

配置 rust-analyzer 以使用 leptosfmt 的另一种方法是使用基于目录的 rust-analyzer 配置。

为此,在项目根目录中创建一个名为 rust-analyzer.toml 的文件,内容如下

[rustfmt] 
overrideCommand = ["leptosfmt", "--stdin", "--rustfmt"]
# (optional) other config...

此设置rust-analyzer的方法对任何使用 rust-analyzer 格式化rust代码的编辑器都是中立的

注意:此功能目前不稳定,无法保证此功能在不同版本之间将继续工作。您必须使用 rust-analyzer 的最新版本(2024-06-10 或更高版本)。

配置

您可以通过一个 leptosfmt.toml 文件来配置所有设置。

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"
macro_names = [ "leptos::view", "view" ] # Macro names which will be formatted
closing_tag_style = "Preserve" # "Preserve", "SelfClosing" or "NonSelfClosing"

# Attribute values can be formatted by custom formatters
# Every attribute name may only select one formatter (this might change later on)
[attr_values]
class = "Tailwind" # "Tailwind" is the only attribute value formatter available for now

要查看每个设置的作用,请参阅 配置文档

示例

单个文件

通过名称格式化特定文件

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

当前目录

格式化当前目录下所有的 .rs 文件

leptosfmt.

目录

格式化 examples 目录下所有的 .rs 文件

leptosfmt./examples

glob

格式化 examples 目录下所有以 _test.rs 结尾的 .rs 文件

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

关于非文档注释的说明

目前,此格式化工具不支持代码块中的非文档注释。它使用 prettyplease 的一个分支来格式化 Rust 代码,而 prettyplease 不支持这种格式。我不想对这个分支进行太大的改动(这样我可以更容易地与上游同步),因此现在还没有在我的 prettyplease 分支中添加对非文档注释的支持。这意味着你可以在你的视图宏中使用非文档注释,只要它们不在代码块中。

更多背景信息: prettyplease 使用 syn 来解析 Rust 语法。根据 https://doc.rust-lang.net.cn/reference/comments.html#non-doc-comments,非文档注释被解析器 视为一种空白形式syn 基本上忽略/跳过这些注释,并且不包括它们在语法树中。

美化打印算法

美化打印器基于 Philip Karlton 的 Mesa 美化打印器,如 Derek C. Oppen 的“美化打印”(1979年)附录中所述,Stanford 计算机科学系 STAN-CS-79-770,http://i.stanford.edu/pub/cstr/reports/cs/tr/79/770/CS-TR-79-770.pdf。此算法的实现取自 prettyplease,该实现是从 rustc_ast_pretty 调整的。

该算法从一个长度为 n 的输入流和一个宽度为 m 的输出设备中提取信息,该算法需要时间 O(n) 和空间 O(m)。该算法用两个并行过程来描述;第一个扫描输入流以确定打印逻辑块所需的空格;第二个使用这些信息来决定文本行的断点;两个过程通过大小为 o(m) 的缓冲区进行通信。该算法不需要等待整个流被输入,而是在接收到一行输入后立即开始打印。

依赖关系

~8–17MB
~220K SLoC