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

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

[elpa] externals/phpinspect 91e24b97d4 074/126: Make bmap-token-meta err


From: ELPA Syncer
Subject: [elpa] externals/phpinspect 91e24b97d4 074/126: Make bmap-token-meta error on unexpected input
Date: Sat, 12 Aug 2023 00:58:45 -0400 (EDT)

branch: externals/phpinspect
commit 91e24b97d4b8cb81ac86d02076b6cdecfdf1ad0b
Author: Hugo Thunnissen <devel@hugot.nl>
Commit: Hugo Thunnissen <devel@hugot.nl>

    Make bmap-token-meta error on unexpected input
    
    Searching for an object that doesn't exist as a token can be really 
expensive,
    so it's better to error on unexpected input and fix code on the calling 
side.
---
 phpinspect-bmap.el           | 10 ++++--
 phpinspect-resolvecontext.el |  8 +++--
 test/test-bmap.el            | 85 ++++++++++++++++++++++++--------------------
 3 files changed, 58 insertions(+), 45 deletions(-)

diff --git a/phpinspect-bmap.el b/phpinspect-bmap.el
index 1fed8a3d9e..4aa9fd32c6 100644
--- a/phpinspect-bmap.el
+++ b/phpinspect-bmap.el
@@ -284,7 +284,7 @@
 (cl-defmethod phpinspect-bmap-tokens-ending-at ((bmap phpinspect-bmap) point)
   (let ((overlay (phpinspect-bmap-overlay-at-point bmap point)))
     (if overlay
-          (phpinspect-bmap-tokens-ending-at overlay point)
+        (phpinspect-bmap-tokens-ending-at overlay point)
       (gethash point (phpinspect-bmap-ends bmap)))))
 
 (defsubst phpinspect-bmap-overlay-at-point (bmap point)
@@ -305,6 +305,9 @@
   (phpinspect-bmap-token-meta (phpinspect-overlay-bmap overlay) token))
 
 (cl-defmethod phpinspect-bmap-token-meta ((bmap phpinspect-bmap) token)
+  (unless (phpinspect-probably-token-p token)
+    (error "Unexpected argument, expected `phpinspect-token-p'. Got invalid 
token %s" token))
+
   (or (gethash token (phpinspect-bmap-meta bmap))
       (let ((found?))
         (catch 'found
@@ -314,13 +317,14 @@
 
 (defsubst phpinspect-probably-token-p (token)
   (and (listp token)
-       (symbolp (car token))))
+       (keywordp (car token))))
 
-(defsubst phpinspect-bmap-last-token-before-point (bmap point)
+(cl-defmethod phpinspect-bmap-last-token-before-point ((bmap phpinspect-bmap) 
point)
   (let* ((ends (phpinspect-bmap-ends bmap))
          (ending))
     (unless (hash-table-empty-p ends)
       (while (not (or (<= point 0) (setq ending 
(phpinspect-bmap-tokens-ending-at bmap point))))
+        (phpinspect--log "Checking point %d" point)
         (setq point (- point 1)))
       (car (last ending)))))
 
diff --git a/phpinspect-resolvecontext.el b/phpinspect-resolvecontext.el
index a12525b951..8073431f27 100644
--- a/phpinspect-resolvecontext.el
+++ b/phpinspect-resolvecontext.el
@@ -84,13 +84,15 @@
          (subject (phpinspect-bmap-last-token-before-point bmap point))
          (subject-token)
          (siblings))
+    (phpinspect--log "Last token before point: %s" subject)
     ;; Dig down through tokens that can contain statements
     (catch 'break
-      (while (and subject (phpinspect-enclosing-token-p (phpinspect-meta-token 
subject)))
-        (phpinspect--log "Token %s is enclosing" (phpinspect-meta-token 
subject))
+      (while (and subject
+                  (phpinspect-enclosing-token-p (phpinspect-meta-token 
subject))
+                  (cdr (phpinspect-meta-token subject)) 0)
         (let ((new-subject
                (phpinspect-bmap-token-meta
-                bmap (car (last (phpinspect-meta-token subject))))))
+                bmap (car (last (cdr (phpinspect-meta-token subject)))))))
           (if new-subject
               (setq subject new-subject)
             (throw 'break nil)))))
diff --git a/test/test-bmap.el b/test/test-bmap.el
index f3d1bdfe53..700564a25b 100644
--- a/test/test-bmap.el
+++ b/test/test-bmap.el
@@ -4,11 +4,15 @@
 (ert-deftest phpinspect-bmap-overlay ()
   (let ((bmap (phpinspect-make-bmap))
         (bmap2 (phpinspect-make-bmap))
-        (bmap3 (phpinspect-make-bmap)))
+        (bmap3 (phpinspect-make-bmap))
+        (token '(:token))
+        (token1 '(:token1))
+        (token2 '(:token2))
+        (token3 '(:token3)))
 
-    (phpinspect-bmap-register bmap 10 20 'token)
-    (phpinspect-bmap-register bmap2 20 24 'token2)
-    (phpinspect-bmap-register bmap3 40 50 'token3)
+    (phpinspect-bmap-register bmap 10 20 token)
+    (phpinspect-bmap-register bmap2 20 24 token2)
+    (phpinspect-bmap-register bmap3 40 50 token3)
 
     (should (phpinspect-bmap-token-starting-at bmap 10))
 
@@ -24,74 +28,77 @@
      bmap2 bmap (phpinspect-bmap-token-starting-at bmap 50) 5)
 
 
-    (should (eq 'token2 (phpinspect-meta-token
-                         (phpinspect-bmap-token-starting-at bmap2 20))))
-    (should (eq 'token (phpinspect-meta-token
-                        (phpinspect-bmap-token-starting-at bmap2 7))))
+    (should (eq token2 (phpinspect-meta-token
+                               (phpinspect-bmap-token-starting-at bmap2 20))))
+    (should (eq token (phpinspect-meta-token
+                              (phpinspect-bmap-token-starting-at bmap2 7))))
 
     ;; Nesting for token-starting-at
-    (should (eq 'token3 (phpinspect-meta-token
-                         (phpinspect-bmap-token-starting-at bmap 50))))
+    (should (eq token3 (phpinspect-meta-token
+                               (phpinspect-bmap-token-starting-at bmap 50))))
 
-    (should (eq 'token3 (phpinspect-meta-token
-                         (phpinspect-bmap-token-starting-at bmap2 55))))
+    (should (eq token3 (phpinspect-meta-token
+                               (phpinspect-bmap-token-starting-at bmap2 55))))
 
 
-    (should (phpinspect-bmap-token-meta bmap 'token))
-    (should (phpinspect-bmap-token-meta bmap2 'token2))
-    (should (phpinspect-bmap-token-meta bmap2 'token))
-    (should (phpinspect-bmap-token-meta bmap2 'token3))))
+    (should (phpinspect-bmap-token-meta bmap token))
+    (should (phpinspect-bmap-token-meta bmap2 token2))
+    (should (phpinspect-bmap-token-meta bmap2 token))
+    (should (phpinspect-bmap-token-meta bmap2 token3))))
 
 (ert-deftest phpinspect-bmap-nest-parent ()
-  (let ((bmap (phpinspect-make-bmap)))
-    (phpinspect-bmap-register bmap 10 20 'child)
-    (phpinspect-bmap-register bmap 5 25 'parent)
-    (phpinspect-bmap-register bmap 2 30 'granny)
+  (let ((bmap (phpinspect-make-bmap))
+        (child '(:child))
+        (parent '(:parent))
+        (granny '(:granny)))
+    (phpinspect-bmap-register bmap 10 20 child)
+    (phpinspect-bmap-register bmap 5 25 parent)
+    (phpinspect-bmap-register bmap 2 30 granny)
 
-    (let ((child (phpinspect-bmap-token-meta bmap 'child))
-          (parent (phpinspect-bmap-token-meta bmap 'parent)))
-      (should (eq 'parent (phpinspect-meta-token
-                           (phpinspect-meta-parent child))))
-      (should (eq 'granny (phpinspect-meta-token (phpinspect-meta-parent 
parent)))))))
+    (let ((child-meta (phpinspect-bmap-token-meta bmap child))
+          (parent-meta (phpinspect-bmap-token-meta bmap parent)))
+      (should (eq parent (phpinspect-meta-token
+                          (phpinspect-meta-parent child-meta))))
+      (should (eq granny (phpinspect-meta-token (phpinspect-meta-parent 
parent-meta)))))))
 
 
 (ert-deftest phpinspect-bmap-tokens-overlapping ()
   (let ((bmap (phpinspect-make-bmap)))
-    (phpinspect-bmap-register bmap 9 200 'node1)
-    (phpinspect-bmap-register bmap 20  200 'node2)
-    (phpinspect-bmap-register bmap 9  20 'node3)
-    (phpinspect-bmap-register bmap 21  44 'node4)
+    (phpinspect-bmap-register bmap 9 200 '(:node1))
+    (phpinspect-bmap-register bmap 20  200 '(:node2))
+    (phpinspect-bmap-register bmap 9  20 '(:node3))
+    (phpinspect-bmap-register bmap 21  44 '(:node4))
 
     (setq result (phpinspect-bmap-tokens-overlapping bmap 22))
-    (should (equal '(node4 node2 node1) (mapcar #'phpinspect-meta-token 
result)))))
+    (should (equal '((:node4) (:node2) (:node1)) (mapcar 
#'phpinspect-meta-token result)))))
 
 (ert-deftest phpinspect-bmap-tokens-overlapping-overlayed ()
   (let ((bmap (phpinspect-make-bmap))
         (bmap2 (phpinspect-make-bmap))
         (bmap3 (phpinspect-make-bmap)))
-    (phpinspect-bmap-register bmap 9 200 'token1)
-    (phpinspect-bmap-register bmap 20 200 'token2)
-    (phpinspect-bmap-register bmap 9 20 'token3)
-    (phpinspect-bmap-register bmap 21 44 'token4)
+    (phpinspect-bmap-register bmap 9 200 '(:token1))
+    (phpinspect-bmap-register bmap 20 200 '(:token2))
+    (phpinspect-bmap-register bmap 9 20 '(:token3))
+    (phpinspect-bmap-register bmap 21 44 '(:token4))
 
-    (phpinspect-bmap-register bmap2 200 230 'token5)
-    (phpinspect-bmap-register bmap3 300 305 'token6)
+    (phpinspect-bmap-register bmap2 200 230 '(:token5))
+    (phpinspect-bmap-register bmap3 300 305 '(:token6))
 
     ;; Should start at 220 of bmap2
     (phpinspect-bmap-overlay
      bmap2 bmap3 (phpinspect-bmap-token-starting-at bmap3 300) -80)
 
     (setq result (phpinspect-bmap-tokens-overlapping bmap2 220))
-    (should (equal '(token6 token5) (mapcar #'phpinspect-meta-token result)))
+    (should (equal '((:token6) (:token5)) (mapcar #'phpinspect-meta-token 
result)))
 
     (phpinspect-bmap-overlay
      bmap bmap2 (phpinspect-bmap-token-starting-at bmap2 200) 20)
 
     (setq result (phpinspect-bmap-tokens-overlapping bmap 240))
-    (should (equal '(token6 token5) (mapcar #'phpinspect-meta-token result)))
+    (should (equal '((:token6) (:token5)) (mapcar #'phpinspect-meta-token 
result)))
 
     (setq result (phpinspect-bmap-tokens-overlapping bmap 22))
-    (should (equal '(token4 token2 token1) (mapcar #'phpinspect-meta-token 
result)))))
+    (should (equal '((:token4) (:token2) (:token1)) (mapcar 
#'phpinspect-meta-token result)))))
 
 (ert-deftest phpinspect-bmap-register ()
   (let* ((bmap (phpinspect-make-bmap))



reply via email to

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