You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang技术:如何正确为rebar3项目接入Elvis代码风格检查?

为Rebar3 Erlang项目接入Elvis代码风格检查(替代老旧的rebar3_lint)

我之前也碰到过rebar3_lint插件的问题——Elvis版本太老,报错信息还不够直观。后来换成直接把elvis_core作为测试依赖引入,配合Rebar3的前置钩子来调用,体验好了很多,分享下具体的实现方式:

1. 添加elvis_core测试依赖

先在rebar.config的test profile里加上elvis_core的依赖,直接拉取最新的master分支,保证用的是当前最新版本:

{profiles, [
    {test, [
        {deps, [
            {elvis_core, {git, "https://github.com/inaka/elvis_core", {branch, "master"}}}
        ]}
    ]}
]}.

2. 配置编译前置钩子调用Elvis

接着在同一个test profile里添加编译前置钩子,让Elvis在编译前自动执行代码检查。这里的关键是要把测试依赖的ebin目录加入代码路径,确保Erlang能找到Elvis的模块:

{profiles, [
    {test, [
        {deps, [
            {elvis_core, {git, "https://github.com/inaka/elvis_core", {branch, "master"}}}
        ]},
        {pre_hooks, [
            {compile, "erl -pa _build/test/lib/*/ebin -eval 'elvis:rock().' -s init stop"}
        ]}
    ]}
]}.

拆解下这条命令的作用:

  • -pa _build/test/lib/*/ebin:把所有测试依赖的ebin路径都加到Erlang的代码搜索路径里,确保能加载到elvis_core的beam文件
  • -eval 'elvis:rock().':调用Elvis的核心检查函数,触发代码风格扫描
  • -s init stop:检查完成后自动退出Erlang虚拟机,无需手动关闭

3. 定义Elvis检查规则

最后别忘了在项目根目录创建elvis.config文件,自定义你的代码风格检查规则,示例配置如下:

[
    {elvis, [
        {config, [
            {dirs, ["src", "test"]}, % 指定要检查的目录
            {filter, "*.erl"},       % 只扫描Erlang源码文件
            {rules, [
                {elvis_style, line_length, #{limit => 120}},
                {elvis_style, no_tabs, #{}},
                {elvis_style, no_trailing_whitespace, #{}}
                % 可以按需添加更多规则,比如变量命名规范、函数长度限制等
            ]}
        ]}
    ]}
].

运行检查

现在只要执行rebar3 as test compile,Elvis就会在编译之前自动运行代码风格检查,报错信息比rebar3_lint清晰很多,定位问题也更方便。

内容的提问来源于stack exchange,提问作者Rodion Gorkovenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:30:55