From 7aecc2f6ca3842395436f111449dbdcdce494ad5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Mon, 7 Apr 2014 00:23:45 +0100 Subject: [PATCH] Fix triple-quoting electricity in python-mode * lisp/progmodes/python.el (python-electric-pair-string-delimiter): Fix triple-quoting electricity. * test/automated/python-tests.el (python-triple-quote-pairing): New test. (python-syntax-after-python-backspace): New test. Fixes: debbugs:17192 --- lisp/ChangeLog | 7 +++++- lisp/progmodes/python.el | 5 +++-- test/ChangeLog | 5 +++++ test/automated/python-tests.el | 39 ++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7d6436cfafc..c30c02dcef3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,9 +1,14 @@ +2014-04-06 João Távora + + * progmodes/python.el (python-electric-pair-string-delimiter): Fix + triple-quoting electricity. (Bug#17192) + 2014-04-06 João Távora * elec-pair.el (electric-pair-post-self-insert-function): Don't skip whitespace when `electric-pair-text-pairs' and `electric-pair-pairs' were used. syntax to - electric-pair--skip-whitespace. (Bug#17183) + electric-pair--skip-whitespace. (Bug#17183) 2014-04-06 Eli Zaretskii diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b0102c55ffd..240cf8aff8c 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3651,8 +3651,9 @@ returned as is." (let ((count 0)) (while (eq (char-before (- (point) count)) last-command-event) (cl-incf count)) - (= count 3))) - (save-excursion (insert (make-string 3 last-command-event))))) + (= count 3)) + (eq (char-after) last-command-event)) + (save-excursion (insert (make-string 2 last-command-event))))) (defvar electric-indent-inhibit) diff --git a/test/ChangeLog b/test/ChangeLog index 846da9621fc..d483b0b2f9e 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-04-06 João Távora + + * automated/python-tests.el (python-triple-quote-pairing): New test. + (python-syntax-after-python-backspace): New test. + 2014-04-06 João Távora * automated/electric-tests.el (electric-pair-define-test-form): diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index dc58138ced4..8fe8f71264f 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -134,6 +134,16 @@ aliqua." ;;; Font-lock and syntax +(ert-deftest python-syntax-after-python-backspace () + ;; `python-indent-dedent-line-backspace' garbles syntax + :expected-result :failed + (python-tests-with-temp-buffer + "\"\"\"" + (goto-char (point-max)) + (python-indent-dedent-line-backspace 1) + (should (string= (buffer-string) "\"\"")) + (should (null (nth 3 (syntax-ppss)))))) + ;;; Indentation @@ -2696,6 +2706,9 @@ def foo(a, b, c): (equal (symbol-value (car ccons)) (cdr ccons))))) (kill-buffer buffer))) + +;;; Electricity + (ert-deftest python-util-forward-comment-1 () (python-tests-with-temp-buffer (concat @@ -2708,6 +2721,32 @@ def foo(a, b, c): (python-util-forward-comment -1) (should (= (point) (point-min))))) +(ert-deftest python-triple-quote-pairing () + (python-tests-with-temp-buffer + "\"\"\n" + (goto-char (1- (point-max))) + (let ((last-command-event ?\")) + (call-interactively 'self-insert-command)) + (should (string= (buffer-string) + "\"\"\"\"\"\"\n")) + (should (= (point) 4))) + (python-tests-with-temp-buffer + "\n" + (let ((last-command-event ?\")) + (dotimes (i 3) + (call-interactively 'self-insert-command))) + (should (string= (buffer-string) + "\"\"\"\"\"\"\n")) + (should (= (point) 4))) + (python-tests-with-temp-buffer + "\"\n\"\"\n" + (goto-char (1- (point-max))) + (let ((last-command-event ?\")) + (call-interactively 'self-insert-command)) + (should (= (point) (1- (point-max)))) + (should (string= (buffer-string) + "\"\n\"\"\"\n")))) + (provide 'python-tests) -- 2.39.2