[ruby-core:70842] [Ruby trunk - Feature #11529] extensible % literal declarations

From: mame@...
Date: 2015-09-17 17:57:26 UTC
List: ruby-core #70842
Issue #11529 has been updated by Yusuke Endoh.


I like the idea.  Though, I guess it will be hard to agree with the definition syntax and precise semantics.

> and the extension code would be something like
>     def %hash(s)
>         return ...
>     end

It conflicts with an existing definition syntax of method named `%`.


> - the quoting chars should be deprecated (try this:  `%Q%%%%`)

Try this: `%Q%%%%%%`
This is one of the cutest parts of Ruby syntax that I love.

    p %%%
    p %%\%\%%
    p %%%%%%%
    puts %%:%+%%-\%s%%%%)%

See also: https://github.com/tric/trick2013/blob/master/yoshi-taka/entry.rb

Anyway.  This suggestion is a completely different topic than the first idea (extensible %).  We should discuss it in another thread, if really needed.

-- 
Yusuke Endoh <mame@ruby-lang.org>

----------------------------------------
Feature #11529: extensible % literal declarations
https://bugs.ruby-lang.org/issues/11529#change-54217

* Author: Eike Dierks
* Status: Feedback
* Priority: Normal
* Assignee: 
----------------------------------------
The ruby syntax provides for declaring literals by using the % escapes:

- %q(foo) => 'foo'
- %Q(foo) => "foo"
- %w(foo bar) => ['foo', 'bar']
- %i(foo bar) => [:foo, :bar]

It should be possible to define new % escapes.

*Use cases:*

I currently use:
    %q{select foo from bar}
to quote my sql statements.

It would improve readability to spell that:
    %sql{select foo from bar}
(with %sql being an alias of %q [see parsing problems below])

But there could be more interesting uses:

    %hash[
       a 1
       b 2]

    %triples[
        a b c
        1 2 3]

    %json/{"foo":"bar", "zip":"zap"}/

    %octal_data[012 345 677]


and the extension code would be something like
    def %hash(s)
        return ...
    end


Notes:

- I did expect this to be a problem. But it's not.
- in my faint memory, old ruby versions were rumoured to parse `%sqfooq => "foo"`
   but this is no longer true:  `%sqfooq => SyntaxError: (eval):2: unknown type of %string`

- the characters used for enclosing should be clearly defined
- we have two classes:
  - paired chars like `() [] {} <>`
  - quoting chars like `' " / @ _ # $ %`

My Suggestion:

- the quoting chars should be deprecated (try this:  `%Q%%%%`)
- the set of  paired chars should be extended to include selected pairs from unicode math symbols

  - unicode does not yet define a plane for open-close-brackets
   - see http://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets



































   








-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next