bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#60142: 28.1; python.el Incorrect region when python-shell-send-regio


From: Pierre Mercatoris
Subject: bug#60142: 28.1; python.el Incorrect region when python-shell-send-region from indented code
Date: Fri, 30 Dec 2022 14:14:58 +0100

Hello and sorry for the late reply..

Excuse my ignorance, but how would I need to go about to apply those changes to test them?

Furthermore, I am not sure the main issue I raised has been diluted. Basically I was wondering why a region, which does not include any indentation (as it is a fragment of a line), is sent to the repl results in indentation error if the life the fragment comes from was indented. In the case Kobarty described above, he is mentioning sending the whole line to the repl, in which case it can be debated how to deal with indentation. However, my issue is that equivalent regions sent to the repl without any indentation within them results in different behaviours depending on where those regions (fragments of line) come from.

I hope I could explain myself better.

Thank you all for your interest in the matter.

On Thu, Dec 22, 2022 at 4:01 PM kobarity <kobarity@gmail.com> wrote:
Augusto Stoffel wrote:
> On Sun, 18 Dec 2022 at 12:39, Eli Zaretskii wrote:
> >> If I select the `a` or `a = "test"` it will correctly send it to the
> >> console, however it won't echo the evaluation of the statement.
>
> I can at least explain why this happens and is expected.
>
> An evaluation result is printed only if you send a bunch of statements,
> the last of which is an _expression_.  OTOH, since whitespace is
> significant in Python, if you evaluate anything that's not a "toplevel
> form" it gets wrapper in a `if True:` statement, so the actually
> evaluated code is not a simple _expression_ anymore.
>
> It seems hard to work around this limitation.

Sorry for the late reply.

As Augusto explained, `if True:` is added to the indented region.
This behavior is documented in `python-shell-buffer-substring'. Maybe
it's better to add a reference to `python-shell-buffer-substring' in
the docstring of `python-shell-send-region'.

What I'm trying to do is to improve the behavior in some use cases.
Specifically, there is no need to add `if True:` if the region
consists of a single statement such as `a` or `a = "test"`.  Removing
leading spaces should be enough to avoid an indentation error even if
the single statement spans multiple lines.

The corner case is the following use case.

#+begin_src python
if True:
    s = """
    a = 1
    b = 2
"""
#+end_src

Let's assume we want to send the lines "a = 1" and "b = 1" only.
Although they are part of a single statement (multiline string), `if
True:` should be added to avoid an indentation error.  In other words,
they should not be considered as a single statement.  To address such
situation, the single statement check should be done after calling
`narrow-to-region'.

Attached is a patch to achieve this.  I appreciate your comments.

Thanks,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]