我想创建一个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的任何内容并相应地过滤。
答案 0 :(得分:1)
您可能无法在读取主文件之前使用补丁程序,但是您可以在执行monkeypatching之后使主文件调用子文件。
myruby (可执行)
#!/usr/bin/env ruby
module Kernel
def warn *args
args # => captured warnings
end
end
load ARGV[0]
用法是:
myruby foo.rb