Подтвердить что ты не робот

Могу я сказать или намекнуть RubyMine, какой тип является локальной или переменной экземпляра?

Я пытаюсь использовать быстрые документы RubyMine и завершение кода. Мне было приятно узнать, насколько хорошо он интегрировал комментарии в стиле YARD:

# @param [Numeric] width
# @param [Array<String>] values
# @return [Widget]      
def foo(width, values)

... эти комментарии отлично подходят для параметров, возвращаемых типов, даже типизированных коллекций. Но я не могу найти похожие теги для экземпляра или локальные переменные, и я уверен, что в Ruby нет никакого каста-типа (я упоминал, что я новичок в этом?)

Есть ли способ определить RubyMine для типов переменных локального и/или экземпляра?

4b9b3361

Ответ 1

Похоже, что это предстоящий, основанный на недавнем комментарии, опубликованном к трекеру проблем, на который ссылается Мэтт Коннолли: http://youtrack.jetbrains.com/issue/RUBY-9142#comment=27-787975

"локальные переменные могут быть аннотированы с именем или без имени:"

# @type [String]
my_var = magic_method

# @type my_var [String]
my_var = magic_method

# @type [String] my_var
my_var = magic_method

# @type [String] my_var And some documentation is allowed
my_var = magic_method

"Также поддерживаются множественные назначения:

# @type my_var [String] The first part
# @type other_var [Range] The second part
my_var, other_var = magic_method

"Но в случае многозадачности форма без имени var не будет работать (это можно утверждать, но я склонен к тому, что это может привести к некоторым ошибкам) ​​

Также можно аннотировать параметры блока: "

method_with_block do
  # @type [String] param1
  # @type [Range] param2
  | param1, param2 |
  # some code...
end

"Следует отметить, что аннотации типа должны быть размещены после do или {и перед списком параметров блока, чтобы избежать возможной двусмысленности. В случае с одним слоем это выглядит громоздким, но я не уверен, что они в любом случае, любые предложения очень приветствуются".

Ответ 2

Это не так. Я бы порекомендовал посмотреть в трекер проблемы для существующих запросов функций и добавить, чтобы ваш голос был услышан. Например:

http://youtrack.jetbrains.com/issue/RUBY-9142

Обновление

Эта функция теперь поставляется с RubyMine 7.0 (Tsubaki) EAP (138.1968) и выше (но обратите внимание, что Rubymine 7.0 в настоящее время находится в EAP (т.е. в бета-версии), и всегда есть шанс, что это может не оказаться в финальном дистрибутиве).

Ответ 3

Это не 100% ответ на этот конкретный вопрос, но может указать на другой полезный трюк.

В тестах я делаю это так, чтобы обмануть RubyMine (5.0.2)

user = users(:normal) || User.new

поскольку с помощью приборов я уверен, что пользователи (: first) вернут объект, а из-за Use.new - IDE думает, что это должен быть экземпляр пользователя.