[ruby-core:102772] [Ruby master Misc#17662] The heredoc pattern used in tests does not syntax highlight correctly in many editors
From:
mame@...
Date:
2021-03-08 08:12:45 UTC
List:
ruby-core #102772
Issue #17662 has been updated by mame (Yusuke Endoh).
Okay, the style is an intentional hack to trick the editors into syntax-highlinting and auto-indenting the code within the heredoc. I didn't know, but it makes sense to me.
I investigated the syntax highlighting behavior of GitHub. They does not correctly support an empty heredoc in an indent:
https://gist.github.com/mame/90c1427163266ba73fab4cf7d96edd0a
I think they should fix it, but I found one workaround: adding a new line in `<<"begin;"` heredoc solves the issue.
https://github.com/ruby/ruby/blob/d10b535806227d24a3f8f5c7f425be3a39c2ac74/test/ruby/test_string.rb#L697
----------------------------------------
Misc #17662: The heredoc pattern used in tests does not syntax highlight correctly in many editors
https://bugs.ruby-lang.org/issues/17662#change-90792
* Author: Eregon (Benoit Daloze)
* Status: Assigned
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
----------------------------------------
This heredoc pattern
```ruby
assert_ruby_status([], "#{<<-"begin;"}\n#{<<-'end;'}", bug)
begin;
exit("1" == Thread.start(1, &:to_s).value)
end;
```
completely breaks syntax highlighting in at least:
* GitHub: [there](https://github.com/ruby/ruby/blob/36dde35e029c7a6607e6c674062ce6fc7a51c0bd/test/ruby/test_string.rb#L697) [are](https://github.com/ruby/ruby/blob/36dde35e029c7a6607e6c674062ce6fc7a51c0bd/test/ruby/test_process.rb#L1545) [many](https://github.com/ruby/ruby/blob/565aeb81e0886c835888a425e5d05ed99fb03238/test/ruby/test_thread.rb#L201) [examples](https://github.com/ruby/ruby/blob/36dde35e029c7a6607e6c674062ce6fc7a51c0bd/test/ruby/test_require.rb#L21)
* Atom
* RubyMine (and IntelliJ)
* Likely many more editors based on TextMate grammars
Could another pattern be used in tests inside the ruby/ruby repository (at least for `test/ruby`)?
Due to this issue, it is very annoying and inconvenient to look at/read/investigate many tests.
I think this pattern is also very complicated to understand (and using `;` is quite weird for this).
I suggest to replace it with this obvious and simple pattern many people use:
```ruby
assert_ruby_status([], <<~'RUBY', bug)
exit("1" == Thread.start(1, &:to_s).value)
RUBY
```
This syntax highlights correctly in most (all?) editors, and as an added bonus the code inside the heredoc is also highlighted in some editors (due to the label being `RUBY`).
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>