[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode f858060096 034/212: More work on bookkeeping
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode f858060096 034/212: More work on bookkeeping generated from parser SDT |
Date: |
Wed, 26 Jan 2022 01:50:20 -0500 (EST) |
branch: externals/phps-mode
commit f85806009631fe857d3345f46ecd2fef4be0e064
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on bookkeeping generated from parser SDT
---
phps-mode-ast.el | 174 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 113 insertions(+), 61 deletions(-)
diff --git a/phps-mode-ast.el b/phps-mode-ast.el
index 61c6b4444c..b3e2dc697c 100644
--- a/phps-mode-ast.el
+++ b/phps-mode-ast.el
@@ -421,7 +421,7 @@
;; attributed_class_statement -> (variable_modifiers
optional_type_without_static property_list ";")
(puthash
278
- (lambda(args _terminals)
+ (lambda(args terminals)
(let ((ast-object
(list
'ast-type
@@ -431,7 +431,11 @@
'type
(nth 1 args)
'subject
- (nth 2 args))))
+ (nth 2 args)
+ 'start
+ (car (cdr (nth 2 terminals)))
+ 'end
+ (cdr (cdr (nth 2 terminals))))))
ast-object))
phps-mode-parser--table-translations)
@@ -526,7 +530,7 @@
;; property -> (T_VARIABLE backup_doc_comment)
(puthash
317
- (lambda(args terminals)
+ (lambda(args _terminals)
(nth 0 args))
phps-mode-parser--table-translations)
@@ -534,14 +538,15 @@
(puthash
318
(lambda(args terminals)
+ ;; (message "318: %S %S" args terminals)
(let ((ast-object
(list
'ast-type
- 'assign-property
- 'name
+ 'assign-property-variable
+ 'key
(nth 0 args)
'value
- (nth 2 args)
+ (phps-mode-ast--get-list-of-objects (nth 2 args))
'index
(car (cdr (nth 0 terminals)))
'start
@@ -567,8 +572,8 @@
;; expr -> (variable "=" expr)
(puthash
337
- (lambda(args _terminals)
- ;; (message "expr: %S %S" args _terminals)
+ (lambda(args terminals)
+ ;; (message "337: %S %S" args terminals)
(let ((ast-object
(list
'ast-type
@@ -576,7 +581,13 @@
'key
(nth 0 args)
'value
- (phps-mode-ast--get-list-of-objects (nth 2 args)))))
+ (phps-mode-ast--get-list-of-objects (nth 2 args))
+ 'index
+ (car (cdr (nth 0 terminals)))
+ 'start
+ (car (cdr (nth 0 terminals)))
+ 'end
+ (cdr (cdr (nth 0 terminals))))))
;; (message "Method: %S" ast-object)
;; (message "args: %S" args)
;; (message "terminals: %S" terminals)
@@ -610,8 +621,6 @@
'simple-variable
'name
args
- 'index
- (car (cdr terminals))
'start
(car (cdr terminals))
'end
@@ -718,10 +727,12 @@
(let ((children (plist-get item 'children))
(item-type (plist-get item 'ast-type))
(item-index (plist-get item 'index))
+ (item-name (plist-get item 'name))
(parent))
(when (and
- item-type
- item-index)
+ item-index
+ item-name
+ item-type)
(if (and
(or
(equal item-type 'namespace)
@@ -732,40 +743,50 @@
(dolist (child children)
(let ((grand-children (plist-get child 'children))
(child-type (plist-get child 'ast-type))
+ (child-name (plist-get child 'name))
+ (child-index (plist-get child 'index))
(subparent))
- (if (and
- (or
- (equal child-type 'class)
- (equal child-type 'interface))
- grand-children)
- (progn
- (dolist (grand-child grand-children)
- (push
- `(,(plist-get grand-child 'name) . ,(plist-get
grand-child 'index))
- subparent))
- (push
- (append
- (list (plist-get child 'name))
- (reverse subparent))
- parent))
- (push
- `(,(plist-get child 'name) . ,(plist-get child
'index))
- parent)))
- )
- (push
- (append
- (list (plist-get item 'name))
- (reverse parent))
- imenu-index))
+ (when (and
+ child-name
+ child-index)
+ (if (and
+ (or
+ (equal child-type 'class)
+ (equal child-type 'interface))
+ grand-children)
+ (progn
+ (dolist (grand-child grand-children)
+ (let ((grand-child-index (plist-get
grand-child 'index))
+ (grand-child-name (plist-get grand-child
'name)))
+ (when (and
+ grand-child-index
+ grand-child-name)
+ (push
+ `(,grand-child-name . ,grand-child-index)
+ subparent))))
+ (when subparent
+ (push
+ (append
+ (list child-name)
+ (reverse subparent))
+ parent)))
+ (push
+ `(,child-name . ,child-index)
+ parent)))))
+ (when parent
+ (push
+ (append
+ (list item-name)
+ (reverse parent))
+ imenu-index)))
(push
- `(,(plist-get item 'name) . ,(plist-get item 'index))
+ `(,item-name . ,item-index)
imenu-index)))))
(setq
phps-mode-ast--imenu
(reverse imenu-index)))
- ;; (message "imenu:\n%S\n\n" phps-mode-ast--imenu)
-
+ (message "imenu:\n%S\n\n" phps-mode-ast--imenu)
;; TODO Build bookkeeping here
(let ((bookkeeping-stack ast))
@@ -1135,6 +1156,28 @@
child)
bookkeeping-stack))))
+ ((equal type 'assign-property-variable)
+ (let ((id (format
+ "%s id %s"
+ variable-namespace
+ (plist-get item 'key)))
+ (object (list
+ (plist-get item 'start)
+ (plist-get item 'end)))
+ (defined 1))
+ (when-let ((predefined (gethash id bookkeeping)))
+ (setq
+ defined
+ (1+ predefined)))
+ (puthash
+ id
+ defined
+ bookkeeping)
+ (puthash
+ object
+ defined
+ bookkeeping)))
+
((equal type 'assign-variable)
(let ((id (format
"%s id %s"
@@ -1170,27 +1213,36 @@
((equal type 'property)
(let ((subject (plist-get item 'subject)))
- (let ((id (format
- "%s id %s"
- symbol-namespace
- (plist-get subject 'name)))
- (object (list
- (plist-get subject 'start)
- (plist-get subject 'end)))
- (defined 1))
- ;; (message "id: %S from %S" id item)
- (when-let ((predefined (gethash id bookkeeping)))
- (setq
- defined
- (1+ predefined)))
- (puthash
- id
- defined
- bookkeeping)
- (puthash
- object
- defined
- bookkeeping))))
+ (if (stringp subject)
+ (let ((id (format
+ "%s id %s"
+ variable-namespace
+ subject))
+ (object (list
+ (plist-get item 'start)
+ (plist-get item 'end)))
+ (defined 1))
+ ;; (message "id: %S from %S" id item)
+ (when-let ((predefined (gethash id bookkeeping)))
+ (setq
+ defined
+ (1+ predefined)))
+ (puthash
+ id
+ defined
+ bookkeeping)
+ (puthash
+ object
+ defined
+ bookkeeping))
+ (push
+ (list
+ (list
+ class
+ function
+ namespace)
+ subject)
+ bookkeeping-stack))))
((equal type 'function_call)
(when-let ((arguments (plist-get item 'argument_list)))
- [elpa] externals/phps-mode d037aa09bc 023/212: Added bookkeeping via parser SDT foreach ($x as $y) {}, (continued)
- [elpa] externals/phps-mode d037aa09bc 023/212: Added bookkeeping via parser SDT foreach ($x as $y) {}, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 3d54b6ff01 022/212: Passed another test for bookkeeping generated via parser SDT, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 442ad93cb2 018/212: Fix for function parameter formatting in AST, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 2a4d5dea37 019/212: Passed bookkeeping of function arguments, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode c29e35fea2 021/212: More work on bookkeeping, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 0daaa97f8d 025/212: SDT for for() loop started, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode fa3681141b 027/212: Passed test for bookkeeping of conditional assignment via parser SDT, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode fc4c763d68 030/212: Added SDT for class properties, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode f7c261cee1 032/212: Generate parser command now compatible with latest emacs-parser-generator, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode f82c9a377d 033/212: Re-generated parser to verify automation functionality, improved automation documentation, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode f858060096 034/212: More work on bookkeeping generated from parser SDT,
Christian Johansson <=
- [elpa] externals/phps-mode c83b1c264e 060/212: Fixed SDT for isset_variables, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 8fa61fa1f2 063/212: Passing bookkeeping of interface method arguments, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 7a636ccd28 078/212: Removed obsolete file parser-grammar-macro.el, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode ee211dac6a 084/212: Started on indentation tests, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode f65ca852cd 092/212: Passed another indent test, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 9a2573939a 094/212: More wrestling, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 7c0cb57312 098/212: Added more multi-line assignment indent tests, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 3a594466d5 100/212: Passed indent test for multi-line assignments, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 7deebc5f79 101/212: Improved indent test descriptions, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d5d80017bc 104/212: Passed indent tests for concatenated string, Christian Johansson, 2022/01/26