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

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

[nongnu] elpa/sweeprolog d5983b7fe4 1/2: FIXED: variable name completion


From: ELPA Syncer
Subject: [nongnu] elpa/sweeprolog d5983b7fe4 1/2: FIXED: variable name completion on Emacs 27
Date: Mon, 7 Nov 2022 12:59:48 -0500 (EST)

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

    FIXED: variable name completion on Emacs 27
    
    * sweeprolog.el (sweeprolog-variable-completion-at-point): don't rely
    on char-uppercase-p
    * sweeprolog-tests.el (complete-variable): new test.
---
 sweeprolog-tests.el | 21 +++++++++++++++++++++
 sweeprolog.el       |  9 ++++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/sweeprolog-tests.el b/sweeprolog-tests.el
index 834c7e644c..da66d0a5f3 100644
--- a/sweeprolog-tests.el
+++ b/sweeprolog-tests.el
@@ -106,6 +106,27 @@ foo(Foo) :- bar.
                      sweeprolog-clause-default-face)))))
 
 
+(ert-deftest complete-variable ()
+  "Test marking completing variable names."
+  (let ((temp (make-temp-file "sweeprolog-test"
+                              nil
+                              ".pl"
+                              "
+baz(Baz) :- bar(B).
+"
+                              )))
+    (find-file-literally temp)
+    (sweeprolog-mode)
+    (goto-char (point-max))
+    (backward-word)
+    (forward-word)
+    (call-interactively #'complete-symbol)
+    (should (string= (buffer-string)
+                     "
+baz(Baz) :- bar(Baz).
+"
+                     ))))
+
 (ert-deftest mark-predicate ()
   "Test marking predicate definition."
   (let ((temp (make-temp-file "sweeprolog-test"
diff --git a/sweeprolog.el b/sweeprolog.el
index 9009fd3ac3..74deb42090 100644
--- a/sweeprolog.el
+++ b/sweeprolog.el
@@ -895,6 +895,13 @@ resulting list even when found in the current clause."
                 (push (match-string-no-properties 0) vars)))))))
     vars))
 
+(defun sweeprolog--char-uppercase-p (char)
+  (if (fboundp 'char-uppercase-p)
+      (char-uppercase-p char)
+    (cond ((unicode-property-table-internal 'lowercase)
+           (characterp (get-char-code-property char 'lowercase)))
+          ((and (>= char ?A) (<= char ?Z))))))
+
 (defun sweeprolog-variable-completion-at-point ()
   "Prolog variable name completion backend for `completion-at-point'."
   (when-let ((bounds (bounds-of-thing-at-point 'symbol))
@@ -902,7 +909,7 @@ resulting list even when found in the current clause."
              (end (cdr bounds)))
     (when (and (<= beg (point) end)
                (let ((first (char-after beg)))
-                 (or (char-uppercase-p first)
+                 (or (sweeprolog--char-uppercase-p first)
                      (= first ?_))))
       (when-let ((col (sweeprolog-local-variables-collection
                        (buffer-substring-no-properties beg end))))



reply via email to

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