如何将Slim模板文件纳入Rails stats代码统计范围?
问题:如何让
bin/rails stats正确统计Slim格式视图文件 经过多次搜索和实操验证,始终没有找到将Slim模板纳入Ruby on Rails视图代码统计的正确方案。项目中执行bin/rails stats做代码统计时,程序默认仅识别统计.erb格式的视图模板,项目实际使用的.slim格式模板完全没有被纳入统计范围,视图项统计结果全为0,命令输出如下:
% bin/rails stats +----------------------+--------+--------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+--------+--------+---------+---------+-----+-------+ | Controllers | 3245 | 1634 | 57 | 218 | 3 | 5 | | Helpers | 186 | 149 | 0 | 18 | 0 | 6 | | Jobs | 34 | 20 | 2 | 2 | 1 | 8 | | Models | 879 | 541 | 25 | 77 | 3 | 5 | | Mailers | 85 | 53 | 3 | 6 | 2 | 6 | | Channels | 46 | 28 | 3 | 4 | 1 | 5 | | Views | 0 | 0 | 0 | 0 | 0 | 0 | +----------------------+--------+--------+---------+---------+-----+-------+
此前尝试单独新增"Slim views"统计规则实现该需求,但这种配置方式会同时重复统计视图目录下的.erb模板文件,不符合统计要求。
解决方案
不要新增独立的"Slim views"统计项,直接修改Rails默认Views统计规则的文件匹配模式,将.slim后缀加入匹配范围即可,操作步骤:
- 在项目
lib/tasks目录下新建自定义rake任务文件,命名为custom_stats.rake - 写入以下配置,覆盖默认视图统计的匹配规则:
# lib/tasks/custom_stats.rake namespace :stats do task :override_view_patterns do next unless defined?(Rails::SourceAnnotationExtractor::Statistics) views_rule = Rails::SourceAnnotationExtractor::Statistics::DIRECTORIES.find { _1.first == "Views" } # 原有erb匹配规则基础上追加slim后缀,使用haml的话也可以一并加入 views_rule[1] = /\.(erb|slim|haml)$/ if views_rule end end # 在原生stats任务执行前加载自定义配置 Rake::Task["stats"].enhance ["stats:override_view_patterns"]
- 保存后重新执行
bin/rails stats,就能看到slim模板被正常统计,不会出现重复统计项,也不会重复计数erb文件。
说明
- Rails默认的Views统计规则硬编码了仅匹配
.erb后缀,直接修改原有规则的匹配正则,比新增独立统计项更合理:视图统计结果不会被拆分,也从根源避免了重复统计的问题 - 如果项目混用多种模板引擎,直接在正则里追加对应后缀即可
- 该配置通过Rake原生的
enhance方法注入逻辑,不需要修改Rails框架源码,后续升级Rails版本不会失效。
内容的提问来源于stack exchange,提问作者Fa11enAngel
相关产品推荐
相关产品推荐

