[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master af013e0: python.el: Fix python-shell-buffer-substri
From: |
Fabi�n Ezequiel Gallina |
Subject: |
[Emacs-diffs] master af013e0: python.el: Fix python-shell-buffer-substring on indented code |
Date: |
Sun, 23 Aug 2015 22:57:40 +0000 |
branch: master
commit af013e0d4a76f0a2fd4a0e76912e8e49ae86ec2e
Author: Fabián Ezequiel Gallina <address@hidden>
Commit: Fabián Ezequiel Gallina <address@hidden>
python.el: Fix python-shell-buffer-substring on indented code
Fixes: debbugs:21086
* lisp/progmodes/python.el (python-shell-buffer-substring):
Respect current line indentation when calculating string.
* test/automated/python-tests.el
(python-shell-buffer-substring-10)
(python-shell-buffer-substring-11)
(python-shell-buffer-substring-12): New tests.
---
lisp/progmodes/python.el | 23 +++++++++-------
test/automated/python-tests.el | 55 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 10 deletions(-)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index fbe5b8b..abae8af 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -2986,29 +2986,32 @@ the python shell:
coding cookie is added.
4. Wraps indented regions under an \"if True:\" block so the
interpreter evaluates them correctly."
- (let* ((substring (buffer-substring-no-properties start end))
+ (let* ((start (save-excursion
+ ;; Normalize start to the line beginning position.
+ (goto-char start)
+ (line-beginning-position)))
+ (substring (buffer-substring-no-properties start end))
(starts-at-point-min-p (save-restriction
(widen)
(= (point-min) start)))
(encoding (python-info-encoding))
+ (toplevel-p (zerop (save-excursion
+ (goto-char start)
+ (python-util-forward-comment 1)
+ (current-indentation))))
(fillstr (when (not starts-at-point-min-p)
(concat
(format "# -*- coding: %s -*-\n" encoding)
(make-string
;; Subtract 2 because of the coding cookie.
- (- (line-number-at-pos start) 2) ?\n))))
- (toplevel-block-p (save-excursion
- (goto-char start)
- (or (zerop (line-number-at-pos start))
- (progn
- (python-util-forward-comment 1)
- (zerop (current-indentation)))))))
+ (- (line-number-at-pos start) 2) ?\n)))))
(with-temp-buffer
(python-mode)
- (if fillstr (insert fillstr))
+ (when fillstr
+ (insert fillstr))
(insert substring)
(goto-char (point-min))
- (when (not toplevel-block-p)
+ (when (not toplevel-p)
(insert "if True:")
(delete-region (point) (line-end-position)))
(when nomain
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el
index e792b0f..30b1b48 100644
--- a/test/automated/python-tests.el
+++ b/test/automated/python-tests.el
@@ -3276,6 +3276,61 @@ class Foo(models.Model):
"))))
+(ert-deftest python-shell-buffer-substring-10 ()
+ "Check substring from partial block."
+ (python-tests-with-temp-buffer
+ "
+def foo():
+ print ('a')
+"
+ (should (string= (python-shell-buffer-substring
+ (python-tests-look-at "print ('a')")
+ (point-max))
+ "if True:
+
+ print ('a')
+"))))
+
+(ert-deftest python-shell-buffer-substring-11 ()
+ "Check substring from partial block and point within indentation."
+ (python-tests-with-temp-buffer
+ "
+def foo():
+ print ('a')
+"
+ (should (string= (python-shell-buffer-substring
+ (progn
+ (python-tests-look-at "print ('a')")
+ (backward-char 1)
+ (point))
+ (point-max))
+ "if True:
+
+ print ('a')
+"))))
+
+(ert-deftest python-shell-buffer-substring-12 ()
+ "Check substring from partial block and point in whitespace."
+ (python-tests-with-temp-buffer
+ "
+def foo():
+
+ # Whitespace
+
+ print ('a')
+"
+ (should (string= (python-shell-buffer-substring
+ (python-tests-look-at "# Whitespace")
+ (point-max))
+ "if True:
+
+
+ # Whitespace
+
+ print ('a')
+"))))
+
+
;;; Shell completion
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master af013e0: python.el: Fix python-shell-buffer-substring on indented code,
Fabi�n Ezequiel Gallina <=