Am 15.04.2011 13:49, schrieb Barry Warsaw:
Hi Andreas,

On Apr 15, 2011, at 08:59 AM, Andreas Röhler wrote:

def foo():
     x = dict(
              a=1,
              b=2,
              c=3,
              )


which looks okay for me.

Except it's a regression from the trunk.

Hi Barry,

that might be. Admittingly worked the opposite direction.

 When the open paren ends a line,
subsequent lines should get indented only one level, not to the space after an
open paren.

My understanding here was: when a listing --list, tupel, dict-- starts, line-breaks doesn't matter semantically, so attention should be laid onto the colum of list-starter.

If you indent just the offset of former line, the column than indicates nothing specific, it's a purely graphical indent.

So far at least my conclusion from bug #328842 - more flexible indentation of continued lists/tuples/dicts


Seems headed into something wrong :(



 At least, that's the way it should work by default.

If "4 spaces after assignement start" shall be the rule, we get next bug
report, should someone leave out the spaces, which would produce a nasty

def foo():
     x=dict(
         a=1,
         b=2,
         c=3,
         )

Note that it doesn't have anything to do with the assignment, or the dict.
It's the open paren ending a line that's the critical thing here.  Here's
another example.  This is what myrkwid gives you:

-----snip snip-----
def foo():
     do_something_first(
                        a=1,
                        b=2,
                        c=3,
                        )
-----snip snip-----

But this is what trunk gives you:

-----snip snip-----
def foo():
     do_something_first(
         a=1,
         b=2,
         c=3,
         )
-----snip snip-----


Well, if we have just these both cases, we can use a boolean.


A further problem with myrkwid is that if I'm typing the first few lines:

-----snip snip-----
def foo():
     do_something_first(
                        a=1,
-----snip snip-----

and now I realize that 'a=1' is indented too far to the right, so I manually
correct it to start under the 'o' in 'something'.  Then I go to the end of the
line and hit return.  I end up with this, which is definitely not correct:

-----snip snip-----
def foo():
     do_something_first(
         a=1,
                        b=2,
-----snip snip-----

'b' should line up under 'a'.

See what I mean?

Yeah, second indent is right, first wrong :)

OK, going to re-install the trunks behavior at least as an option/default.

What about `py-indent-honor-listing' - which would be `nil' meeting your preferences?

Cheers

Andreas


Would make that customizable with a var

align-to-dict

or so, which would be true here, nil the default. (?)

BTW: indent should go along with meaning, if possible.
Well, you being the authority :)

Or just the most adventurous and vocal, anyway :).  Indentation controlling
variables should be well-named and discoverable, but you just have to be
careful to capture the right semantics.  In this case, the indentation has
nothing to do with assignments or dicts, but everything to do with lines that
end in open parens.

Hope that helps!

PS Applied patch from 691542 this morning. Will push it into myrkwid also.

Awesome, thanks!
-Barry

_______________________________________________
Python-mode mailing list
Python-mode@python.org
http://mail.python.org/mailman/listinfo/python-mode

Reply via email to