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

[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)



reply via email to

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