master b2177acb8c8: Fix prog-fill-reindent-defun to better handle an active region

Juri Linkov <[email protected]> Tue, 30 Jun 2026 11:54:07 -0400 (EDT)
Newsgroups gmane.emacs.diffs
Message-ID <[email protected]>
branch: master
commit b2177acb8c8293386615f1181180c32f9d574f08
Author: Juri Linkov <[email protected]>
Commit: Juri Linkov <[email protected]>

    Fix prog-fill-reindent-defun to better handle an active region
    
    * lisp/progmodes/prog-mode.el (prog--text-at-point-or-region-p):
    New function (bug#63790, bug#81281).
    (prog-fill-reindent-defun-default):
    Use it instead of 'prog--text-at-point-p'.
    
    * lisp/treesit.el (treesit-fill-reindent-defun):
    Use it instead of 'prog--text-at-point-p'.
---
 lisp/progmodes/prog-mode.el | 10 +++++++++-
 lisp/treesit.el             |  4 ++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index afa18d9958b..a1cc32d3601 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -166,6 +166,14 @@ instead."
         (and (re-search-forward "\\s-*\\s<" (line-end-position) t)
              (nth 8 (syntax-ppss))))))
 
+(defun prog--text-at-point-or-region-p ()
+  "Return non-nil if point or region's other end are in text."
+  (or (prog--text-at-point-p)
+      (and (use-region-p)
+           (save-excursion
+             (goto-char (mark))
+             (prog--text-at-point-p)))))
+
 (defvar prog-fill-reindent-defun-function
   #'prog-fill-reindent-defun-default
   "Function called by `prog-fill-reindent-defun' to do the actual work.
@@ -176,7 +184,7 @@ It should take the same argument as `prog-fill-reindent-defun'.")
 JUSTIFY is the same as in `fill-paragraph'."
   (interactive "P")
   (save-excursion
-    (if (prog--text-at-point-p)
+    (if (prog--text-at-point-or-region-p)
         (fill-paragraph justify (region-active-p))
       (beginning-of-defun)
       (let ((start (point)))
diff --git a/lisp/treesit.el b/lisp/treesit.el
index dbb39b19226..b5c7f2852d8 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -58,7 +58,7 @@
 (require 'cl-lib)
 (require 'font-lock)
 (require 'seq)
-(require 'prog-mode) ; For `prog--text-at-point-p'.
+(require 'prog-mode) ; For `prog--text-at-point-or-region-p'.
 
 ;;; Function declarations
 
@@ -4165,7 +4165,7 @@ This is a tree-sitter implementation of `prog-fill-reindent-defun'.
 JUSTIFY is the same as in `fill-paragraph'."
   (interactive "P")
   (save-excursion
-    (if (prog--text-at-point-p)
+    (if (prog--text-at-point-or-region-p)
         (fill-paragraph justify (region-active-p))
       (let* ((treesit-defun-tactic 'parent-first)
              (node (treesit-defun-at-point)))