Имам проект с много Ruby файлове, заредени от външна програма с вграден Ruby интерпретатор (и някои други библиотеки). Опитвам се да използвам RubyMine и Rubocop, за да помогна с разработката, но проблемът е, че споменатият вграден интерпретатор е от версия 1.9.2 и не може да бъде надстроен по никакъв начин. Възможно ли е да използвате Rubocop или друг линтер в RubyMine и в същото време да сте сигурни, че кодът е съвместим със стария интерпретатор?
Linting за 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 :-). Напълно разбирам, просто имайте предвид някои от фалшивите положителни резултати, които ще получите, които споменах. Ако сте свикнали да кодирате в RM, а не с чист Ruby, е малко вероятно да имате нужда от нещо извън core-lib така или иначе, така че няма проблем. Тъй като по-голямата част от stdlib са Ruby скриптове, в много случаи можете дори да копирате и поставите всичко, от което се нуждаете, към вашия проект.
- person ForeverZer0; 20.08.2018