RubyMine 中代码完成的断言类型

Assert type for code completion in RubyMine

Ruby 不是一种静态类型的语言,因此代码完成引擎不可能确切地知道任何函数将return.

不过,有时候程序员是知道的。采取下面的代码,它使用元编程来 'confuse' 代码完成:

class Example
  define_method :foo do
    2 + 2
  end

  def bar
    foo_result = foo
  end
end

静态分析器不知道 foo 存在,因此无法为其提供代码完成。尽管 foo 永远是 Integer 并且我们知道这一点,但我只获得 BasicObject.

的代码完成

有没有办法告诉代码完成引擎我知道什么类型,以便我获得更好的完成结果,而解释器会简单地忽略它?

事实证明,这 部分 可以使用 "Annotations" 的评论形式,记录在:https://www.jetbrains.com/help/ruby/using-annotations.html

您可以像这样向不明确的方法或变量添加类型:

# @return [String]
def mystery_method
    # @type [Integer]
    foo = nil
end

虽然您似乎无法使用这种方法创建全新的方法,例如元编程驱动的方法。