Тип Assert для завершения кода в RubyMine - PullRequest
0 голосов
/ 06 сентября 2018

Ruby не является языком статической типизации, поэтому движок завершения кода не может точно знать , какой тип будет возвращать любая функция.

Однако, иногда программист знает. Возьмите код ниже, который использует метапрограммирование, чтобы «запутать» завершение кода:

class Example
  define_method :foo do
    2 + 2
  end

  def bar
    foo_result = foo
  end
end

Статический анализатор не знает, что существует foo, поэтому он не может обеспечить завершение кода для него. Даже если foo всегда будет Integer, и мы это знаем, я получаю завершение кода только для BasicObject.

enter image description here

Есть ли способ сообщить механизму завершения кода, какой тип я знаю, что-то будет, чтобы я мог получить лучшие результаты завершения, которые просто игнорируются интерпретатором?

1 Ответ

0 голосов
/ 06 сентября 2018

Оказывается, это частично возможно, используя «Аннотации» в форме комментариев, которые задокументированы по адресу: https://www.jetbrains.com/help/ruby/using-annotations.html

Вы можете добавлять типы к неоднозначным методам или переменным следующим образом:

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

Похоже, что вы можете создать совершенно новые методы, используя этот подход, например, для методов, управляемых метапрограммированием.

...