class 名称中的双冒号和 RubyMine 对短名称的投诉

Double colon in class name and RubyMine complaints about short name

我有以下自动生成的控制器 conrollers/v2/base_controller.rb.

class V2::BaseController < ApplicationController
end

它是由 Versionist gem 生成的。我正在尝试制作一个继承自 V2::BaseController 的控制器。我写了

class V2::MainController < V2::BaseController
  def index
    render :text => 'abcde'
  end
end

它工作正常,我可以在浏览器中看到我的文本。但是,RubyMine IDE 抱怨 V2::MainController 中的 class 名称 V2 太短,我应该重命名 class.

我很困惑,因为我认为 V2:: 意味着我们在 V2 模块中定义了一个新的 class。如果我错了,那么为什么 RubyMine 会忽略与 BaseController 相同的问题?

UPD:RubyMine 投诉

不,这只是您作为程序员的通知。简短的变量名通常含糊不清且不易透露意图,因此这是一项很好的检查,但绝对不是必需的。

我认为 V2 非常适合您的情况,但如果您仍然担心,只需将其重命名为 Version2 即可让 Rubymine 满意。我不知道它是否仍然与您使用的 gem 兼容。 看来 Rubymine 不喜欢

But why does IDE show the notice only for MainController?

这里我可以考虑2个选项:

  1. 这是 RubyMine 索引中的一些小故障。或者,也许这样做是为了不向您的文件树发送带有红色下划线的垃圾邮件(一个实际上足以让您注意到这一点)。尝试重新启动 IDE 并查看它是否消失。
  2. RubyMine 找不到 V2 模块的定义,因为 class V2::MainController 中的 V2 是对某处已定义模块的引用,而不是其定义。解决方案:创建空模块并查看警告是否消失。

app/controllers/v2.rb

module V2
end

Ruby我的使用 reek 进行代码气味检测。

它给你的警告叫做 Uncommunicative Module Name

Uncommunicative Module Name checks for:

  1. 1-character names
  2. any name ending with a number

在您的案例中,警告是由 V2 中的 2 引起的。即使 Version2 也是一样。

但这实际上只是一个建议。 Ruby 使用此代码可以正常工作。