Feature #7309

HEREDOC end of line or similar

Added by Juergen Mangler over 1 year ago. Updated 2 months ago.

[ruby-core:49093]
Status:Rejected
Priority:Normal
Assignee:Yukihiro Matsumoto
Category:-
Target version:next minor

Description

example: writing a dsl that expresses some facts

  increase "coding" experience one level until 'next summer'

This can right now be done in different ways

  • make the whole thing a string and parse it
  • increase.experience('coding').one_level.until('next summer')
  • increase "'coding' experience one level until 'next summer'"

Another nice alternative would be a heredoc type that operates to the end of the line (i couldn't find existing implementations for perl and ruby)

  Example1: increase <<* "coding" experience one level until "next summer"
  Example2: increase <<< "coding" experience one level until "next summer"

  def increase(str) # the rest of the line is passed as a string

Although it looks not very elegant for a DSL it would to the job. of course something more unobtrusive would be better, but i don't know how difficult this would be for the parser. e.g.:

  def increase(~str); end
  • When a method has ~ attribute it could automatically read the rest of the line as string when invoked (or when used with method call brackets to the closing bracket). Invoke like:

    increase "coding" experience one level until "next summer"

OR

  increase("coding" experience one level until "next summer")
  • ~ attributes always as last attribute: def increase(a,b,~str); end ** Invoke like: increase "val1", "val2", the rest is a string ** In this case the rest str should have a leading " "

Summary: First possibility (heredoc like) would allow for neat(er) looking dsl's. The second possibility (~attributes, not sure if this is doable) would allow for a VERY neat looking DSL's. Both for sure also would increase the interest in string parsing ;-)

History

#1 Updated by Boris Stitnicky over 1 year ago

In other words, you want to mangle Ruby syntax :-)

#2 Updated by Yusuke Endoh over 1 year ago

  • Status changed from Open to Assigned
  • Assignee set to Yukihiro Matsumoto
  • Target version set to next minor

#3 Updated by Shyouhei Urabe 2 months ago

  • Status changed from Assigned to Rejected

"def increase(~str)" is technically impossible so please let me
reject this. However I think "<<<" can be possible. If you still
need that, please open another ticket for that part.

Also available in: Atom PDF