Project

General

Profile

Actions

Feature #19015

open

Language extension by a heredoc

Added by ko1 (Koichi Sasada) 3 months ago. Updated about 1 month ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:109985]

Description

This propose new heredoc extension with <<!LANG like

doc = <<!LANG
  # description written in lang LANG
  foo bar
LANG

and it is translated to:

doc = heredoc_extension_LANG(heredoc_text, binding)

Example

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 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) heredoc_extension.patch ko1 (Koichi Sasada), 09/22/2022 03:23 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0