]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix python-font-lock-keywords-maximum-decoration performance regression
authorDario Gjorgjevski <dario.gjorgjevski@gmail.com>
Wed, 11 Nov 2020 11:27:59 +0000 (12:27 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 11 Nov 2020 11:27:59 +0000 (12:27 +0100)
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration): `symbol-name'
should not be quantified by a `+' as it is redundant and performs
very badly (bug#44572).

lisp/progmodes/python.el

index eb84b494e35490bbfadedd3ce2fd593af2231bc0..a1793185899bd17fb76ad82c77d2df17b53d97ab 100644 (file)
@@ -662,14 +662,11 @@ builtins.")
     ;; assignments
     ;; support for a = b = c = 5
     (,(lambda (limit)
-        (let ((re (python-rx (group (+ symbol-name))
-                             (? ?\[ (+ (not ?\])) ?\])
-                             (* space)
-                             ;; A type, like " : int ".
-                             (? ?:
-                                (* space)
-                                (+ not-simple-operator)
-                                (* space))
+        (let ((re (python-rx (group symbol-name)
+                             ;; subscript, like "[5]"
+                             (? ?\[ (+ (not ?\])) ?\]) (* space)
+                             ;; type hint, like ": int" or ": Mapping[int, str]"
+                             (? ?: (* space) (+ not-simple-operator) (* space))
                              assignment-operator))
               (res nil))
           (while (and (setq res (re-search-forward re limit t))
@@ -679,9 +676,9 @@ builtins.")
      (1 font-lock-variable-name-face nil nil))
     ;; support for a, b, c = (1, 2, 3)
     (,(lambda (limit)
-        (let ((re (python-rx (group (+ symbol-name)) (* space)
-                             (* ?, (* space) (+ symbol-name) (* space))
-                             ?, (* space) (+ symbol-name) (* space)
+        (let ((re (python-rx (group symbol-name) (* space)
+                             (* ?, (* space) symbol-name (* space))
+                             ?, (* space) symbol-name (* space)
                              assignment-operator))
               (res nil))
           (while (and (setq res (re-search-forward re limit t))