首页 > 解决方案 > 如何使用 Rubocop 禁止特定的函数调用?

问题描述

我有一个 Rails 项目,我们正在迁移到使用图像代理来提供我们的 ActiveStorage 图像。作为此迁移的一部分,我们需要更改 to 的所有现有url_for()用法ix_image_url()

url_for将继续存在,但为了防止其他开发人员将来意外使用错误的功能并意外提供未经代理的图像,我想url_for在我们的项目中“禁止”使用。

这可能吗?

标签: rubyrubocop

解决方案


只是方法调用的 Grep

虽然您当然可以编写自己的 cop,但您定义的用例似乎更适合在持续集成服务器上完成的简单 grep。例如:

if egrep -Rn '\burl_for' '/path/to/source/tree'; then
  echo 'error: use ix_image_url instead of url_for' >&2
  exit 1
fi

可以作为 CI 管道中的构建或测试步骤运行。它将打印有问题的行以及文件名和行号,并将您的“如何修复它”自定义消息发送到标准错误以报告构建失败。

请注意,像这样的 shell 命令可以在大多数 CI 实现中运行,但如果这对您更有效,您当然可以将其体现在 cop 中或将其内联到您的管道中(例如 Jenkins 作业的 Groovy 代码)。但是,KISS 原则主张使实现尽可能简单,因此我会避免使用 AST 或自定义警察的维护开销,除非您获得比描述的用例更多的收益在你原来的问题中。


推荐阅读