[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 393edecde0 009/135: Started with bookkeeping
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 393edecde0 009/135: Started with bookkeeping index of objects |
Date: |
Sun, 29 Jan 2023 03:10:59 -0500 (EST) |
branch: externals/phps-mode
commit 393edecde0206893a3e83be15e075fd27e6ef622
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Started with bookkeeping index of objects
---
phps-mode-ast-bookkeeping.el | 448 +++++++++++++++++++++++++++++++------------
test/phps-mode-test-ast.el | 5 +-
2 files changed, 334 insertions(+), 119 deletions(-)
diff --git a/phps-mode-ast-bookkeeping.el b/phps-mode-ast-bookkeeping.el
index ebff44a952..c4675fc559 100644
--- a/phps-mode-ast-bookkeeping.el
+++ b/phps-mode-ast-bookkeeping.el
@@ -18,7 +18,12 @@
(defvar-local
phps-mode-ast-bookkeeping--index
nil
- "Bookkeeping for current buffer.")
+ "Bookkeeping string index for current buffer.")
+
+(defvar-local
+ phps-mode-ast-bookkeeping--object-index
+ nil
+ "Bookkeeping object index for current buffer.")
(defvar
phps-mode-ast-bookkeeping--superglobal-variable-p
@@ -246,6 +251,7 @@
"Generate AST for current buffer or optionally for TREE."
(let ((bookkeeping (make-hash-table :test 'equal))
(bookkeeping-stack (if tree tree phps-mode-ast--tree))
+ (bookkeeping-objects)
(inline-function-count 0)
(arrow-function-count 0)
(defined-count 0))
@@ -269,16 +275,29 @@
(cond
((equal type 'simple-variable)
- (let ((ids
- (phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get item 'name)
- t))
- (object
- (list
- (plist-get item 'start)
- (plist-get item 'end)))
- (defined-p 0))
+ (let* ((object-name (plist-get item 'name))
+ (object-start (plist-get item 'start))
+ (object-end (plist-get item 'end))
+ (ids
+ (phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name
+ t))
+ (object
+ (list
+ object-start
+ object-end))
+ (defined-p 0)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (id ids)
(when (gethash id bookkeeping)
@@ -286,10 +305,11 @@
defined-p
1)))
- ;; Is a super-global variable?
- (when (gethash
- (plist-get item 'name)
- phps-mode-ast-bookkeeping--superglobal-variable-p)
+ ;; Is it a super-global variable?
+ (when
+ (gethash
+ (plist-get item 'name)
+ phps-mode-ast-bookkeeping--superglobal-variable-p)
(setq
defined-p
1))
@@ -301,14 +321,28 @@
((equal type 'static-variables-statement)
(when-let ((variables (reverse (plist-get item 'static-var-list))))
(dolist (variable variables)
- (let ((ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get variable 'name)))
- (object
- (list
- (plist-get variable 'start)
- (plist-get variable 'end))))
+ (let* ((object-name (plist-get variable 'name))
+ (object-start (plist-get variable 'start))
+ (object-end (plist-get variable 'end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(puthash
id
@@ -325,14 +359,28 @@
(push `(type function name ,name) sub-scope)
(when-let ((parameter-list (plist-get item 'parameter-list)))
(dolist (parameter parameter-list)
- (let ((ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- sub-scope
- (plist-get parameter 'name)))
- (object
- (list
- (plist-get parameter 'start)
- (plist-get parameter 'end))))
+ (let* ((object-name (plist-get parameter 'name))
+ (object-start (plist-get parameter 'start))
+ (object-end (plist-get parameter 'end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ sub-scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(puthash
id
@@ -384,14 +432,28 @@
(when-let ((parameter-list (plist-get item 'parameter-list)))
(dolist (parameter parameter-list)
- (let ((ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- sub-scope
- (plist-get parameter 'name)))
- (object
- (list
- (plist-get parameter 'start)
- (plist-get parameter 'end))))
+ (let* ((object-name (plist-get parameter 'name))
+ (object-start (plist-get parameter 'start))
+ (object-end (plist-get parameter 'end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ sub-scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(puthash
id
@@ -576,15 +638,29 @@
(push `(,scope ,child) bookkeeping-stack))))
((equal type 'assign-property-variable)
- (let ((ids
- (phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get item 'key)))
- (object
- (list
- (plist-get item 'start)
- (plist-get item 'end)))
- (defined 1))
+ (let* ((object-key (plist-get item 'key))
+ (object-start (plist-get item 'start))
+ (object-end (plist-get item 'end))
+ (ids
+ (phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-key))
+ (object
+ (list
+ object-start
+ object-end))
+ (defined 1)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-key
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(when-let ((predefined (gethash id bookkeeping)))
(setq
@@ -655,15 +731,29 @@
((and
(equal type 'assign-variable)
(plist-get (plist-get item 'key) 'name))
- (let ((ids
- (phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get (plist-get item 'key) 'name)))
- (object
- (list
- (plist-get (plist-get item 'key) 'start)
- (plist-get (plist-get item 'key) 'end)))
- (defined 1))
+ (let* ((object-name (plist-get (plist-get item 'key) 'name))
+ (object-start (plist-get (plist-get item 'key) 'start))
+ (object-end (plist-get (plist-get item 'key) 'end))
+ (ids
+ (phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (defined 1)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(when-let ((predefined (gethash id bookkeeping)))
(setq
@@ -702,11 +792,25 @@
(phps-mode-ast-bookkeeping--generate-variable-scope-string
sub-scope
subject))
- (let ((object
- (list
- (plist-get item 'start)
- (plist-get item 'end)))
- (defined 1))
+ (let* ((object-name subject)
+ (object-start (plist-get item 'start))
+ (object-end (plist-get item 'end))
+ (object
+ (list
+ object-start
+ object-end))
+ (defined 1)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(when-let ((predefined (gethash id bookkeeping)))
(setq
@@ -748,10 +852,23 @@
((equal type 'catch)
(when-let ((optional-variable
(plist-get item 'optional-variable)))
- (let ((ids
- (phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- optional-variable)))
+ (let* ((object-name optional-variable)
+ (object-start (plist-get item 'optional-variable-start))
+ (object-end (plist-get item 'optional-variable-end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (id ids)
(puthash
id
@@ -759,8 +876,8 @@
bookkeeping))
(puthash
(list
- (plist-get item 'optional-variable-start)
- (plist-get item 'optional-variable-end))
+ object-start
+ object-end)
1
bookkeeping)))
(when-let ((children (reverse (plist-get item 'children))))
@@ -801,11 +918,14 @@
(plist-get head-scope 'type)
'arrow-function)
(setq is-arrow-function-scope nil)))
- (let* ((predefined)
+ (let* ((object-name (concat "$" property-name))
+ (object-start (plist-get item 'property-start))
+ (object-end (plist-get item 'property-end))
+ (predefined)
(variable-ids
(phps-mode-ast-bookkeeping--generate-variable-scope-string
sub-scope
- (concat "$" property-name)
+ object-name
t))
(symbol-id
(phps-mode-ast-bookkeeping--generate-symbol-scope-string
@@ -813,8 +933,18 @@
property-name))
(bookkeeping-object
(list
- (plist-get item 'property-start)
- (plist-get item 'property-end))))
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(when (gethash symbol-id bookkeeping)
(setq
predefined
@@ -835,12 +965,25 @@
bookkeeping)))))
(t
- (let ((variable-ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get subject 'name)
- t))
- (predefined 0))
+ (let* ((object-name (plist-get subject 'name))
+ (object-start (plist-get subject 'start))
+ (object-end (plist-get subject 'end))
+ (variable-ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name
+ t))
+ (predefined 0)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (variable-id variable-ids)
(when (gethash
variable-id
@@ -850,8 +993,8 @@
1)))
(puthash
(list
- (plist-get subject 'start)
- (plist-get subject 'end))
+ object-start
+ object-end)
predefined
bookkeeping)))
@@ -891,11 +1034,14 @@
(plist-get head-scope 'type)
'arrow-function)
(setq is-arrow-function-scope nil)))
- (let* ((predefined)
+ (let* ((object-name (concat "$" property-name))
+ (object-start (plist-get item 'property-start))
+ (object-end (plist-get item 'property-end))
+ (predefined)
(variable-ids
(phps-mode-ast-bookkeeping--generate-variable-scope-string
sub-scope
- (concat "$" property-name)
+ object-name
t))
(symbol-id
(phps-mode-ast-bookkeeping--generate-symbol-scope-string
@@ -903,8 +1049,18 @@
property-name))
(bookkeeping-object
(list
- (plist-get item 'property-start)
- (plist-get item 'property-end))))
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(when (gethash symbol-id bookkeeping)
(setq
predefined
@@ -925,12 +1081,25 @@
bookkeeping)))))
(t
- (let ((variable-ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- scope
- (plist-get subject 'name)
- t))
- (predefined 0))
+ (let* ((object-name (plist-get subject 'name))
+ (object-start (plist-get subject 'start))
+ (object-end (plist-get subject 'end))
+ (variable-ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ scope
+ object-name
+ t))
+ (predefined 0)
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (variable-id variable-ids)
(when (gethash
variable-id
@@ -940,8 +1109,8 @@
1)))
(puthash
(list
- (plist-get subject 'start)
- (plist-get subject 'end))
+ object-start
+ object-end)
predefined
bookkeeping)))
@@ -981,16 +1150,29 @@
'arrow-function)
(setq is-arrow-function-scope nil)))
(push '(type static) sub-scope)
- (let ((predefined)
- (variable-ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- sub-scope
- (plist-get member 'name)
- t))
- (bookkeeping-object
- (list
- (plist-get member 'start)
- (plist-get member 'end))))
+ (let* ((object-name (plist-get member 'name))
+ (object-start (plist-get member 'start))
+ (object-end (plist-get member 'end))
+ (predefined)
+ (variable-ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ sub-scope
+ object-name
+ t))
+ (bookkeeping-object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (variable-id variable-ids)
(when (gethash variable-id bookkeeping)
(setq
@@ -1028,14 +1210,27 @@
(push `(,sub-scope ,e) bookkeeping-stack)))
(when-let ((parameter-list (plist-get item 'parameter-list)))
(dolist (parameter parameter-list)
- (let ((ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- sub-scope
- (plist-get parameter 'name)))
- (object
- (list
- (plist-get parameter 'start)
- (plist-get parameter 'end))))
+ (let* ((object-name (plist-get parameter 'name))
+ (object-start (plist-get parameter 'start))
+ (object-end (plist-get parameter 'end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ sub-scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
(dolist (id ids)
(puthash
id
@@ -1074,14 +1269,28 @@
bookkeeping))))
(when-let ((lexical-vars (plist-get item 'lexical-vars)))
(dolist (lexical-var lexical-vars)
- (let ((ids
-
(phps-mode-ast-bookkeeping--generate-variable-scope-string
- sub-scope
- (plist-get lexical-var 'name)))
- (object
- (list
- (plist-get lexical-var 'start)
- (plist-get lexical-var 'end))))
+ (let* ((object-name (plist-get lexical-var 'name))
+ (object-start (plist-get lexical-var 'start))
+ (object-end (plist-get lexical-var 'end))
+ (ids
+
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+ sub-scope
+ object-name))
+ (object
+ (list
+ object-start
+ object-end))
+ (bookkeeping-object
+ (list
+ 'type type
+ 'name object-name
+ 'scope scope
+ 'start object-start
+ 'end object-end)))
+ (push
+ bookkeeping-object
+ bookkeeping-objects)
+
(dolist (id ids)
(puthash
id
@@ -1096,6 +1305,9 @@
(setq
phps-mode-ast-bookkeeping--index
bookkeeping)
+ (setq
+ phps-mode-ast-bookkeeping--object-index
+ bookkeeping-objects)
;; (message "\nBookkeeping\n:%S\n" bookkeeping)
phps-mode-ast-bookkeeping--index))
diff --git a/test/phps-mode-test-ast.el b/test/phps-mode-test-ast.el
index e03ddf8703..d52b348fe1 100644
--- a/test/phps-mode-test-ast.el
+++ b/test/phps-mode-test-ast.el
@@ -46,6 +46,9 @@
;; (phps-mode-test--hash-to-list
;; phps-mode-ast-bookkeeping--index
;; t))
+ (message
+ "object-index:\n%S\n"
+ phps-mode-ast-bookkeeping--object-index)
(should
(equal
(phps-mode-test--hash-to-list
@@ -379,8 +382,8 @@
(defun phps-mode-test-ast ()
"Run test for ast."
(message "-- Running all tests for ast... --\n")
- (phps-mode-test-ast-imenu)
(phps-mode-test-ast-bookkeeping)
+ (phps-mode-test-ast-imenu)
(message "\n-- Ran all tests for ast. --"))
(phps-mode-test-ast)
- [elpa] externals/phps-mode updated (5fd766964d -> d5bdadc6fc), Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode b1d402cc39 001/135: Added some SDT rules, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode a0b350c316 003/135: More work on SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode a0358daa01 004/135: Added SDT for attributes, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 23fcce7ee0 006/135: SDT for use-top-statements, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 6816e24e04 005/135: More work on attributes SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f333b4f0fd 007/135: SDT for possible_comma, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode c93e41b57f 013/135: Fixed new compilation errors in added SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 44e618ffe3 023/135: SDT for trait_alias, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode dffe0d0485 029/135: More SDT rules, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 393edecde0 009/135: Started with bookkeeping index of objects,
Christian Johansson <=
- [elpa] externals/phps-mode fd28fcbed3 012/135: Added SDT for unset_variables and more, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 8c71d3838e 018/135: Added SDT for type, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode c782b18dc0 027/135: Merge branch 'master' into feature/full-sdt, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode a07fd20026 008/135: Keeping track of global namespace directly from SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 67635aa9ee 015/135: Added SDT for for-statement and foreach-statements, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f28ea09743 020/135: SDT is not using get-list-of-object function anymore, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode dd672cd243 021/135: More SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode c4d9f8d909 038/135: More work on SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 442b5202d4 040/135: Bookkeeping via SDT passing second test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f26c45586d 046/135: More work on bookkeeping, Christian Johansson, 2023/01/29