branch: externals/phps-mode
commit dbaf508512060a34c751a526b08822bfce06261d
Author: Christian Johansson <christ...@cvj.se>
Commit: Christian Johansson <christ...@cvj.se>

    Work on getting bookkeeping for class properties working
---
 phps-mode-parser-sdt.el | 95 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 77 insertions(+), 18 deletions(-)

diff --git a/phps-mode-parser-sdt.el b/phps-mode-parser-sdt.el
index 5b3fbfd2bd..6416030b93 100644
--- a/phps-mode-parser-sdt.el
+++ b/phps-mode-parser-sdt.el
@@ -2930,14 +2930,14 @@
      ast-start
      ,(car (cdr terminals))
      ast-end
-     ,(cdr (cdr terminals))
-     ))
+     ,(cdr (cdr terminals))))
  phps-mode-parser--table-translations)
 
 ;; 295 ((static_var) (T_VARIABLE "=" expr))
 (puthash
  295
  (lambda(args terminals)
+   ;; TODO Should bookkeep here
    `(
      ast-type
      variable
@@ -2950,8 +2950,7 @@
      ast-start
      ,(car (cdr (nth 0 terminals)))
      ast-end
-     ,(cdr (cdr (nth 0 terminals)))
-     ))
+     ,(cdr (cdr (nth 0 terminals)))))
  phps-mode-parser--table-translations)
 
 ;; 296 ((class_statement_list) (class_statement_list class_statement))
@@ -2994,6 +2993,7 @@
 (puthash
  299
  (lambda(args terminals)
+   ;; TODO Bookkeep class constants here
    `(
      ast-type
      constant
@@ -3004,8 +3004,7 @@
      ast-start
      ,(car (cdr (car (nth 2 terminals))))
      ast-end
-     ,(cdr (cdr (car (nth 2 terminals))))
-     ))
+     ,(cdr (cdr (car (nth 2 terminals))))))
  phps-mode-parser--table-translations)
 
 ;; 300 ((attributed_class_statement) (method_modifiers function returns_ref 
identifier backup_doc_comment "(" parameter_list ")" return_type 
backup_fn_flags method_body backup_fn_flags))
@@ -3106,28 +3105,84 @@
 (puthash
  302
  (lambda(args _terminals)
+   (let* ((attributed-class-statement
+           args)
+          (attributed-class-statement-type
+           (plist-get attributed-class-statement 'ast-type)))
+     (cond
+      ((equal attributed-class-statement-type 'property)
+       (let ((property-list
+              (plist-get attributed-class-statement 'subject)))
+         (dolist (property property-list)
+           (let ((property-type
+                  (plist-get property 'ast-type)))
+             (cond
+              ((equal property-type 'property-variable)
+               ;; TODO Bookkeep proerty-variable here
+               (let ((symbol-name
+                      (plist-get property 'variable))
+                     (symbol-start
+                      (plist-get property 'ast-start))
+                     (symbol-end
+                      (plist-get property 'ast-end))
+                     (symbol-scope
+                      phps-mode-parser-sdt--bookkeeping-namespace))
+                 (push
+                  (list
+                   symbol-name
+                   symbol-scope
+                   symbol-start
+                   symbol-end)
+                  
phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack))))))))))
+
    `(
      ast-type
      class-statement
      attributed-class-statement
-     ,args
-     )
-   )
+     ,args))
  phps-mode-parser--table-translations)
 
 ;; 303 ((class_statement) (attributes attributed_class_statement))
 (puthash
  303
  (lambda(args _terminals)
+   (let* ((attributed-class-statement
+           (nth 1 args))
+          (attributed-class-statement-type
+           (plist-get attributed-class-statement 'ast-type)))
+     (cond
+      ((equal attributed-class-statement-type 'property)
+       (let ((property-list
+              (plist-get attributed-class-statement 'subject)))
+         (dolist (property property-list)
+           (let ((property-type
+                  (plist-get property 'ast-type)))
+             (cond
+              ((equal property-type 'property-variable)
+               ;; TODO Bookkeep proerty-variable here
+               (let ((symbol-name
+                      (plist-get property 'variable))
+                     (symbol-start
+                      (plist-get property 'ast-start))
+                     (symbol-end
+                      (plist-get property 'ast-end))
+                     (symbol-scope
+                      phps-mode-parser-sdt--bookkeeping-namespace))
+                 (push
+                  (list
+                   symbol-name
+                   symbol-scope
+                   symbol-start
+                   symbol-end)
+                  
phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack))))))))))
+
    `(
      ast-type
      class-statement
      attributes
      ,(nth 0 args)
      attributed-class-statement
-     ,(nth 1 args)
-     )
-   )
+     ,(nth 1 args)))
  phps-mode-parser--table-translations)
 
 ;; 304 ((class_statement) (T_USE class_name_list trait_adaptations))
@@ -3140,9 +3195,7 @@
      class-name-list
      ,(nth 1 args)
      trait-adaptations
-     ,(nth 2 args)
-     )
-   )
+     ,(nth 2 args)))
  phps-mode-parser--table-translations)
 
 ;; 305 ((class_name_list) (class_name))
@@ -3338,14 +3391,20 @@
 ;; 339 ((property) (T_VARIABLE backup_doc_comment))
 (puthash
  339
- (lambda(args _terminals)
+ (lambda(args terminals)
    `(
+     ast-type
      property-variable
+     ast-start
+     ,(car (cdr (car terminals)))
+     ast-index
+     ,(car (cdr (car terminals)))
+     ast-end
+     ,(cdr (cdr (car terminals)))
      variable
      ,(nth 0 args)
      backup-doc-comment
-     ,(nth 1 args)
-     ))
+     ,(nth 1 args)))
  phps-mode-parser--table-translations)
 
 ;; 340 ((property) (T_VARIABLE "=" expr backup_doc_comment))

Reply via email to