From: eregontp@... Date: 2020-10-11T10:23:18+00:00 Subject: [ruby-core:100370] [Ruby master Bug#17259] Kernel#warn should ignore Essentially `uplevel:` option is useless in some cases. > For instance, it cannot work to skip frames in the same file or directory. Yes, some libraries might want to emit warnings and ignore their own `my_gem/lib/`. That however would need to make `warn` somehow take some extra context, because only warnings of that library should ignore `my_gem/lib/`, other calls to `warn` should not. Maybe `warn(message, uplevel: n, ignore: [path1, path2])`. That would not work for RubyGems' require, where warning are not emitted by RubyGems but by anything else. In practice, I think gems should be able to know if they call themselves directly or not, so there should be no need to skip `my_gem/lib/`. I might be wrong about that. OTOH for core library methods and RubyGems' `require`, it seems clear it would never be useful to show their location for `warn(uplevel:)`. So I think ignoring `:90: warning: use X instead # expected: "-e:1: warning: use X instead" ``` Note that RubyGems overrides Kernel#warn since https://github.com/rubygems/rubygems/pull/2442 and https://github.com/rubygems/rubygems/blob/c1bafab1d84e0aad06e377e9db4b74cccab4b43a/lib/rubygems/core_ext/kernel_warn.rb#L42, so `--disable-gems` is needed to observe this behavior. I think it is very suboptimal that RubyGems needs to monkey-patch Kernel#warn to remove RubyGems' `require` from `Kernel#warn` location. That is both fragile (as we've seen from various incompatible behavior and bugs in that monkey-patch) and inefficient (walking the stack multiple times). So I would suggest to actually skip all backtraces entries starting with `', line)` and it would automatically be skipped, without needing to monkey-patch Kernel#warn at all! -- https://bugs.ruby-lang.org/ Unsubscribe: