Issue #5054 has been updated by Martin Dürst.


I'm not sure yet what to think of this proposal, but if it gets introduced, please lets make sure to improve the allignment of the ennnnnd.

Rather than:

Yasushi ANDO wrote:

> module MyModule
>   class MyClass
>     def my_method
>       10.times do
>         if rand < 0.5 
>           p :small
>         ennnnnd 

please put the first character of the ennnnd in the same column as the *outermost* construct it closes:

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
ennnnnd

Of course, Ruby won't care, but it's easier to understand for humans. 

----------------------------------------
Feature #5054: Compress a sequence of ends
http://redmine.ruby-lang.org/issues/5054

Author: ANDO Yasushi ANDO
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


Though as matz said at rubykaigi2011 ruby is a quite good language, many people hate a long sequence of `end' like this:

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
        end 
      end 
    end 
  end 
end

So, I'd like to propose introducing a special keyword, en(n+)d. Using this keyword, we can rewrite the above example like this:

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
        ennnnnd 

I know matz's already rejected a python-style block. He wrote:

> it works badly with
>   * tab/space mixture
>   * templates, e.g. eRuby
>   * expression with code chunk, e.g lambdas and blocks
http://www.ruby-forum.com/topic/108457

These bad things won't occur by introducing en(n+)d.

Some implementations already exists.

JRuby
- https://gist.github.com/1088363

CRuby
- http://www.atdot.net/sp/raw/kn9iol
- http://d.hatena.ne.jp/ku-ma-me/20110718/p1

Thanks for your consideration.


-- 
http://redmine.ruby-lang.org