[#118346] [Ruby master Bug#20586] Some filesystem calls in dir.c are missing error handling and can return incorrect results if interrupted — "ivoanjo (Ivo Anjo) via ruby-core" <ruby-core@...>
Issue #20586 has been reported by ivoanjo (Ivo Anjo).
13 messages
2024/06/19
[ruby-core:118201] [Ruby master Bug#20433] Hash.inspect for some hash returns syntax invalid representation
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2024-06-06 09:27:39 UTC
List:
ruby-core #118201
Issue #20433 has been updated by mame (Yusuke Endoh).
Discussed at the dev meeting.
In conclusion, @matz wanted to change the return value of `Hash#inspect` significantly and estimate its compatibility impact:
```ruby
{ :key => 42 } #=> {key: 42} # if the key is a symbol
{ :== => 42 } #=> {"==": 42} # if the key is a symbol and quotes are needed
{ "str" => 42 } #=> {"str" => 42} # otherwise (note that `=>` is surrounded by spaces)
# when keys are mixed
{ :== => 1, :key => 2, "str" => 3 } # {"==": 1, key: 2, "str" => 3}
```
Actually, some solutions were discussed.
Solution 1: insert a space before `=>` only when needed.
```ruby
{ :key => 1 } # {:key=>1}
{ :== => 1 } # {:== =>1}
{ :a! => 1 } # {:a! =>1}
```
Solution 2: insert spaces before and after `=>` consistently
```ruby
{ :key => 1 } # {:key => 1}
{ :== => 1 } # {:== => 1}
{ :a! => 1 } # {:a! => 1}
```
Solution 3: quote keys only when needed
```ruby
{ :== => 1 } # {:"=="=>1}
{ :a! => 1 } # {:"a!"=>1}
{ :key => 1 } # {:key=>1}
```
Matz said he likes Solution 2. However, this has a compatibility issue. It may break some existing test assertions.
Matz had had the idea of denoting symbol keys by a colon in `Hash#inspect`. And the incompatibility impacts of Solution 2 and of symbol keys by colons are expected to be about the same. Rather than introducing the incompatibilities in two steps, Matz said he wants to change it at once.
----------------------------------------
Bug #20433: Hash.inspect for some hash returns syntax invalid representation
https://bugs.ruby-lang.org/issues/20433#change-108688
* Author: tompng (tomoya ishida)
* Status: Open
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
For these hashes, Hash.inspect returns a syntax invalid representation:
~~~ruby
{ :a! => 1 } # {:a!=>1}
{ :a? => 1 } # {:a?=>1}
{ :* => 1 } # {:*=>1}
{ :== => 1 } # {:===>1}
{ :< => 1 } # {:<=>1}
~~~
`eval(hash.inspect)` will raise SyntaxError.
Although inspect does not guarantee that the result can be eval-ed, it'd be confusing for these few cases.
Maybe related to https://bugs.ruby-lang.org/issues/20235
--
https://bugs.ruby-lang.org/