筛选 ruby 个警告

Filter ruby warnings

我想创建一个 gem 来过滤 Ruby 中的警告,我想对 "syntax" 和 "runtime" 警告执行此操作。我正在努力找出如何过滤语法级别警告(或者如果可能的话)

例如,如果我运行下面的脚本

# 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 样式代码很容易过滤运行时错误

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

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

您可能无法在读取主文件之前进行 monkey patch,但您可以在执行 monkeypatching 之后让您的主文件调用子文件。

myruby(可执行文件)

#!/usr/bin/env ruby

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

load ARGV[0]

用法是:

myruby foo.rb