GNU logs - #77941, boring messages


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#77941: [PATCH] Fix Python block end predicates
Resent-From: kobarity <kobarity@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Sun, 20 Apr 2025 14:57:01 +0000
Resent-Message-ID: <handler.77941.B.174516100717635 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 77941
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: 77941 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.174516100717635
          (code B ref -1); Sun, 20 Apr 2025 14:57:01 +0000
Received: (at submit) by debbugs.gnu.org; 20 Apr 2025 14:56:47 +0000
Received: from localhost ([127.0.0.1]:50517 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6W6A-0004aG-3I
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:46 -0400
Received: from lists.gnu.org ([2001:470:142::17]:58736)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <kobarity@HIDDEN>)
 id 1u6W67-0004Z9-Ec
 for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W60-0008Ei-RP
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W5z-00020i-71
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: by mail-pf1-x42e.google.com with SMTP id
 d2e1a72fcca58-7398d65476eso2576999b3a.1
 for <bug-gnu-emacs@HIDDEN>; Sun, 20 Apr 2025 07:56:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745160993; x=1745765793; darn=gnu.org;
 h=mime-version:user-agent:subject:to:from:message-id:date:from:to:cc
 :subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=imcGiuHR9RlaBNzKgtr6/rvEIl7W8kV4YJ64rG5BaXeZciNrt0kDGYzIhjP+zkLwVY
 RwF1QbxGYhHIL17hKk3quQ1ToUQRVWf91UM1T4KPG3Cr7MnJmtnVWKHXOxmXrm5ZwAtE
 TmAAWvCgimNinNh6H4rGqLBl7UB8fjMr9Vj7fmunBBlgwXY9C3pPcY7anAshVuPzIPBl
 v9f6g/wKxwjc3PeR5KB22dZjeD61HKdJRj5m2ueIjPKGj2SKKuNI5p8Strpo6akPsbi6
 1uASlz7JB2X/KvUzp3jAVvxHvQiYZsj+2F0fCYe5qW+KdJKXUxIsToNZbQhFW+YaHsuo
 4ryQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745160993; x=1745765793;
 h=mime-version:user-agent:subject:to:from:message-id:date
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=rJpTjdtz6GbacmGp4WKwmkdnYCU3slhEmQbwg7pRJ6lxSA11pmJZpKmGMUZg2E7uK6
 6kEBZTaBXLBwcC4hvkoJBUEf4yW4cBrJdXQ1wmU/sOjQA5z0+atK32rNxJOnE1WWvKxF
 sST4AWhVyIV8EQBb6YpSMo1aNMEOgzg1MoFzJxYS3k3zAVT5n3r6owx9BAVcRkSuC5Zu
 BHaY6dWHdZzbT3KV3ItY4X3GkEIe2AvB39Qoa9sPXbYa2SYqoLIhuhAbGoYvraimBJx0
 3jJUk0Mm4F/Xs98JDq08nUHs5lG0WaTRR1Xii1Pw2CFybNi4wDWS4sorYQGDL6vDh2xj
 tdaQ==
X-Gm-Message-State: AOJu0Yycxv45tEQwf8zzvKu839mDrYlLyc6bhPzwj7e1QpRmR1Q0rIX5
 FJO/x00ZVZoXX51JZp5MHEScSi8sB00xGFpYNi/vzCN7Is0QLuP+qIZGNA==
X-Gm-Gg: ASbGncuPj6ky5pDYJn/VWQ0n6UEuEcKYtt/ejUBkaaqex5gdnMh9uNNPoTAOwp9hktW
 KdXTZQmPSp5zs0CxY/AYJA87MoXtv9/UjSh5XGVZ9dUOgA4NY+94bw3v4kmj0VMVj72YlEDqWgJ
 RzN6MuGO/b51TdVgNPHQnKG0im/CgNGKeD7wp8RnBPdSPm4RD8jB6JoA9kBvfQ/iu+E31X4gJ0r
 yzfng6xbwA2y4sRTbvGOwH1XXZxogpGgxJsNDm1nxP7RWmwlnLHUpouxuyrgzgKqAZ7xiVo5IBt
 1XI1hQvauZ/G0P8Jbu2g2T0xEm3dDELbe7CTOes/6mY62abS3xchC4gnRnM9gKICfUC+lkO4ond
 p25DNsg==
X-Google-Smtp-Source: AGHT+IHaeFIJ7Clw1AU8fIfVjc33ojewjbGtnWrM79tatkG7utn/Xobjt4z1FUf8/hwZ1e34AobEjQ==
X-Received: by 2002:a05:6a00:4b03:b0:725:4a1b:38ec with SMTP id
 d2e1a72fcca58-73dbe4e6458mr14168557b3a.3.1745160992996; 
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Received: from localhost (58x12x133x161.ap58.ftth.ucom.ne.jp. [58.12.133.161])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-73dbf8e0c09sm4828498b3a.38.2025.04.20.07.56.31
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Date: Sun, 20 Apr 2025 23:56:29 +0900
Message-ID: <eke75xiyyj8i.wl-kobarity@HIDDEN>
From: kobarity <kobarity@HIDDEN>
User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue)
 FLIM-LB/1.14.9 (=?UTF-8?Q?Goj=C5=8D?=) APEL-LB/10.8 EasyPG/1.0.0
 Emacs/31.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)
MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue")
Content-Type: multipart/mixed; boundary="Multipart_Sun_Apr_20_23:56:29_2025-1"
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=kobarity@HIDDEN; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: text/plain; charset=US-ASCII


In the process of looking into #77620, I noticed bugs in the
end-of-block detection functions in python.el.  If there is a comment
on the last line of the block, `python-info-statement-ends-block-p'
and `python-info-end-of-block-p' will not work correctly. 

Try the following Python code.

def func():
    return 0  # Comment

When the point is located after "0" of the return statement, both
`python-info-statement-ends-block-p' and `python-info-end-of-block-p'
return nil.  If there is no comment on the line, they return t as
expected.

This bug affects `python-nav-forward-sexp'.  In the above example, if
the point is located at the beginning of "def func()" line,
(python-nav-forward-sexp) moves the point to after "0".  This is the
expected behavior.

However, if we execute (python-nav-forward-sexp -1) there, it moves
the point to "0". This is not the expected behavior.  If there is no
comment, it moves the point to the beginning of "def func()" line.

Attached is a patch that fixes this problem.

--
In GNU Emacs 31.0.50 (build 8, x86_64-pc-linux-gnu, GTK+ Version
 3.24.41, cairo version 1.18.0) of 2025-01-01 built on ubuntu2404
Repository revision: 78bc5949db489b143f7424540d6cc56fc529c9ea
Repository branch: master
System Description: Ubuntu 24.04.2 LTS

Configured using:
 'configure --with-pgtk --with-native-compilation --with-tree-sitter'

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: application/octet-stream; type=patch; name="0001-Fix-Python-block-end-predicates.patch"
Content-Disposition: attachment; filename="0001-Fix-Python-block-end-predicates.patch"
Content-Transfer-Encoding: 7bit

From 3056104cb0b5599bf11e7764a4c9138bf0ef2c62 Mon Sep 17 00:00:00 2001
From: kobarity <kobarity@HIDDEN>
Date: Sun, 20 Apr 2025 21:14:46 +0900
Subject: [PATCH] Fix Python block end predicates

* lisp/progmodes/python.el
(python-info-statement-ends-block-p),
(python-info-end-of-block-p): Add consideration of comments.
* test/lisp/progmodes/python-tests.el
(python-info-statement-ends-block-p-3),
(python-info-end-of-block-p-3): New tests.
---
 lisp/progmodes/python.el            |  9 +++++++--
 test/lisp/progmodes/python-tests.el | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 32035773fde..b03e4f9efdf 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -6159,7 +6159,9 @@ python-info-statement-ends-block-p
   (let ((end-of-block-pos (save-excursion
                             (python-nav-end-of-block)))
         (end-of-statement-pos (save-excursion
-                                (python-nav-end-of-statement))))
+                                (python-nav-end-of-statement)
+                                (python-util-forward-comment -1)
+                                (point))))
     (and end-of-block-pos end-of-statement-pos
          (= end-of-block-pos end-of-statement-pos))))
 
@@ -6182,7 +6184,10 @@ python-info-beginning-of-block-p
 
 (defun python-info-end-of-block-p ()
   "Return non-nil if point is at end of block."
-  (and (python-info-end-of-statement-p)
+  (and (= (point) (save-excursion
+                    (python-nav-end-of-statement)
+                    (python-util-forward-comment -1)
+                    (point)))
        (python-info-statement-ends-block-p)))
 
 (define-obsolete-function-alias
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 898e2b036e0..22a7c3a5e89 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -5821,6 +5821,15 @@ python-info-statement-ends-block-p-2
    (python-tests-look-at "raise ValueError(")
    (should (python-info-statement-ends-block-p))))
 
+(ert-deftest python-info-statement-ends-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "print()")
+   (should (python-info-statement-ends-block-p))))
+
 (ert-deftest python-info-beginning-of-statement-p-1 ()
   (python-tests-with-temp-buffer
    "
@@ -5983,6 +5992,15 @@ python-info-end-of-block-p-2
    (python-util-forward-comment -1)
    (should (python-info-end-of-block-p))))
 
+(ert-deftest python-info-end-of-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "  # Comment")
+   (should (python-info-end-of-block-p))))
+
 (ert-deftest python-info-dedenter-opening-block-position-1 ()
   (python-tests-with-temp-buffer
       "
-- 
2.43.0


--Multipart_Sun_Apr_20_23:56:29_2025-1--




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: kobarity <kobarity@HIDDEN>
Subject: bug#77941: Acknowledgement ([PATCH] Fix Python block end predicates)
Message-ID: <handler.77941.B.174516100717635.ack <at> debbugs.gnu.org>
References: <eke75xiyyj8i.wl-kobarity@HIDDEN>
X-Gnu-PR-Message: ack 77941
X-Gnu-PR-Package: emacs
X-Gnu-PR-Keywords: patch
Reply-To: 77941 <at> debbugs.gnu.org
Date: Sun, 20 Apr 2025 14:57:02 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 77941 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
77941: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D77941
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent:


MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Eli Zaretskii <eliz@HIDDEN>
Subject: bug#77941: closed ([PATCH] Fix Python block end predicates)
CC: tracker <at> debbugs.gnu.org
Message-ID: <handler.77941.D77941.17456666304163.ackdone <at> debbugs.gnu.org>
References: <86h62bupxf.fsf@HIDDEN> <eke75xiyyj8i.wl-kobarity@HIDDEN>
X-Gnu-PR-Message: closed 77941
X-Gnu-PR-Package: emacs
X-Gnu-PR-Keywords: patch
Date: Sat, 26 Apr 2025 11:24:02 +0000
Content-Type: multipart/mixed; boundary="----------=_1745666642-4210-0"

This is a multi-part message in MIME format...

------------=_1745666642-4210-0
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=utf-8

Your message dated Sat, 26 Apr 2025 14:23:40 +0300
with message-id <86h62bupxf.fsf@HIDDEN>
and subject line Re: bug#77941: [PATCH] Fix Python block end predicates
has caused the debbugs.gnu.org bug report #77941,
regarding [PATCH] Fix Python block end predicates
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@HIDDEN)


--=20
77941: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D77941
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems

------------=_1745666642-4210-0
Content-Type: message/rfc822
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

Received: (at submit) by debbugs.gnu.org; 20 Apr 2025 14:56:47 +0000
Received: from localhost ([127.0.0.1]:50517 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6W6A-0004aG-3I
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:46 -0400
Received: from lists.gnu.org ([2001:470:142::17]:58736)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <kobarity@HIDDEN>)
 id 1u6W67-0004Z9-Ec
 for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W60-0008Ei-RP
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W5z-00020i-71
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: by mail-pf1-x42e.google.com with SMTP id
 d2e1a72fcca58-7398d65476eso2576999b3a.1
 for <bug-gnu-emacs@HIDDEN>; Sun, 20 Apr 2025 07:56:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745160993; x=1745765793; darn=gnu.org;
 h=mime-version:user-agent:subject:to:from:message-id:date:from:to:cc
 :subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=imcGiuHR9RlaBNzKgtr6/rvEIl7W8kV4YJ64rG5BaXeZciNrt0kDGYzIhjP+zkLwVY
 RwF1QbxGYhHIL17hKk3quQ1ToUQRVWf91UM1T4KPG3Cr7MnJmtnVWKHXOxmXrm5ZwAtE
 TmAAWvCgimNinNh6H4rGqLBl7UB8fjMr9Vj7fmunBBlgwXY9C3pPcY7anAshVuPzIPBl
 v9f6g/wKxwjc3PeR5KB22dZjeD61HKdJRj5m2ueIjPKGj2SKKuNI5p8Strpo6akPsbi6
 1uASlz7JB2X/KvUzp3jAVvxHvQiYZsj+2F0fCYe5qW+KdJKXUxIsToNZbQhFW+YaHsuo
 4ryQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745160993; x=1745765793;
 h=mime-version:user-agent:subject:to:from:message-id:date
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=rJpTjdtz6GbacmGp4WKwmkdnYCU3slhEmQbwg7pRJ6lxSA11pmJZpKmGMUZg2E7uK6
 6kEBZTaBXLBwcC4hvkoJBUEf4yW4cBrJdXQ1wmU/sOjQA5z0+atK32rNxJOnE1WWvKxF
 sST4AWhVyIV8EQBb6YpSMo1aNMEOgzg1MoFzJxYS3k3zAVT5n3r6owx9BAVcRkSuC5Zu
 BHaY6dWHdZzbT3KV3ItY4X3GkEIe2AvB39Qoa9sPXbYa2SYqoLIhuhAbGoYvraimBJx0
 3jJUk0Mm4F/Xs98JDq08nUHs5lG0WaTRR1Xii1Pw2CFybNi4wDWS4sorYQGDL6vDh2xj
 tdaQ==
X-Gm-Message-State: AOJu0Yycxv45tEQwf8zzvKu839mDrYlLyc6bhPzwj7e1QpRmR1Q0rIX5
 FJO/x00ZVZoXX51JZp5MHEScSi8sB00xGFpYNi/vzCN7Is0QLuP+qIZGNA==
X-Gm-Gg: ASbGncuPj6ky5pDYJn/VWQ0n6UEuEcKYtt/ejUBkaaqex5gdnMh9uNNPoTAOwp9hktW
 KdXTZQmPSp5zs0CxY/AYJA87MoXtv9/UjSh5XGVZ9dUOgA4NY+94bw3v4kmj0VMVj72YlEDqWgJ
 RzN6MuGO/b51TdVgNPHQnKG0im/CgNGKeD7wp8RnBPdSPm4RD8jB6JoA9kBvfQ/iu+E31X4gJ0r
 yzfng6xbwA2y4sRTbvGOwH1XXZxogpGgxJsNDm1nxP7RWmwlnLHUpouxuyrgzgKqAZ7xiVo5IBt
 1XI1hQvauZ/G0P8Jbu2g2T0xEm3dDELbe7CTOes/6mY62abS3xchC4gnRnM9gKICfUC+lkO4ond
 p25DNsg==
X-Google-Smtp-Source: AGHT+IHaeFIJ7Clw1AU8fIfVjc33ojewjbGtnWrM79tatkG7utn/Xobjt4z1FUf8/hwZ1e34AobEjQ==
X-Received: by 2002:a05:6a00:4b03:b0:725:4a1b:38ec with SMTP id
 d2e1a72fcca58-73dbe4e6458mr14168557b3a.3.1745160992996; 
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Received: from localhost (58x12x133x161.ap58.ftth.ucom.ne.jp. [58.12.133.161])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-73dbf8e0c09sm4828498b3a.38.2025.04.20.07.56.31
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Date: Sun, 20 Apr 2025 23:56:29 +0900
Message-ID: <eke75xiyyj8i.wl-kobarity@HIDDEN>
From: kobarity <kobarity@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: [PATCH] Fix Python block end predicates
User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue)
 FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0
 Emacs/31.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)
MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue")
Content-Type: multipart/mixed; boundary="Multipart_Sun_Apr_20_23:56:29_2025-1"
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=kobarity@HIDDEN; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: text/plain; charset=US-ASCII


In the process of looking into #77620, I noticed bugs in the
end-of-block detection functions in python.el.  If there is a comment
on the last line of the block, `python-info-statement-ends-block-p'
and `python-info-end-of-block-p' will not work correctly. 

Try the following Python code.

def func():
    return 0  # Comment

When the point is located after "0" of the return statement, both
`python-info-statement-ends-block-p' and `python-info-end-of-block-p'
return nil.  If there is no comment on the line, they return t as
expected.

This bug affects `python-nav-forward-sexp'.  In the above example, if
the point is located at the beginning of "def func()" line,
(python-nav-forward-sexp) moves the point to after "0".  This is the
expected behavior.

However, if we execute (python-nav-forward-sexp -1) there, it moves
the point to "0". This is not the expected behavior.  If there is no
comment, it moves the point to the beginning of "def func()" line.

Attached is a patch that fixes this problem.

--
In GNU Emacs 31.0.50 (build 8, x86_64-pc-linux-gnu, GTK+ Version
 3.24.41, cairo version 1.18.0) of 2025-01-01 built on ubuntu2404
Repository revision: 78bc5949db489b143f7424540d6cc56fc529c9ea
Repository branch: master
System Description: Ubuntu 24.04.2 LTS

Configured using:
 'configure --with-pgtk --with-native-compilation --with-tree-sitter'

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: application/octet-stream; type=patch; name="0001-Fix-Python-block-end-predicates.patch"
Content-Disposition: attachment; filename="0001-Fix-Python-block-end-predicates.patch"
Content-Transfer-Encoding: 7bit

From 3056104cb0b5599bf11e7764a4c9138bf0ef2c62 Mon Sep 17 00:00:00 2001
From: kobarity <kobarity@HIDDEN>
Date: Sun, 20 Apr 2025 21:14:46 +0900
Subject: [PATCH] Fix Python block end predicates

* lisp/progmodes/python.el
(python-info-statement-ends-block-p),
(python-info-end-of-block-p): Add consideration of comments.
* test/lisp/progmodes/python-tests.el
(python-info-statement-ends-block-p-3),
(python-info-end-of-block-p-3): New tests.
---
 lisp/progmodes/python.el            |  9 +++++++--
 test/lisp/progmodes/python-tests.el | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 32035773fde..b03e4f9efdf 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -6159,7 +6159,9 @@ python-info-statement-ends-block-p
   (let ((end-of-block-pos (save-excursion
                             (python-nav-end-of-block)))
         (end-of-statement-pos (save-excursion
-                                (python-nav-end-of-statement))))
+                                (python-nav-end-of-statement)
+                                (python-util-forward-comment -1)
+                                (point))))
     (and end-of-block-pos end-of-statement-pos
          (= end-of-block-pos end-of-statement-pos))))
 
@@ -6182,7 +6184,10 @@ python-info-beginning-of-block-p
 
 (defun python-info-end-of-block-p ()
   "Return non-nil if point is at end of block."
-  (and (python-info-end-of-statement-p)
+  (and (= (point) (save-excursion
+                    (python-nav-end-of-statement)
+                    (python-util-forward-comment -1)
+                    (point)))
        (python-info-statement-ends-block-p)))
 
 (define-obsolete-function-alias
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 898e2b036e0..22a7c3a5e89 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -5821,6 +5821,15 @@ python-info-statement-ends-block-p-2
    (python-tests-look-at "raise ValueError(")
    (should (python-info-statement-ends-block-p))))
 
+(ert-deftest python-info-statement-ends-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "print()")
+   (should (python-info-statement-ends-block-p))))
+
 (ert-deftest python-info-beginning-of-statement-p-1 ()
   (python-tests-with-temp-buffer
    "
@@ -5983,6 +5992,15 @@ python-info-end-of-block-p-2
    (python-util-forward-comment -1)
    (should (python-info-end-of-block-p))))
 
+(ert-deftest python-info-end-of-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "  # Comment")
+   (should (python-info-end-of-block-p))))
+
 (ert-deftest python-info-dedenter-opening-block-position-1 ()
   (python-tests-with-temp-buffer
       "
-- 
2.43.0


--Multipart_Sun_Apr_20_23:56:29_2025-1--



------------=_1745666642-4210-0
Content-Type: message/rfc822
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

Received: (at 77941-done) by debbugs.gnu.org; 26 Apr 2025 11:23:50 +0000
Received: from localhost ([127.0.0.1]:58744 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u8ddO-000155-1d
	for submit <at> debbugs.gnu.org; Sat, 26 Apr 2025 07:23:50 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:57286)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1u8ddM-00014n-6d
 for 77941-done <at> debbugs.gnu.org; Sat, 26 Apr 2025 07:23:48 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1u8ddG-000767-T7; Sat, 26 Apr 2025 07:23:42 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=65fnicg5JtL+zjCqIWvHvVJ4v/QnMeIhuCTaaFGucnY=; b=hlPYRuPgdnMo
 G3a8yMbO78wkvvHGF+24sXLPw5YoHc8BXC+aQAdI5snduLD+z4uTOba3XGoDVVn+axXCJ9qoryPfl
 E1LJnDXXi8VV6boDY8QCKbPlAMNnXRKiWpj2/ucLS/rU02XHcd4xcP6SClSUnblL+08BvtclcxWZ6
 hgL0u5uOKKa/bxjvYoPZ6e4GthoCHWx07qazTAysFywd9+5SKN5RF5NBEspzEF83SY1AzY1p+HtBL
 NhYRga42/euRijjJkyrp5LaEubqXhZnT0dmB2GJJYbvPfGbMM4kyr9B2zg8nnu2tI3+ty+Ha0eQPx
 283jjQW8/sEkKeAzZ8ye4Q==;
Date: Sat, 26 Apr 2025 14:23:40 +0300
Message-Id: <86h62bupxf.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: kobarity <kobarity@HIDDEN>
In-Reply-To: <eke75xiyyj8i.wl-kobarity@HIDDEN> (message from kobarity on
 Sun, 20 Apr 2025 23:56:29 +0900)
Subject: Re: bug#77941: [PATCH] Fix Python block end predicates
References: <eke75xiyyj8i.wl-kobarity@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 77941-done
Cc: 77941-done <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 20 Apr 2025 23:56:29 +0900
> From: kobarity <kobarity@HIDDEN>
> 
> In the process of looking into #77620, I noticed bugs in the
> end-of-block detection functions in python.el.  If there is a comment
> on the last line of the block, `python-info-statement-ends-block-p'
> and `python-info-end-of-block-p' will not work correctly. 
> 
> Try the following Python code.
> 
> def func():
>     return 0  # Comment
> 
> When the point is located after "0" of the return statement, both
> `python-info-statement-ends-block-p' and `python-info-end-of-block-p'
> return nil.  If there is no comment on the line, they return t as
> expected.
> 
> This bug affects `python-nav-forward-sexp'.  In the above example, if
> the point is located at the beginning of "def func()" line,
> (python-nav-forward-sexp) moves the point to after "0".  This is the
> expected behavior.
> 
> However, if we execute (python-nav-forward-sexp -1) there, it moves
> the point to "0". This is not the expected behavior.  If there is no
> comment, it moves the point to the beginning of "def func()" line.
> 
> Attached is a patch that fixes this problem.

Thanks, installed, and closing the bug.


------------=_1745666642-4210-0--


Message sent:


MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: kobarity <kobarity@HIDDEN>
Subject: bug#77941: closed (Re: bug#77941: [PATCH] Fix Python block end
 predicates)
Message-ID: <handler.77941.D77941.17456666304163.notifdone <at> debbugs.gnu.org>
References: <86h62bupxf.fsf@HIDDEN> <eke75xiyyj8i.wl-kobarity@HIDDEN>
X-Gnu-PR-Message: they-closed 77941
X-Gnu-PR-Package: emacs
X-Gnu-PR-Keywords: patch
Reply-To: 77941 <at> debbugs.gnu.org
Date: Sat, 26 Apr 2025 11:24:02 +0000
Content-Type: multipart/mixed; boundary="----------=_1745666642-4210-1"

This is a multi-part message in MIME format...

------------=_1745666642-4210-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

Your bug report

#77941: [PATCH] Fix Python block end predicates

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 77941 <at> debbugs.gnu.org.

--=20
77941: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D77941
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems

------------=_1745666642-4210-1
Content-Type: message/rfc822
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

Received: (at 77941-done) by debbugs.gnu.org; 26 Apr 2025 11:23:50 +0000
Received: from localhost ([127.0.0.1]:58744 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u8ddO-000155-1d
	for submit <at> debbugs.gnu.org; Sat, 26 Apr 2025 07:23:50 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:57286)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1u8ddM-00014n-6d
 for 77941-done <at> debbugs.gnu.org; Sat, 26 Apr 2025 07:23:48 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1u8ddG-000767-T7; Sat, 26 Apr 2025 07:23:42 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=65fnicg5JtL+zjCqIWvHvVJ4v/QnMeIhuCTaaFGucnY=; b=hlPYRuPgdnMo
 G3a8yMbO78wkvvHGF+24sXLPw5YoHc8BXC+aQAdI5snduLD+z4uTOba3XGoDVVn+axXCJ9qoryPfl
 E1LJnDXXi8VV6boDY8QCKbPlAMNnXRKiWpj2/ucLS/rU02XHcd4xcP6SClSUnblL+08BvtclcxWZ6
 hgL0u5uOKKa/bxjvYoPZ6e4GthoCHWx07qazTAysFywd9+5SKN5RF5NBEspzEF83SY1AzY1p+HtBL
 NhYRga42/euRijjJkyrp5LaEubqXhZnT0dmB2GJJYbvPfGbMM4kyr9B2zg8nnu2tI3+ty+Ha0eQPx
 283jjQW8/sEkKeAzZ8ye4Q==;
Date: Sat, 26 Apr 2025 14:23:40 +0300
Message-Id: <86h62bupxf.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: kobarity <kobarity@HIDDEN>
In-Reply-To: <eke75xiyyj8i.wl-kobarity@HIDDEN> (message from kobarity on
 Sun, 20 Apr 2025 23:56:29 +0900)
Subject: Re: bug#77941: [PATCH] Fix Python block end predicates
References: <eke75xiyyj8i.wl-kobarity@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 77941-done
Cc: 77941-done <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 20 Apr 2025 23:56:29 +0900
> From: kobarity <kobarity@HIDDEN>
> 
> In the process of looking into #77620, I noticed bugs in the
> end-of-block detection functions in python.el.  If there is a comment
> on the last line of the block, `python-info-statement-ends-block-p'
> and `python-info-end-of-block-p' will not work correctly. 
> 
> Try the following Python code.
> 
> def func():
>     return 0  # Comment
> 
> When the point is located after "0" of the return statement, both
> `python-info-statement-ends-block-p' and `python-info-end-of-block-p'
> return nil.  If there is no comment on the line, they return t as
> expected.
> 
> This bug affects `python-nav-forward-sexp'.  In the above example, if
> the point is located at the beginning of "def func()" line,
> (python-nav-forward-sexp) moves the point to after "0".  This is the
> expected behavior.
> 
> However, if we execute (python-nav-forward-sexp -1) there, it moves
> the point to "0". This is not the expected behavior.  If there is no
> comment, it moves the point to the beginning of "def func()" line.
> 
> Attached is a patch that fixes this problem.

Thanks, installed, and closing the bug.


------------=_1745666642-4210-1
Content-Type: message/rfc822
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

Received: (at submit) by debbugs.gnu.org; 20 Apr 2025 14:56:47 +0000
Received: from localhost ([127.0.0.1]:50517 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6W6A-0004aG-3I
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:46 -0400
Received: from lists.gnu.org ([2001:470:142::17]:58736)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <kobarity@HIDDEN>)
 id 1u6W67-0004Z9-Ec
 for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 10:56:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W60-0008Ei-RP
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <kobarity@HIDDEN>)
 id 1u6W5z-00020i-71
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 10:56:36 -0400
Received: by mail-pf1-x42e.google.com with SMTP id
 d2e1a72fcca58-7398d65476eso2576999b3a.1
 for <bug-gnu-emacs@HIDDEN>; Sun, 20 Apr 2025 07:56:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745160993; x=1745765793; darn=gnu.org;
 h=mime-version:user-agent:subject:to:from:message-id:date:from:to:cc
 :subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=imcGiuHR9RlaBNzKgtr6/rvEIl7W8kV4YJ64rG5BaXeZciNrt0kDGYzIhjP+zkLwVY
 RwF1QbxGYhHIL17hKk3quQ1ToUQRVWf91UM1T4KPG3Cr7MnJmtnVWKHXOxmXrm5ZwAtE
 TmAAWvCgimNinNh6H4rGqLBl7UB8fjMr9Vj7fmunBBlgwXY9C3pPcY7anAshVuPzIPBl
 v9f6g/wKxwjc3PeR5KB22dZjeD61HKdJRj5m2ueIjPKGj2SKKuNI5p8Strpo6akPsbi6
 1uASlz7JB2X/KvUzp3jAVvxHvQiYZsj+2F0fCYe5qW+KdJKXUxIsToNZbQhFW+YaHsuo
 4ryQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745160993; x=1745765793;
 h=mime-version:user-agent:subject:to:from:message-id:date
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=XWXddzKMeUIezYuZyaYa3Sj9QGsnFZA7pgLpzT2mBoU=;
 b=rJpTjdtz6GbacmGp4WKwmkdnYCU3slhEmQbwg7pRJ6lxSA11pmJZpKmGMUZg2E7uK6
 6kEBZTaBXLBwcC4hvkoJBUEf4yW4cBrJdXQ1wmU/sOjQA5z0+atK32rNxJOnE1WWvKxF
 sST4AWhVyIV8EQBb6YpSMo1aNMEOgzg1MoFzJxYS3k3zAVT5n3r6owx9BAVcRkSuC5Zu
 BHaY6dWHdZzbT3KV3ItY4X3GkEIe2AvB39Qoa9sPXbYa2SYqoLIhuhAbGoYvraimBJx0
 3jJUk0Mm4F/Xs98JDq08nUHs5lG0WaTRR1Xii1Pw2CFybNi4wDWS4sorYQGDL6vDh2xj
 tdaQ==
X-Gm-Message-State: AOJu0Yycxv45tEQwf8zzvKu839mDrYlLyc6bhPzwj7e1QpRmR1Q0rIX5
 FJO/x00ZVZoXX51JZp5MHEScSi8sB00xGFpYNi/vzCN7Is0QLuP+qIZGNA==
X-Gm-Gg: ASbGncuPj6ky5pDYJn/VWQ0n6UEuEcKYtt/ejUBkaaqex5gdnMh9uNNPoTAOwp9hktW
 KdXTZQmPSp5zs0CxY/AYJA87MoXtv9/UjSh5XGVZ9dUOgA4NY+94bw3v4kmj0VMVj72YlEDqWgJ
 RzN6MuGO/b51TdVgNPHQnKG0im/CgNGKeD7wp8RnBPdSPm4RD8jB6JoA9kBvfQ/iu+E31X4gJ0r
 yzfng6xbwA2y4sRTbvGOwH1XXZxogpGgxJsNDm1nxP7RWmwlnLHUpouxuyrgzgKqAZ7xiVo5IBt
 1XI1hQvauZ/G0P8Jbu2g2T0xEm3dDELbe7CTOes/6mY62abS3xchC4gnRnM9gKICfUC+lkO4ond
 p25DNsg==
X-Google-Smtp-Source: AGHT+IHaeFIJ7Clw1AU8fIfVjc33ojewjbGtnWrM79tatkG7utn/Xobjt4z1FUf8/hwZ1e34AobEjQ==
X-Received: by 2002:a05:6a00:4b03:b0:725:4a1b:38ec with SMTP id
 d2e1a72fcca58-73dbe4e6458mr14168557b3a.3.1745160992996; 
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Received: from localhost (58x12x133x161.ap58.ftth.ucom.ne.jp. [58.12.133.161])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-73dbf8e0c09sm4828498b3a.38.2025.04.20.07.56.31
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 20 Apr 2025 07:56:32 -0700 (PDT)
Date: Sun, 20 Apr 2025 23:56:29 +0900
Message-ID: <eke75xiyyj8i.wl-kobarity@HIDDEN>
From: kobarity <kobarity@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: [PATCH] Fix Python block end predicates
User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue)
 FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0
 Emacs/31.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)
MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue")
Content-Type: multipart/mixed; boundary="Multipart_Sun_Apr_20_23:56:29_2025-1"
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=kobarity@HIDDEN; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: text/plain; charset=US-ASCII


In the process of looking into #77620, I noticed bugs in the
end-of-block detection functions in python.el.  If there is a comment
on the last line of the block, `python-info-statement-ends-block-p'
and `python-info-end-of-block-p' will not work correctly. 

Try the following Python code.

def func():
    return 0  # Comment

When the point is located after "0" of the return statement, both
`python-info-statement-ends-block-p' and `python-info-end-of-block-p'
return nil.  If there is no comment on the line, they return t as
expected.

This bug affects `python-nav-forward-sexp'.  In the above example, if
the point is located at the beginning of "def func()" line,
(python-nav-forward-sexp) moves the point to after "0".  This is the
expected behavior.

However, if we execute (python-nav-forward-sexp -1) there, it moves
the point to "0". This is not the expected behavior.  If there is no
comment, it moves the point to the beginning of "def func()" line.

Attached is a patch that fixes this problem.

--
In GNU Emacs 31.0.50 (build 8, x86_64-pc-linux-gnu, GTK+ Version
 3.24.41, cairo version 1.18.0) of 2025-01-01 built on ubuntu2404
Repository revision: 78bc5949db489b143f7424540d6cc56fc529c9ea
Repository branch: master
System Description: Ubuntu 24.04.2 LTS

Configured using:
 'configure --with-pgtk --with-native-compilation --with-tree-sitter'

--Multipart_Sun_Apr_20_23:56:29_2025-1
Content-Type: application/octet-stream; type=patch; name="0001-Fix-Python-block-end-predicates.patch"
Content-Disposition: attachment; filename="0001-Fix-Python-block-end-predicates.patch"
Content-Transfer-Encoding: 7bit

From 3056104cb0b5599bf11e7764a4c9138bf0ef2c62 Mon Sep 17 00:00:00 2001
From: kobarity <kobarity@HIDDEN>
Date: Sun, 20 Apr 2025 21:14:46 +0900
Subject: [PATCH] Fix Python block end predicates

* lisp/progmodes/python.el
(python-info-statement-ends-block-p),
(python-info-end-of-block-p): Add consideration of comments.
* test/lisp/progmodes/python-tests.el
(python-info-statement-ends-block-p-3),
(python-info-end-of-block-p-3): New tests.
---
 lisp/progmodes/python.el            |  9 +++++++--
 test/lisp/progmodes/python-tests.el | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 32035773fde..b03e4f9efdf 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -6159,7 +6159,9 @@ python-info-statement-ends-block-p
   (let ((end-of-block-pos (save-excursion
                             (python-nav-end-of-block)))
         (end-of-statement-pos (save-excursion
-                                (python-nav-end-of-statement))))
+                                (python-nav-end-of-statement)
+                                (python-util-forward-comment -1)
+                                (point))))
     (and end-of-block-pos end-of-statement-pos
          (= end-of-block-pos end-of-statement-pos))))
 
@@ -6182,7 +6184,10 @@ python-info-beginning-of-block-p
 
 (defun python-info-end-of-block-p ()
   "Return non-nil if point is at end of block."
-  (and (python-info-end-of-statement-p)
+  (and (= (point) (save-excursion
+                    (python-nav-end-of-statement)
+                    (python-util-forward-comment -1)
+                    (point)))
        (python-info-statement-ends-block-p)))
 
 (define-obsolete-function-alias
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 898e2b036e0..22a7c3a5e89 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -5821,6 +5821,15 @@ python-info-statement-ends-block-p-2
    (python-tests-look-at "raise ValueError(")
    (should (python-info-statement-ends-block-p))))
 
+(ert-deftest python-info-statement-ends-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "print()")
+   (should (python-info-statement-ends-block-p))))
+
 (ert-deftest python-info-beginning-of-statement-p-1 ()
   (python-tests-with-temp-buffer
    "
@@ -5983,6 +5992,15 @@ python-info-end-of-block-p-2
    (python-util-forward-comment -1)
    (should (python-info-end-of-block-p))))
 
+(ert-deftest python-info-end-of-block-p-3 ()
+  (python-tests-with-temp-buffer
+   "
+def function():
+    print()  # Comment
+"
+   (python-tests-look-at "  # Comment")
+   (should (python-info-end-of-block-p))))
+
 (ert-deftest python-info-dedenter-opening-block-position-1 ()
   (python-tests-with-temp-buffer
       "
-- 
2.43.0


--Multipart_Sun_Apr_20_23:56:29_2025-1--



------------=_1745666642-4210-1--



Last modified: Sat, 26 Apr 2025 11:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.