emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/sweeprolog f5a1f615ee 6/9: Report correct predicate indica


From: ELPA Syncer
Subject: [nongnu] elpa/sweeprolog f5a1f615ee 6/9: Report correct predicate indicators in 'C-x 4 a'
Date: Tue, 27 Jun 2023 16:03:11 -0400 (EDT)

branch: elpa/sweeprolog
commit f5a1f615ee3804df201cfa053301e9031a88d426
Author: Eshel Yaron <me@eshelyaron.com>
Commit: Eshel Yaron <me@eshelyaron.com>

    Report correct predicate indicators in 'C-x 4 a'
    
    * sweeprolog.el (sweeprolog-add-log-current-defun): New function.
    (sweeprolog-mode): Set 'add-log-current-defun-function' to it.
    
    * sweeprolog-tests.el: Test it.
---
 sweeprolog-tests.el | 22 ++++++++++++++++++++++
 sweeprolog.el       | 19 +++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/sweeprolog-tests.el b/sweeprolog-tests.el
index a3edf682b0..e074865e5a 100644
--- a/sweeprolog-tests.el
+++ b/sweeprolog-tests.el
@@ -1913,4 +1913,26 @@ head,
         (should (string= (buffer-string)
                          "% ?- true; false.\n% true\u0020\nfoo."))))))
 
+(ert-deftest add-log-current-defun ()
+  "Tests getting the predicate indicator at point."
+  (let ((temp (make-temp-file "sweeprolog-test"
+                              nil
+                              "pl"
+                              "
+foo(Bar) :-  baz(Bar).
+foo(Bar) --> baz(Bar).
+f:o(Bar) :-  baz(Bar).
+f:o(Bar) --> baz(Bar).")))
+    (find-file-literally temp)
+    (sweeprolog-mode)
+    (goto-char (point-min))
+    (forward-word)
+    (should (string= (add-log-current-defun) "foo/1"))
+    (forward-line)
+    (should (string= (add-log-current-defun) "foo//1"))
+    (forward-line)
+    (should (string= (add-log-current-defun) "f:o/1"))
+    (forward-line)
+    (should (string= (add-log-current-defun) "f:o//1"))))
+
 ;;; sweeprolog-tests.el ends here
diff --git a/sweeprolog.el b/sweeprolog.el
index ae2cd48036..fd13c27a36 100644
--- a/sweeprolog.el
+++ b/sweeprolog.el
@@ -4429,6 +4429,8 @@ certain contexts to maintain conventional Prolog layout."
   (setq-local adaptive-fill-regexp "[ \t]*")
   (setq-local fill-indent-according-to-mode t)
   (setq-local comment-multi-line t)
+  (setq-local add-log-current-defun-function
+              #'sweeprolog-add-log-current-defun)
   (setq-local mode-line-process
               '(:eval
                 (when (sweeprolog-buffer-loaded-since-last-modification-p)
@@ -6595,6 +6597,23 @@ as a comment in the source buffer at starting at POINT."
                               (format 
"`\\<sweeprolog-top-level-example-mode-map>\\[sweeprolog-top-level-example-done]'
 to quit and write contents as a comment in buffer %s" (buffer-name 
(marker-buffer marker)))))
     (sweeprolog-top-level-example-mode)))
 
+(defun sweeprolog-add-log-current-defun ()
+  "Return the indicator of the predicate defined at point, or nil.
+
+This function is used as a `add-log-current-defun-function' in
+`sweeprolog-mode' buffers."
+  (when-let ((def (sweeprolog-definition-at-point)))
+    (let ((fun  (nth 1 def))
+          (ari  (nth 2 def))
+          (neck (nth 4 def))
+          (ind  "/")
+          (mod (nth 5 def)))
+      (when (string= neck "-->")
+        (setq ari (- ari 2)
+              ind "//"))
+      (concat (when mod (concat mod ":"))
+              fun ind (number-to-string ari)))))
+
 ;;;; Footer
 
 (provide 'sweeprolog)



reply via email to

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