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日 |
#182 在 Web编程
2,024 每月下载量
110KB
2.5K SLoC
leptosfmt
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