У меня есть проект со многими файлами Ruby, загруженными внешней программой со встроенным интерпретатором Ruby (и некоторыми другими библиотеками). Я пытаюсь использовать RubyMine и Rubocop для помощи в разработке, но проблема в том, что указанный встроенный интерпретатор имеет версию 1.9.2 и никак не может быть обновлен. Можно ли по-прежнему использовать Rubocop или другой линтер внутри RubyMine и при этом убедиться, что код совместим со старым интерпретатором?
Линтинг для Ruby ‹ 2.0.0
Ответы (2)
Да, можете, Проверьте это, а затем сообщите RuboCop самую старую версию Ruby, которую поддерживает ваш проект, с обновлением файла .rubocop.yml:
AllCops:
TargetRubyVersion: 1.9
Короткий ответ: да, можно изменить линтер, используемый в RubyMine, на сайте JetBrains есть полные пошаговые инструкции, объясняющие, как это сделать. Я не знаю навскидку какие-либо линтеры, которые специально работают для версий Ruby до 2.0, не говоря уже о том, что их не существует.
Более длинный ответ заключается в том, что на самом деле не будет большой разницы, если интерпретатор работает через другую программу, а не использует настоящую установку Ruby, и любой линтер не будет надежно работать для вас. Будет много кода, который линтер по-прежнему будет считать вполне приемлемым, но не сможет работать во встроенной виртуальной машине.
# Linter thinks this perfectly fine, part of 1.9.2 standard library
require 'base64'
# Still thinks this perfectly fine. This all fails miserably though
Base64.encode64('My string')
Наиболее очевидными примерами могут быть вся стандартная библиотека, драгоценные камни, рейк и все, что не является частью "основной" библиотеки. Основное эмпирическое правило: если вам нужно require
скрипт (исключая локальные скрипты вашего проекта), он не будет работать.
Другая причина, по которой он никогда не может быть надежным, заключается в том, что вы не знаете, был ли изменен встроенный интерпретатор Ruby или удалены ли функции из Ruby для своих целей, а у линтера будет еще меньше возможностей узнать об этом. Несколько лет назад я баловался серией RPG Maker и на собственном горьком опыте обнаружил, что они были определенными встроенными функциями Ruby, которые были удалены (или, по крайней мере, скрыты) из их пользовательской сборки.
Если вы знакомы с Ruby, то вы, очевидно, можете избежать основных и наиболее распространенных изменений 2.0+, которые Ruby внедрил в основную библиотеку, но единственный надежный способ узнать (даже с помощью линтера) — это тестирование, которое вы будете нужно сделать в любом случае (или, по крайней мере, вы должны). RubyMine имеет хорошую поддержку для автоматизации этого с помощью Minitest и RSpec.
1.9.2
это был РМ :-). Полностью понимаю, просто имейте в виду некоторые из ложных срабатываний, которые вы получите, о которых я упоминал. Если вы привыкли программировать на RM, а не на чистом Ruby, вам все равно вряд ли понадобится что-то помимо основной библиотеки, так что ничего страшного. Поскольку большая часть stdlib представляет собой сценарии Ruby, во многих случаях вы даже можете копировать и вставлять в свой проект все, что вам нужно.
- person ForeverZer0; 20.08.2018