From e02f243b0359006bbe019e18bd67971e01e24a81 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Sun, 24 Sep 2023 21:53:13 +0200 Subject: [PATCH] ; Fix filtering of the just created body when extracting goal * sweeprolog (sweeprolog-extract-region-to-predicate): When searching and replacing other goals subsumed by the extracted goal, use a more robust check to filter out the newly created body term from the search matches. --- sweeprolog.el | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/sweeprolog.el b/sweeprolog.el index 39f612f..4a9b157 100644 --- a/sweeprolog.el +++ b/sweeprolog.el @@ -7139,7 +7139,8 @@ where in the buffer to insert the newly created predicate." (sweeprolog--query-once "sweep" "sweep_term_variable_names" body) (prolog-exception - (user-error "Region does not contain a valid Prolog term"))))) + (user-error "Region does not contain a valid Prolog term")))) + (def-end nil)) (if (and (sweeprolog--query-once "sweep" "sweep_goal_may_cut" body) (not (y-or-n-p (concat "The selected goal contains a cut whose " @@ -7182,18 +7183,15 @@ where in the buffer to insert the newly created predicate." ".\n"))) (insert clause) (indent-region-line-by-line def-beg (point)) + (setq def-end (point)) (goto-char def-beg)))) (when all - (let ((body-beg - (+ 2 (point) - (length head) - (length neck) - sweeprolog-indent-offset))) + (let ((def-beg (point))) (save-excursion (goto-char (point-min)) (let ((sweeprolog-query-replace-term-include-match-function - (pcase-lambda (`(,beg . ,_)) - (not (= beg body-beg))))) + (pcase-lambda (`(,beg ,end . ,_)) + (not (<= def-beg beg end def-end))))) (deactivate-mark) (sweeprolog-query-replace-term body head "true" '(goal)))))) -- 2.39.2