【问题标题】:How do I prohibit a specific function call with Rubocop?如何使用 Rubocop 禁止特定的函数调用?
【发布时间】:2021-01-04 21:15:23
【问题描述】:

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

url_for 会继续存在,但是为了防止其他开发者以后不小心使用了错误的功能,不小心提供了未经代理的图片,我想在我们的项目中“禁止”使用url_for .

这可能吗?

【问题讨论】:

  • 您可以添加自定义警察 This Article 在描述实现方面做得很好。
  • 如果是Rails,你可以使用deprecate

标签: ruby rubocop


【解决方案1】:

只需 Grep 即可调用方法

虽然您当然可以write your own 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 或自定义警察的维护开销,除非您获得比描述的用例更多的收益在你原来的问题中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2021-12-20
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多