ruby-mode indent frustration

N

Neil Spring

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

I am used to c-mode indents and I find ruby-mode.el's indenting
frustrating. Has anyone configured, modified, or rewritten
ruby-mode.el to indent statements in a way more like c-mode does? I
found Jim Weirich's code to properly reformat comments without
reformatting code as c-mode does using M-q on rubygarden.

The code below includes some examples of lines I would like indented
differently, though the expressions are short. Because ruby's parser
considers any statement that could be finished on a line finished,
there are only a few ways to break up complex statements. Operators
like "||", "+", and "%" all cause ruby-mode to indent the next line
directly beneath where it would be anyway -- making it useless to try
to split these expressions across lines. Placing a {} block as a
parameter to a function somehow causes the indenting to
counter-intuitively start over at the left. And the "?" conditional
assignment operator gets no indenting for the next line at all.

# the following statement should line up false beneath true,
# as c-mode does.
if ( true ||
false ) then

# the following statement should line up "baz" either
# under "foo" or ruby-indent from the left edge.
puts "foo bar %s" %
"baz"
# same as above.
puts "Foo" +
"Bar"

# the second line should be indented somehow.
puts use_celsius ?
100 : 212;

# the second line should be indented somehow,
# preferably at least as far in as the "("
puts( [ "a", "b", "c" ].map { |c|
c + c }.join()
)

# are fine:
puts "Foo",
"Bar"
puts "foo bar %s" % [
"baz"
]
end

I don't know how to configure or improve ruby-mode.el to handle these
statements, and I realize c-mode has it easy since all it has to do is
wait for semicolons, but I think improving the formatting will make
code more readable.

thoughts?
- -neil
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (Darwin)

iD8DBQE/rZh9tvhXVvuQ3oQRAvRhAJ9wDdgb8EiJGjB3MUkGF9k6Gr6LtgCaAhlH
40nnYD3o/zZuNSQZCT1IeOA=
=ttYY
-----END PGP SIGNATURE-----
 
J

Jonas Lindström

Neil said:
Hello,

I am used to c-mode indents and I find ruby-mode.el's indenting
frustrating.

I agree with you about ruby-mode's indenting being frustrating. I think
a good thing would be to make the indentation more configurable.
C-mode's way of configuring indentation is arguably too complex, but
adding a few more user options would be a step in the right direction.
I don't know how to configure or improve ruby-mode.el to handle these
statements, and I realize c-mode has it easy since all it has to do is
wait for semicolons, but I think improving the formatting will make code
more readable.

If you think that c-mode has it easy, you should have a look at the
1100-line function c-guess-basic-syntax :) While you are at it, read
the amusing comment in font-lock.el.

Jonas Lindström
 
N

Nikolai Weibull

* Jonas Lindström said:
If you think that c-mode has it easy, you should have a look at the
1100-line function c-guess-basic-syntax :) While you are at it, read
the amusing comment in font-lock.el.
perhaps switch to Vim and use its great Ruby indenting facilities?
nikolai
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top