Fix Python indentation of block continuation

* lisp/progmodes/python.el (python-indent--calculate-indentation):
Fix indentation of :after-backslash-block-continuation.

* test/lisp/progmodes/python-tests.el
(python-indent-after-backslash-6): New test (bug#57262).
This commit is contained in:
kobarity 2022-08-18 15:16:08 +02:00 committed by Lars Ingebrigtsen
parent 74e830768d
commit b9c6c0fb7b
2 changed files with 26 additions and 1 deletions

View file

@ -1238,8 +1238,14 @@ possibilities can be narrowed to specific indentation points."
;; Add one indentation level.
(goto-char start)
(+ (current-indentation) python-indent-offset))
(`(:after-backslash-block-continuation . ,start)
(goto-char start)
(let ((column (current-column)))
(if (= column (+ (current-indentation) python-indent-offset))
;; Add one level to avoid same indent as next logical line.
(+ column python-indent-offset)
column)))
(`(,(or :inside-paren
:after-backslash-block-continuation
:after-backslash-dotted-continuation) . ,start)
;; Use the column given by the context.
(goto-char start)

View file

@ -1250,6 +1250,25 @@ def delete_all_things():
:after-backslash-dotted-continuation))
(should (= (python-indent-calculate-indentation) 16))))
(ert-deftest python-indent-after-backslash-6 ()
"Backslash continuation from for block."
(python-tests-with-temp-buffer
"
for long_variable_name \\
in (1, 2):
print(long_variable_name)
"
(python-tests-look-at "for long_variable_name \\")
(should (eq (car (python-indent-context)) :no-indent))
(should (= (python-indent-calculate-indentation) 0))
(python-tests-look-at "in (1, 2):")
(should (eq (car (python-indent-context))
:after-backslash-block-continuation))
(should (= (python-indent-calculate-indentation) 8))
(python-tests-look-at "print(long_variable_name)")
(should (eq (car (python-indent-context)) :after-block-start))
(should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-block-enders-1 ()
"Test de-indentation for pass keyword."
(python-tests-with-temp-buffer