aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/python.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/progmodes/python.el')
-rw-r--r--lisp/progmodes/python.el16
1 files changed, 13 insertions, 3 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 228a4484616..2697f1a3107 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1491,10 +1491,18 @@ Optional argument NOEND is internal and makes the logic to not
1491jump to the end of line when moving forward searching for the end 1491jump to the end of line when moving forward searching for the end
1492of the statement." 1492of the statement."
1493 (interactive "^") 1493 (interactive "^")
1494 (let (string-start bs-pos) 1494 (let (string-start bs-pos (last-string-end 0))
1495 (while (and (or noend (goto-char (line-end-position))) 1495 (while (and (or noend (goto-char (line-end-position)))
1496 (not (eobp)) 1496 (not (eobp))
1497 (cond ((setq string-start (python-syntax-context 'string)) 1497 (cond ((setq string-start (python-syntax-context 'string))
1498 ;; The assertion can only fail if syntax table
1499 ;; text properties and the `syntax-ppss' cache
1500 ;; are somehow out of whack. This has been
1501 ;; observed when using `syntax-ppss' during
1502 ;; narrowing.
1503 (cl-assert (> string-start last-string-end)
1504 :show-args
1505 "Overlapping strings detected")
1498 (goto-char string-start) 1506 (goto-char string-start)
1499 (if (python-syntax-context 'paren) 1507 (if (python-syntax-context 'paren)
1500 ;; Ended up inside a paren, roll again. 1508 ;; Ended up inside a paren, roll again.
@@ -1504,8 +1512,10 @@ of the statement."
1504 (goto-char (+ (point) 1512 (goto-char (+ (point)
1505 (python-syntax-count-quotes 1513 (python-syntax-count-quotes
1506 (char-after (point)) (point)))) 1514 (char-after (point)) (point))))
1507 (or (re-search-forward (rx (syntax string-delimiter)) nil t) 1515 (setq last-string-end
1508 (goto-char (point-max))))) 1516 (or (re-search-forward
1517 (rx (syntax string-delimiter)) nil t)
1518 (goto-char (point-max))))))
1509 ((python-syntax-context 'paren) 1519 ((python-syntax-context 'paren)
1510 ;; The statement won't end before we've escaped 1520 ;; The statement won't end before we've escaped
1511 ;; at least one level of parenthesis. 1521 ;; at least one level of parenthesis.