@ledsun blog

無味の味は佳境に入らざればすなわち知れず

error_highlight: user-friendly error diagnostic

rubykaigi.org

発表の前半の内容は 【RubyKaigi発表予告】error_highlight: user-friendly error diagnostics - クックパッド開発者ブログ にあります。

後半はRuby 3.2 でerror_highligthのエスケープ処理で、\が増えなくなった話でした。

ledsun@MSI:~/error_highlight►ruby -v -e '"\\\\\\\\\\\\\\\\".gsuub("", "")'
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
-e:1:in `<main>': undefined method `gsuub' for "\\\\\\\\\\\\\\\\":String (NoMethodError)

"\\\\\\\\\\\\\\\\".gsuub("", "")
          ^^^^^^
Did you mean?  gsub
               gsub!

Ruby3.1で\の数が増えて、^^^^^^の位置がズレています。 -eで渡すとエスケープしてる分 \ が増えているので、わかりにくいですね。

ledsun@MSI:~/error_highlight►ruby -v -e '"\\\\\\\\\\\\\\\\".gsuub("", "")'
ruby 3.2.0preview2 (2022-09-09 master 35cfc9a3bb) [x86_64-linux]
-e:1:in `<main>': undefined method `gsuub' for "\\\\\\\\":String (NoMethodError)

"\\\\\\\\".gsuub("", "")
          ^^^^^^
Did you mean?  gsub
               gsub!

Ruby 3.2では直っています。

このRuby側のエスケープ処理は、2003年のとある記事に基づいているそうです。 記事の内容的にはRubyではなく、ターミナル側で対策した方が良さそうな内容だったそうです。 そこで主要なターミナルをしらべて対応済みなので、Rubyからは該当する処理を消したそうです。 このときターミナルのソースコードから、件の記事への言及を発見したと言われてました。 ソースコードまで確認するの、さすがだな、すごいな、と思いました。