我有一个项目,其中包含许多Ruby文件,这些文件是由带有嵌入式Ruby解释器(和其他一些库)的外部程序加载的。我正在尝试使用RubyMine和Rubocop来帮助开发,但是问题是该嵌入式解释器的版本为1.9.2,无法以任何方式进行升级。仍然可以在RubyMine中使用Rubocop或其他linter,同时确保代码与旧的解释器兼容吗?
答案 0 :(得分:1)
简短的回答是,是的,可以更改RubyMine中使用的棉绒,JetBrains网站上有完整的演练介绍了操作方法。我不知道有什么特别适用于Ruby 2.0之前版本的linter,不是说它们不存在。
更长的答案是,如果解释器正在通过另一个程序运行,并且未使用真正的Ruby安装,并且不会影响您的工作,那么这实际上不会有太大的区别。 linter仍然会认为完全可以接受的代码很多,但是在嵌入式VM中运行时会失败。
# 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')
最明显的示例是整个标准库,gem,rake以及不属于“核心”库的任何内容。基本经验法则,如果您必须require
一个脚本(不包括项目的本地脚本),它将无法正常工作。
它永远不可靠的另一个原因是,您不知道嵌入式Ruby解释器是否已更改,或者出于其目的从Ruby中删除了功能,而linter知道的方式甚至更少。几年前,我涉猎了RPG Maker系列,并发现了很难将其确定为内置于Ruby中的某些功能,这些功能已从其自定义构建中删除(或至少隐藏了)。
如果您熟悉Ruby,那么显然可以避开Ruby对核心库实现的主要且最常见的2.0+更改,但是唯一可靠的了解方法(即使是使用linter)也是测试,无论如何,您都将需要执行此操作(或者至少应该这样做)。 RubyMine对Minitest和RSpec的自动化提供了良好的支持。
答案 1 :(得分:1)
是的,Check this out,然后让RuboCop知道您的项目通过更新.rubocop.yml文件而支持的最旧的Ruby版本:
AllCops:
TargetRubyVersion: 1.9