筛选 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
我想创建一个 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