python-info-dedenter-opening-block-positions: Fix to support "bare" match

* lisp/progmodes/python.el
(python-info-dedenter-opening-block-positions): Make the check
stricter.  Require that block starts only at indentation.

* test/lisp/progmodes/python-tests.el
(python-indent-after-bare-match): Another test (bug#62031).
This commit is contained in:
Dmitry Gutov 2023-03-09 17:24:54 +02:00
parent 01b65d442a
commit 29228e24f2
2 changed files with 17 additions and 1 deletions

View file

@ -5792,7 +5792,9 @@ likely an invalid python file."
(while (python-nav--syntactically (while (python-nav--syntactically
(lambda () (lambda ()
(cl-loop while (re-search-backward (python-rx block-start) nil t) (cl-loop while (re-search-backward (python-rx block-start) nil t)
if (memq (char-before) '(nil ?\s ?\t ?\n)) if (save-match-data
(looking-back (rx line-start (* whitespace))
(line-beginning-position)))
return t)) return t))
#'<) #'<)
(let ((indentation (current-indentation))) (let ((indentation (current-indentation)))

View file

@ -1994,6 +1994,20 @@ def test_re(string):
(python-tests-look-at "else:") (python-tests-look-at "else:")
(should (= (python-indent-calculate-indentation) 4)))) (should (= (python-indent-calculate-indentation) 4))))
(ert-deftest python-indent-after-bare-match ()
"Test BUG 62031 regression."
(python-tests-with-temp-buffer
"
from re import match
def test_re(string):
if match('^[a-c]+$', string):
print('yes')
else:
"
(python-tests-look-at "else:")
(should (= (python-indent-calculate-indentation) 4))))
;;; Filling ;;; Filling