]> git.eshelyaron.com Git - dict.git/commitdiff
FIXED: detecting end of clause with inline comments ending with "."
authorEshel Yaron <me@eshelyaron.com>
Fri, 7 Oct 2022 09:44:08 +0000 (12:44 +0300)
committerEshel Yaron <me@eshelyaron.com>
Fri, 7 Oct 2022 09:54:19 +0000 (12:54 +0300)
NEWS.org
sweeprolog-tests.el
sweeprolog.el

index 19b030de97d1f4bd6e9750e8d73eec94f3654e57..e4b8d6582883d3ca5d6beb9b99cab9724903305d 100644 (file)
--- a/NEWS.org
+++ b/NEWS.org
@@ -11,6 +11,16 @@ SWI-Prolog in Emacs.
 For further details, please consult the manual:
 <https://eshelyaron.com/sweep.html>.
 
+* Version 0.5.2 on 2022-10-07
+
+** Fixed bug in detecting the end of a clause with commented fullstops
+
+This version includes a fix in ~sweeprolog-end-of-top-term~, which is
+used to locate the end of the current clause.  Previously this
+function would get "confused" by in-clause comments that end with a
+fullstop (see the added test case in ~sweeprolog-test.el~ for an
+example).  Reported by Jan Wielemaker.
+
 * Version 0.5.0 on 2022-10-04
 
 ** New special buffer for listing and working with multiple top-levels
@@ -32,7 +42,6 @@ above command called ~sweeprolog-top-level-signal-current~ that operates
 on the top-level thread of the current buffer.  This command is also
 newly bound to ~C-c C-c~ in top-level buffers.
 
-
 ** New command ~sweeprolog-document-predicate-at-point~ in ~sweeprolog-mode~ buffers
 
 ~sweeprolog-document-predicate-at-point~ is a new command available in
index a294c5f6019e86fd097b85b7e4915de9d7a64611..c02f7e87510dccf2d3e9a94140861187bca9df73 100644 (file)
   (should (equal (sweeprolog-cut-query) t)))
 
 
+(ert-deftest fullstop-detection ()
+  "Tests detecting the fullstop in presence of confusing comments."
+  (with-temp-buffer
+    (sweeprolog-mode)
+    (insert "
+scasp_and_show(Q, Model, Tree) :-
+    scasp_mode(M0, T0),
+    setup_call_cleanup(
+        set_scasp_mode(Model, Tree),
+        (   scasp(Q, [])
+        ;   false                       % make always nondet.
+        ),
+        set_scasp_mode(M0, T0)).
+")
+    (goto-char (point-min))
+    (sweeprolog-end-of-top-term)
+    (should (= (point) 252))))
+
 (defun sweeprolog-test-indentation (given expected)
   (with-temp-buffer
     (sweeprolog-mode)
index 6f071f1a99740bf50b4b9f020d436873a1a98d8e..7f68079d0ccfcb62d7d06bb34502b143245def1a 100644 (file)
@@ -6,7 +6,7 @@
 ;; Maintainer: Eshel Yaron <~eshel/dev@lists.sr.ht>
 ;; Keywords: prolog languages extensions
 ;; URL: https://git.sr.ht/~eshel/sweep
-;; Package-Version: 0.5.1
+;; Package-Version: 0.5.2
 ;; Package-Requires: ((emacs "28"))
 
 ;; This file is NOT part of GNU Emacs.
@@ -1708,7 +1708,11 @@ Interactively, a prefix arg means to prompt for BUFFER."
         (forward-char))
     (or (re-search-forward (rx "." (or white "\n")) nil t)
         (goto-char (point-max)))
-    (while (and (nth 8 (syntax-ppss)) (not (eobp)))
+    (while (and (or (nth 8 (syntax-ppss))
+                    (save-excursion
+                      (nth 8 (syntax-ppss (max (point-min)
+                                               (1- (point)))))))
+                (not (eobp)))
       (while (and (nth 8 (syntax-ppss)) (not (eobp)))
         (forward-char))
       (or (re-search-forward (rx "." (or white "\n")) nil t)