Erlang 代码格式化工具 erlfmt 使用教程
erlfmt An automated code formatter for Erlang 项目地址: https://gitcode.com/gh_mirrors/er/erlfmt
1. 项目介绍
erlfmt 是一个针对 Erlang 语言的代码格式化工具,它通过自动化代码格式化过程,让开发团队可以专注于代码的功能实现,而不是外观。erlfmt 的目标是提供最少配置,以实现代码风格的一致性,同时尊重原始代码中的意图,通过上下文提示来生成美观的代码。
2. 项目快速启动
安装
erlfmt 需要 Erlang/OTP 21 或更高版本,并且支持所有平台。以下是如何使用 rebar3 插件快速启动 erlfmt 的步骤:
首先,确保你的项目中已经安装了 rebar3。然后在 rebar.config
文件中添加以下配置:
{project_plugins, [erlfmt]}.
使用
配置完成后,可以通过以下命令格式化项目中的所有 Erlang 文件:
$ rebar3 fmt
如果你希望在持续集成(CI)过程中检查代码格式,可以使用以下命令:
$ rebar3 fmt --check
escript 使用
如果你想在没有 rebar 的情况下使用 erlfmt,可以构建一个独立的 escript 文件:
$ rebar3 as release escriptize
构建完成后,可以使用以下命令运行 erlfmt:
$ _build/release/bin/erlfmt -w './otp/lib/*/{src,include}/*.{erl,hrl}'
3. 应用案例和最佳实践
代码风格
erlfmt 强制执行一致的代码风格,通过解析你的代码并重新打印,同时强制一个选定的最大行长度。例如,以下超过长度限制的代码行:
scenario(dial_phone_number(), ring(), hello(mike), hello(joe), hello(robert), system_working(), seems_to_be()).
将被自动重新格式化为垂直样式:
scenario(
dial_phone_number(),
ring(),
hello(mike),
hello(joe),
hello(robert),
system_working(),
seems_to_be()
).
手动干预
在某些情况下,格式化规则可能会导致代码看起来不错,但不是完美。这时可能需要一些手动干预来帮助格式化器。例如,给定以下代码:
split_tokens(
[{TokenType, Meta, TokenValue} | Rest],
TokenAcc,
CommentAcc
) ->
split_tokens(
Rest,
[{TokenType, token_anno(erl_anno:to_term(Meta), #{}), TokenValue} | TokenAcc],
CommentAcc
).
由于超过了行长度限制,格式化器将生成以下代码:
split_tokens(
[{TokenType, Meta, TokenValue} | Rest],
TokenAcc,
CommentAcc
) ->
split_tokens(
Rest,
[{TokenType, token_anno(erl_anno:to_term(Meta), #{}), TokenValue} | TokenAcc],
CommentAcc
).
但可能更希望提取一个变量,并允许调用仍然在单行中渲染,例如:
split_tokens(
[{TokenType, Meta, TokenValue} | Rest],
TokenAcc,
CommentAcc
) ->
Token = {
TokenType,
token_anno(erl_anno:to_term(Meta), #{}),
TokenValue
},
split_tokens(
Rest,
[Token | TokenAcc],
CommentAcc
).
4. 典型生态项目
erlfmt 可以与多种 Erlang 生态项目配合使用,以下是一些典型的集成案例:
- Visual Studio Code: 通过 Erlang Formatter 扩展支持 erlfmt。
- doom emacs: 可以通过 rebar3_format 使用 erlfmt。
以上是 erlfmt 的基本使用教程,希望对您的 Erlang 项目开发有所帮助。
erlfmt An automated code formatter for Erlang 项目地址: https://gitcode.com/gh_mirrors/er/erlfmt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考