过滤红宝石警告

时间:2016-03-15 11:45:58

标签: ruby warnings

我想创建一个gem来过滤Ruby中的警告,我想为"语法"做这个。和"运行时"警告。我正在努力弄清楚如何过滤语法级别警告(或者如果可能的话)

例如,如果我运行以下脚本

# myscript.rb
@blah

ruby -w myscript.rb

myscript.rb:1: warning: possibly useless use of a variable in void context
myscript.rb:1: warning: instance variable @blah not initialized

现在,想象一下这是一个更大项目的一部分。我想过滤掉myscript的任何警告。我该怎么做呢?使用ActiveSupport https://github.com/rails/rails/blob/3be9a34e78835a8dafc3438f60afb412613773b9/activesupport/lib/active_support/core_ext/kernel/reporting.rb

中的silence_warnings样式代码可以轻松过滤运行时错误

但我不知道如何(或者是否可能)挂钩Rubys语法级警告,因为它们似乎是在你有机会修补补丁之前运行的任何东西。我能想到的是将ruby脚本包装在另一个过程中,该过程将过滤所有警告。例如:

myfilterprogram ruby -w myscript.rb然后会捕获打印到STDERR的任何内容并相应地过滤。

1 个答案:

答案 0 :(得分:1)

您可能无法在读取主文件之前使用补丁程序,但是您可以在执行monkeypatching之后使主文件调用子文件。

myruby (可执行)

#!/usr/bin/env ruby

module Kernel
  def warn *args
    args # => captured warnings
  end
end

load ARGV[0]

用法是:

myruby foo.rb