]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix recently introduced Python font lock breakage of chained assignments
authorkobarity <kobarity@gmail.com>
Sat, 21 May 2022 13:23:21 +0000 (15:23 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 21 May 2022 13:23:21 +0000 (15:23 +0200)
* lisp/progmodes/python.el (python-font-lock-assignment-matcher):
Fix fontification of chained assignments (bug#54992).

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

index ca744b1cfdec4e26111f23371b24b0774275417f..0761aaebdcc3f51474bec4ec8d873adff7b01244 100644 (file)
@@ -606,12 +606,15 @@ builtins.")
 Search for next occurrence if REGEXP matched within a `paren'
 context (to avoid, e.g., default values for arguments or passing
 arguments by name being treated as assignments) or is followed by
-an '=' sign (to avoid '==' being treated as an assignment."
+an '=' sign (to avoid '==' being treated as an assignment.  Set
+point to the position one character before the end of the
+occurrence found so that subsequent searches can detect the '='
+sign in chained assignment."
   (lambda (limit)
     (cl-loop while (re-search-forward regexp limit t)
              unless (or (python-syntax-context 'paren)
                         (equal (char-after) ?=))
-               return t)))
+               return (progn (backward-char) t))))
 
 (defvar python-font-lock-keywords-maximum-decoration
   `((python--font-lock-f-strings)
@@ -706,7 +709,7 @@ an '=' sign (to avoid '==' being treated as an assignment."
     ;;   [a] = 5
     ;;   [*a] = 5, 6
     (,(python-font-lock-assignment-matcher
-       (python-rx (or line-start ?\;) (* space)
+       (python-rx (or line-start ?\; ?=) (* space)
                   (or "[" "(") (* space)
                   grouped-assignment-target (* space)
                   (or ")" "]") (* space)
index 98b55a5f8bc205905830453ca65154093c934afc..ee7b66610aae922fc0b8b30132f737f7a9dbd951 100644 (file)
@@ -342,6 +342,13 @@ aliqua."
      (16 . font-lock-variable-name-face) (17))))
 
 (ert-deftest python-font-lock-assignment-statement-17 ()
+  (python-tests-assert-faces
+   "(a) = (b) = 1"
+   `((1)
+     (2 . font-lock-variable-name-face) (3)
+     (8 . font-lock-variable-name-face) (9))))
+
+(ert-deftest python-font-lock-assignment-statement-18 ()
   (python-tests-assert-faces
    "CustomInt = int