[Python-bugs-list] [ python-Bugs-587239 ] python-mode and nested indents
noreply@sourceforge.net
noreply@sourceforge.net
Fri, 26 Jul 2002 15:05:01 -0700
Bugs item #587239, was opened at 2002-07-26 16:56
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=587239&group_id=5470
Category: Demos and Tools
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Andrew Koenig (arkoenig)
>Assigned to: Barry A. Warsaw (bwarsaw)
Summary: python-mode and nested indents
Initial Comment:
Using Python-mode 4.6 and GNU emacs 21.2.2, I enter the
following:
if x < 0:
for i in range(100):
print i
else:
print "x is negative"
If I now put the cursor on the "else:" line and hit
tab, it erroneously changes the indentation to line the
"else" up with the "for" above it.
----------------------------------------------------------------------
>Comment By: Tim Peters (tim_one)
Date: 2002-07-26 18:05
Message:
Logged In: YES
user_id=31435
I agree that the second one (elif) may be considered a
bug. Afraid I can't agree aboiut the first reason, though: of
course hitting tab in pymode can change the meaning.
When you've got
if whatever:
->x
y
and hit tab when on the line containing y, it assumes you're
hitting tab for a reason, not just to make trouble <wink>.
I believe there's a discussion about this in the long form of
the pymode help. Since pymod can't *know* the block
structure you intend, it does its best to guess, and hitting
a "guess the block structure I intended" key is taken as
meaning, for a start, that the block structure on the current
line isn't what you intended (else why would have hit the
key? as a Python programmer, you should already know
this isn't C mode <wink>).
----------------------------------------------------------------------
Comment By: Andrew Koenig (arkoenig)
Date: 2002-07-26 17:49
Message:
Logged In: YES
user_id=418174
Frankly, I hadn't thought of that possibility!
However, I still consider the behavior a bug, for two
reasons: (1) I can type something that's syntactically
valid, hit tab, and have it change the meaning of what I
typed, and (2) It changes the indentation in the same way if
I say "elif:" instead of "else:", even though that change is
not syntactically valid. That is (using -> to indicate a
tab):
if x < 0:
->for i in range(100):
->->print i
elif x > 0:
->print x
Again, hitting tab on the "elif" line will indent the "elif"
to line up with the "for", even though the result is
syntactically invalid.
----------------------------------------------------------------------
Comment By: Tim Peters (tim_one)
Date: 2002-07-26 17:14
Message:
Logged In: YES
user_id=31435
Andrew, why is that erroneous? Loops in Python have
(optional) "else:" clauses too. There's no way for pymode to
guess whether you intended the else to go with the if or the
for. I expect it looks backward for the closest-preceding
construct the else-statement could "belong to", and finds
the for-loop first.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=587239&group_id=5470