| |
@@ -0,0 +1,106 @@
|
| |
+ From 62cfa24a89fdbf90cbe866ad88ca635327eb1f49 Mon Sep 17 00:00:00 2001
|
| |
+ From: kobarity <kobarity@gmail.com>
|
| |
+ Date: Sun, 5 Mar 2023 17:06:26 +0900
|
| |
+ Subject: [PATCH 1/2] Fix searching for end of string in
|
| |
+ python-nav-end-of-statement
|
| |
+
|
| |
+ * lisp/progmodes/python.el (python-nav-end-of-statement): Add
|
| |
+ searching for corresponding string-quote.
|
| |
+ * test/lisp/progmodes/python-tests.el (python-nav-end-of-statement-3)
|
| |
+ (python-nav-end-of-statement-4, python-info-current-defun-4): New
|
| |
+ tests. (Bug#58780)
|
| |
+ ---
|
| |
+ lisp/progmodes/python.el | 14 ++++++---
|
| |
+ test/lisp/progmodes/python-tests.el | 44 +++++++++++++++++++++++++++++
|
| |
+ 2 files changed, 54 insertions(+), 4 deletions(-)
|
| |
+
|
| |
+ diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
|
| |
+ index 1f970633bfc..cc4ece1669c 100644
|
| |
+ --- a/lisp/progmodes/python.el
|
| |
+ +++ b/lisp/progmodes/python.el
|
| |
+ @@ -2076,10 +2076,16 @@ python-nav-end-of-statement
|
| |
+ (goto-char (+ (point)
|
| |
+ (python-syntax-count-quotes
|
| |
+ (char-after (point)) (point))))
|
| |
+ - (setq last-string-end
|
| |
+ - (or (re-search-forward
|
| |
+ - (rx (syntax string-delimiter)) nil t)
|
| |
+ - (goto-char (point-max)))))))
|
| |
+ + (setq
|
| |
+ + last-string-end
|
| |
+ + (or (if (eq t (nth 3 (syntax-ppss)))
|
| |
+ + (re-search-forward
|
| |
+ + (rx (syntax string-delimiter)) nil t)
|
| |
+ + (ignore-error scan-error
|
| |
+ + (goto-char string-start)
|
| |
+ + (python-nav--lisp-forward-sexp)
|
| |
+ + (point)))
|
| |
+ + (goto-char (point-max)))))))
|
| |
+ ((python-syntax-context 'paren)
|
| |
+ ;; The statement won't end before we've escaped
|
| |
+ ;; at least one level of parenthesis.
|
| |
+ diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
|
| |
+ index 4f24c042c6a..e9df4a2c843 100644
|
| |
+ --- a/test/lisp/progmodes/python-tests.el
|
| |
+ +++ b/test/lisp/progmodes/python-tests.el
|
| |
+ @@ -2943,6 +2943,36 @@ python-nav-end-of-statement-2
|
| |
+ "'\n''\n"
|
| |
+ (python-nav-end-of-statement)))
|
| |
+
|
| |
+ +(ert-deftest python-nav-end-of-statement-3 ()
|
| |
+ + "Test unmatched quotes (Bug#58780)."
|
| |
+ + (python-tests-with-temp-buffer
|
| |
+ + "
|
| |
+ +' \"\"\"
|
| |
+ +v = 1
|
| |
+ +"
|
| |
+ + (python-tests-look-at "v =")
|
| |
+ + (should (= (save-excursion
|
| |
+ + (python-nav-end-of-statement)
|
| |
+ + (point))
|
| |
+ + (save-excursion
|
| |
+ + (point-max))))))
|
| |
+ +
|
| |
+ +(ert-deftest python-nav-end-of-statement-4 ()
|
| |
+ + (python-tests-with-temp-buffer
|
| |
+ + "
|
| |
+ +abc = 'a\\
|
| |
+ +b\\
|
| |
+ +c'
|
| |
+ +d = '''d'''
|
| |
+ +"
|
| |
+ + (python-tests-look-at "b\\")
|
| |
+ + (should (= (save-excursion
|
| |
+ + (python-nav-end-of-statement)
|
| |
+ + (point))
|
| |
+ + (save-excursion
|
| |
+ + (python-tests-look-at "c'")
|
| |
+ + (pos-eol))))))
|
| |
+ +
|
| |
+ (ert-deftest python-nav-forward-statement-1 ()
|
| |
+ (python-tests-with-temp-buffer
|
| |
+ "
|
| |
+ @@ -5209,6 +5239,20 @@ python-info-current-defun-3
|
| |
+ (should (string= (python-info-current-defun t)
|
| |
+ "def decoratorFunctionWithArguments"))))
|
| |
+
|
| |
+ +(ert-deftest python-info-current-defun-4 ()
|
| |
+ + "Ensure unmatched quotes do not cause hang (Bug#58780)."
|
| |
+ + (python-tests-with-temp-buffer
|
| |
+ + "
|
| |
+ +def func():
|
| |
+ + ' \"\"\"
|
| |
+ + v = 1
|
| |
+ +"
|
| |
+ + (python-tests-look-at "v = 1")
|
| |
+ + (should (string= (python-info-current-defun)
|
| |
+ + "func"))
|
| |
+ + (should (string= (python-info-current-defun t)
|
| |
+ + "def func"))))
|
| |
+ +
|
| |
+ (ert-deftest python-info-current-symbol-1 ()
|
| |
+ (python-tests-with-temp-buffer
|
| |
+ "
|
| |
+ --
|
| |
+ 2.34.1
|
| |
+
|
| |