[#68845] [Ruby trunk - Feature #11056] [PATCH] lib/net/*: use io/wait methods instead of IO.select — normalperson@...
Issue #11056 has been updated by Eric Wong.
3 messages
2015/04/11
[#68945] [Ruby trunk - Feature #11083] [Open] Gemify net-telnet — shibata.hiroshi@...
Issue #11083 has been reported by Hiroshi SHIBATA.
4 messages
2015/04/21
[#68951] Re: [Ruby trunk - Feature #11083] [Open] Gemify net-telnet
— Eric Wong <normalperson@...>
2015/04/21
shibata.hiroshi@gmail.com wrote:
[#69012] [Ruby trunk - Feature #11105] [Open] ES6-like hash literals — shugo@...
Issue #11105 has been reported by Shugo Maeda.
5 messages
2015/04/29
[ruby-core:68928] [Ruby trunk - Feature #10982] Clarify location of NoMethod error
From:
mail@...
Date:
2015-04-18 19:41:30 UTC
List:
ruby-core #68928
Issue #10982 has been updated by Yuki Nishijima.
It wasn't so hard to implement this in pure Ruby, the last example doesn't work, though.
```ruby
# -*- coding: utf-8 -*-
class NoMethodError
REPL_LABELS = {
"irb_binding" => -> { Readline::HISTORY.to_a.last },
"__pry__" => -> { ::Pry.history.to_a.last }
}
def to_s
msg = super
msg << "\n\n".freeze
msg << " #{code}\n"
msg << " #{marker}\n"
rescue
super
end
def code
# Memoize since the #backtrace_locations method creates a lot of objects.
@code ||= begin
loc = backtrace_locations.first
if REPL_LABELS.include?(loc.label)
REPL_LABELS[loc.label].call
elsif File.exist?(loc.absolute_path)
File.open(loc.absolute_path) do |file|
file.detect { file.lineno == loc.lineno }
end
end
end.to_s.strip
end
def marker
code.strip.gsub(/(.*)(#{name}).*/) do
(" ".freeze * $1.size.pred) + '^'.freeze + ("‾".freeze * $2.size)
end if !code.empty?
end
end
# works
e = 1.foo rescue $!
puts e
# => undefined method `foo' for 1:Fixnum
#
# e = 1.foo rescue $!
# ^‾‾‾
# works.
e = 1.send(:bar) rescue $!
puts e
# => undefined method `bar' for 1:Fixnum
#
# e = 1.send(:bar) rescue $!
# ^‾‾‾
# works
@foo = ->{ true }
e = (@foo.call && @bar.call) rescue $!
puts e
# => undefined method `call' for nil:NilClass
#
# e = (@foo.call && @bar.call) rescue $!
# ^‾‾‾‾
# doesn't work
e = (@something.call && @else.call) rescue $!
puts e
# => undefined method `call' for nil:NilClass
#
# e = (@something.call && @else.call) rescue $!
# ^‾‾‾‾
```
----------------------------------------
Feature #10982: Clarify location of NoMethod error
https://bugs.ruby-lang.org/issues/10982#change-52194
* Author: Richard Schneeman
* Status: Open
* Priority: Normal
* Assignee:
----------------------------------------
In Ruby, the error `NoMethodError` on happens frequently, especially when it occurs on `nil`. This error can be confusing to beginners since, many of them think there is a problem with the method instead of the receiver. This error can be confusing to advanced developers when there are multiple method calls in the on the same line. In this example it is unclear if `foo` or `bar` returned `nil`:
```
foo.call && bar.call
NoMethodError: undefined method `call' for nil:NilClass
```
I would like to make this a better error message and to indicate where the exception occurs.
```
@foo.call && @bar.call
^----
NoMethodError: The method `call` is undefined on receiver nil:NilClass
```
Now it is more clear that the `@bar` is currently `nil` and that is the source of the error. I believe exposing this information will help developers of all abilities.
--
https://bugs.ruby-lang.org/