]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix syntax highlighting after string literal concat in python-mode
authorJakub Ječmínek <jecminek.k@gmail.com>
Fri, 19 Jan 2024 15:38:21 +0000 (16:38 +0100)
committerEshel Yaron <me@eshelyaron.com>
Wed, 31 Jan 2024 20:08:07 +0000 (21:08 +0100)
* lisp/progmodes/python.el (python-syntax-stringify): Fix
incorrect font-lock after string literal concatenation.
(Bug#45897)

* test/lisp/progmodes/python-tests.el
(python-font-lock-string-literal-concatenation): New test.

Co-authored-by: kobarity <kobarity@gmail.com>
Copyright-paperwork-exempt: yes
(cherry picked from commit 09cdf8a406c5b73e8924a7396c2aaabe74a1a638)

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

index 41f612c8b1c3350049a576c9bdbc9862db6cfc00..9d840efb9dac5cdb37fdbf9ae3f6d0cf9e56184f 100644 (file)
@@ -909,6 +909,7 @@ is used to limit the scan."
   "Put `syntax-table' property correctly on single/triple quotes."
   (let* ((ppss (save-excursion (backward-char 3) (syntax-ppss)))
          (string-start (and (eq t (nth 3 ppss)) (nth 8 ppss)))
+         (string-literal-concat (numberp (nth 3 ppss)))
          (quote-starting-pos (- (point) 3))
          (quote-ending-pos (point)))
     (cond ((or (nth 4 ppss)             ;Inside a comment
@@ -921,6 +922,8 @@ is used to limit the scan."
           ((nth 5 ppss)
            ;; The first quote is escaped, so it's not part of a triple quote!
            (goto-char (1+ quote-starting-pos)))
+          ;; Handle string literal concatenation (bug#45897)
+          (string-literal-concat nil)
           ((null string-start)
            ;; This set of quotes delimit the start of a string.  Put
            ;; string fence syntax on last quote. (bug#49518)
index 97ffd5fe20fb281c1c66257d85295111e7f23ecb..59957ff0712b9233643be5bdccee9eceed1c99e2 100644 (file)
@@ -660,6 +660,18 @@ r'\\x12 \123 \\n \\u1234 \\U00010348 \\N{Plus-Minus Sign}'"
      (3 . font-lock-string-face) (14)
      (16 . font-lock-string-face))))
 
+(ert-deftest python-font-lock-string-literal-concatenation ()
+  "Test for bug#45897."
+  (python-tests-assert-faces
+   "x = \"hello\"\"\"
+y = \"confused\""
+   '((1 . font-lock-variable-name-face) (2)
+     (3 . font-lock-operator-face) (4)
+     (5 . font-lock-string-face) (14)
+     (15 . font-lock-variable-name-face) (16)
+     (17 . font-lock-operator-face) (18)
+     (19 . font-lock-string-face))))
+
 \f
 ;;; Indentation