[ruby-core:109997] [Ruby master Feature#19015] Language extension by a heredoc
From:
"yugui (Yuki Sonoda)" <noreply@...>
Date:
2022-09-22 10:51:49 UTC
List:
ruby-core #109997
Issue #19015 has been updated by yugui (Yuki Sonoda). one bikeshedding.. Usually syntax-suger in Ruby are mapped into methods whose names are very consistent with the syntax. e.g. `` ` ``, `[]=`, or `foo=`. Therefore, it is more consistent to map the new syntax into `<<!LANG` method. It seems possible to make the lexer distinguish such a notation from `<<` symbol. ---------------------------------------- Feature #19015: Language extension by a heredoc https://bugs.ruby-lang.org/issues/19015#change-99248 * Author: ko1 (Koichi Sasada) * Status: Open * Priority: Normal ---------------------------------------- This propose new heredoc extension with `<<!LANG` like ```ruby doc = <<!LANG # description written in lang LANG foo bar LANG ``` and it is translated to: ```ruby doc = heredoc_extension_LANG(heredoc_text, binding) ``` ## Example ```ruby require 'erb' def heredoc_extension_erb str, b ERB.new(str).run(b) end name = 'ko1' html = <<!erb <div>Hello <%= name %></div> erb puts html #=> <div>Hello ko1</div> ``` ## Background / considerations * Sometimes we write Ruby syntax string with `<<RUBY` and this proposal inspired by it. * it is similar to shebang (`#!LANG` in shell) * [Elixir's custom sigil](https://elixir-lang.org/getting-started/sigils.html) translates `~u(...)` translates to `sigil_u(...)`. This is why it translated to `heredoc_extension_LANG(...)` private method call. * JavaScript has JSX but I don't think it is fit to the Ruby language. * Heredoc is Ruby's chaos part and already confusing a lot. Additional chaos doesn't matter. * `<<!foo` is valid syntax but now I don't think it is not used. gem codesearch doesn't find the usage. * Sorry I couldn't wait 1st/Apr. ## Implementation I attached the experimental implementation which only supports `erb` (because I couldn't find how to get delimiter to determine a method name :p). ---Files-------------------------------- heredoc_extension.patch (2.7 KB) -- 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>