我编写的大部分代码都是用 Ruby 编写的,每隔一段时间,我就会犯一些拼写错误,但过一段时间后才会被发现。当我让我的脚本运行很长的任务,然后返回发现我有一个拼写错误时,这很烦人。

是否有针对 Ruby 积极开发的 lint 工具可以帮助我克服这个问题?是否可以在一个处理大量源文件(其中一些是动态加载的)的系统中使用它?

以此片段为例:

a = 20
b = 30
puts c

要赢得赏金,请向我展示一个可以检测 c 变量未创建/未定义。

有帮助吗?

解决方案

您可以尝试 Diamondback Ruby 。它执行Ruby代码的静态类型检查,因此会责怪您使用未定义的变量。

虽然DRuby是一个正在进行的研究项目,但它已经适用于小型,自包含的Ruby脚本。目前,它无法分析大部分Ruby标准库“开箱即用”。目前他们正在努力键入Ruby on Rails(请参阅他们的最近的论文)。

其他提示

[Plug] 如果您的项目位于公共 Github 存储库中, 卡尺 每次提交时都可以在代码上运行后三个工具和其他工具。(免责声明:我在卡尺上工作)

红宝石矿 (http://www.jetbrains.com/ruby)的技巧是:

替代文本http://img707.imageshack.us/img707/5688/31911448.png

以下任何一个都无法完成 RubyMine 所做的所有分析。

  • NetBeans Ruby 包
  • Aptana RadRails
  • gVIM(带有 scrooloose 的 Syntastic 插件)

其中每一个都能够识别语法错误,例如错误的括号数量、过多的定义、结束、大括号等。但没有一个能像 RubyMine 那样识别无效的方法调用。

原因如下:它很难。

由于 Ruby 非常动态(并且可以轻松地动态生成像“c”这样的方法),任何试图识别不存在的变量/方法的编辑器都需要加载整个环境的很大一部分和多个程序流路径不断测试以获得准确的“有效性”结果。这比在 Java 中困难得多,在 Java 中几乎所有编程都是静态的(至少当我放下那顶帽子时是这样)。

这种轻松动态生成方法的能力是社区如此高度重视测试的原因之一。我真的建议您也尝试进行测试。

查看 RuboCop 。它是基于 Ruby样式指南的Ruby代码样式检查器。它非常积极地维护并支持所有主要的Ruby实现。它适用于Ruby 1.9和2.0,并且具有出色的Emacs集成。

是。 <代码>测试::单位

好的,我知道你已经知道了这一点,从某种意义上来说这是一个无用的答案,但你确实提出了鸭子打字的负面后果,那就是(此时)没有办法解决编写比Java更多的测试可能需要。

因此,对于记录,请参阅Ruby标准库中的 Test :: Unit 或其他测试框架。

拥有可以运行和重新运行的单元测试是捕获错误的最佳方法,并且在Ruby等动态语言中确实需要更多(测试,而不是错误:-) ...

nitpick 可能是你所期待的。

使用此代码:

class MyString < String
  def awesome
    self.gsub("e", "3").gsub("l", "1").uppercase
  end
end

puts MyString.new("leet").awesome

......输出:

$ nitpick misspelling.rb 
*** Nitpick had trouble loading "misspelling.rb":
    NoMethodError undefined method `uppercase' for "133t":MyString
Nothing to report boss! He's clean!

尚未使用它,但听起来很有希望(当我测试时会更新)。

https://github.com/michaeledgar/laser

Ruby代码的静态分析和样式linter。

Pelusa 很不错,但仅适用于rubinius。对于熟悉RVM的人来说,这不是一个问题。

avdi@lazarus:~$ irb
>> a = 20
=> 20
>> b = 30
=> 30
>> puts c
NameError: undefined local variable or method `c' for main:Object
        from (irb):3
>>

然后,该工具被称为“IRB”。我得到了赏金吗?

我只是半开玩笑。我写了第二个答案,希望能够在Ruby中找到答案,如果您想知道某些内容是否已定义,您必须运行代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top