]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix Python indentation of block continuation
authorkobarity <kobarity@gmail.com>
Thu, 18 Aug 2022 13:16:08 +0000 (15:16 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 18 Aug 2022 13:16:08 +0000 (15:16 +0200)
* 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).

lisp/progmodes/python.el
test/lisp/progmodes/python-tests.el

index e135039199467535ec1be6dc33e1576bbf6c797c..9a2d17abb4a9905cfc3dd249a3ca9acc61991607 100644 (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)
index 875c92573efc40f01845872f7b8c433b63091dff..0904dfc9639fe7c8e5fd7a2332ceb1f4902893c5 100644 (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