Properly indent Python PEP634 match/case blocks
Python 3.10 introduced the "structural pattern matching" syntax, and
commit 139042eb86
told font-lock about the
new keywords. This adds them also as block-start statements, to enable
proper indentation of such blocks.
* lisp/progmodes/python.el (python-rx): Add "match" and "case" as
block-start keywords.
* test/lisp/progmodes/python-tests.el (python-indent-after-match-block,
python-indent-after-case-block): New tests to verify indentation of
"match" and "case" blocks (bug#55572).
This commit is contained in:
parent
ae8b1b8fd4
commit
35d0190b0b
2 changed files with 27 additions and 0 deletions
|
@ -362,6 +362,8 @@ This variant of `rx' supports common Python named REGEXPS."
|
|||
`(rx-let ((block-start (seq symbol-start
|
||||
(or "def" "class" "if" "elif" "else" "try"
|
||||
"except" "finally" "for" "while" "with"
|
||||
;; Python 3.10+ PEP634
|
||||
"match" "case"
|
||||
;; Python 3.5+ PEP492
|
||||
(and "async" (+ space)
|
||||
(or "def" "for" "with")))
|
||||
|
|
|
@ -1516,6 +1516,31 @@ this is an arbitrarily
|
|||
(should (string= (buffer-substring-no-properties (point-min) (point-max))
|
||||
expected)))))
|
||||
|
||||
(ert-deftest python-indent-after-match-block ()
|
||||
"Test PEP634 match."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
match foo:
|
||||
"
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-after-case-block ()
|
||||
"Test PEP634 case."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
match foo:
|
||||
case 1:
|
||||
"
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
|
||||
;;; Filling
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue