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
相关产品推荐
相关产品推荐

