[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))
- [elpa] externals/phpinspect 50d2bfeebe 002/126: Change indexer's cache dir from/to .cache/{phpns, phpinspect}, (continued)
- [elpa] externals/phpinspect 50d2bfeebe 002/126: Change indexer's cache dir from/to .cache/{phpns, phpinspect}, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 0b210309e7 041/126: Fix variable suggestion when there are loose dollar signs in the buffer, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect c50f2ae09b 020/126: Fix resolving of "static" and "self" types, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 1816495538 045/126: Use thread-live-p in stead of thread-alive-p for emacs 28.1 support, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 8d3bd21015 006/126: Add license information, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 811a9a9141 010/126: Add more tests for the parser code, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect b338aa9b75 012/126: Fix most of the byte-compilation warnings, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect f5fe299c01 027/126: Make functions that access the filesystem configurable and add test, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect a6bb09b2b3 026/126: Test and fix static function indexation, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 3838e02820 067/126: Prevent worker thread from associating with the current buffer, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 91e24b97d4 074/126: Make bmap-token-meta error on unexpected input,
ELPA Syncer <=
- [elpa] externals/phpinspect 7f76ba4c11 072/126: Fix some bugs introduced by the incremental parsing feature, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 1ec0e0cfa2 078/126: Limit token lookback range and start completion from the first non-blank character, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 6c767fc877 089/126: Implement eldoc for object attributes, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect d1d34a4249 084/126: Move more functionalities from main file to separate modules, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 05ca0ace20 116/126: Fix all remaining byte compiler warnings, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect 2d2f9912c1 102/126: Wrap queue items in a queue object, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect f5cc681105 113/126: Fix let parenthesis in test-buffer.el, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect e57edab86e 025/126: Index new files when no FQN can be found for a type, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect f8bf0b611a 035/126: WIP: List static methods when requested, ELPA Syncer, 2023/08/12
- [elpa] externals/phpinspect faa936a4f0 024/126: Test type-resolver + make type resolving work for "blocked" namespaces, ELPA Syncer, 2023/08/12