Make Python evaluation work more reliably

* lisp/progmodes/python.el (python-shell-buffer-substring): Make
more regions valid Python code (bug#55174).

Copyright-paperwork-exempt: yes
This commit is contained in:
Jin Choi 2022-04-30 13:34:57 +02:00 committed by Lars Ingebrigtsen
parent 2a2b3f5834
commit 5a10e6377c
2 changed files with 16 additions and 25 deletions

View file

@ -3292,22 +3292,25 @@ the python shell:
(goto-char start)
(python-util-forward-comment 1)
(current-indentation))))
(fillstr (and (not no-cookie)
(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)))))
(fillstr (cond (starts-at-point-min-p
nil)
((not no-cookie)
(concat
(format "# -*- coding: %s -*-\n" encoding)
(make-string
;; Subtract 2 because of the coding cookie.
(- (line-number-at-pos start) 2) ?\n)))
(t
(make-string (- (line-number-at-pos start) 1) ?\n)))))
(with-temp-buffer
(python-mode)
(when fillstr
(insert fillstr))
(insert substring)
(goto-char (point-min))
(when (not toplevel-p)
(insert "if True:")
(forward-line -1)
(insert "if True:\n")
(delete-region (point) (line-end-position)))
(insert substring)
(when nomain
(let* ((if-name-main-start-end
(and nomain

View file

@ -3503,10 +3503,7 @@ def foo():
(should (string= (python-shell-buffer-substring
(python-tests-look-at "print ('a')")
(point-max))
"if True:
print ('a')
"))))
"# -*- coding: utf-8 -*-\nif True:\n print ('a')\n\n"))))
(ert-deftest python-shell-buffer-substring-11 ()
"Check substring from partial block and point within indentation."
@ -3521,10 +3518,7 @@ def foo():
(backward-char 1)
(point))
(point-max))
"if True:
print ('a')
"))))
"# -*- coding: utf-8 -*-\nif True:\n print ('a')\n\n"))))
(ert-deftest python-shell-buffer-substring-12 ()
"Check substring from partial block and point in whitespace."
@ -3539,13 +3533,7 @@ def foo():
(should (string= (python-shell-buffer-substring
(python-tests-look-at "# Whitespace")
(point-max))
"if True:
# Whitespace
print ('a')
"))))
"# -*- coding: utf-8 -*-\n\nif True:\n # Whitespace\n\n print ('a')\n\n"))))