[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode d3b5a85b70 001/212: Using property list as ba
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode d3b5a85b70 001/212: Using property list as basis for AST |
Date: |
Wed, 26 Jan 2022 01:50:00 -0500 (EST) |
branch: externals/phps-mode
commit d3b5a85b70050b10436757b464087b6a185a9d6e
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Using property list as basis for AST
---
test/phps-mode-test-parser.el | 170 +++++++++++++++++++++++-------------------
1 file changed, 92 insertions(+), 78 deletions(-)
diff --git a/test/phps-mode-test-parser.el b/test/phps-mode-test-parser.el
index cdd99e7a54..7fcc2afe60 100644
--- a/test/phps-mode-test-parser.el
+++ b/test/phps-mode-test-parser.el
@@ -310,49 +310,9 @@
"Run test for parse translation."
(message "-- Running tests for parser translation... --\n")
- ;; TODO Generate bookkeeping and imenu index here
- (let ((imenu-index))
-
- ;; function_declaration_statement -> (function returns_ref T_STRING
backup_doc_comment "(" parameter_list ")" return_type backup_fn_flags "{"
inner_statement_list "}" backup_fn_flags)
- (puthash
- 174
- (lambda(args terminals)
- (push
- `(,(nth 2 args) . ,(car (cdr (nth 2 terminals))))
- imenu-index))
- phps-mode-parser--table-translations)
-
- (phps-mode-test-parser--buffer-contents
- "<?php\nfunction myFunctionA() {}\nfunction myFunctionB() {}\n$var =
function () {\n echo 'here';\n};"
- "Imenu function-oriented file with anonymous function"
- (lambda()
- (let ((parse (phps-mode-parser-parse)))
- (message "Left-to-right with left-most derivation:\n%S\n" parse)
- (dolist (production-number (reverse parse))
- (let ((production
- (phps-mode-parser--get-grammar-production-by-number
- production-number)))
- (message
- "%d: %S -> %S"
- production-number
- (car (car production))
- (car (cdr production))))))
- (phps-mode-parser-translate)
- (setq
- imenu-index
- (nreverse imenu-index))
- (should
- (equal
- imenu-index
- '(("myFunctionA" . 16) ("myFunctionB" . 42))))
- ;; TODO Test bookkeeping here
- )))
- (message "Passed functional oriented imenu-index")
-
- (let ((imenu-functions)
- (imenu-namespaces)
- (imenu-classes)
- (imenu-methods))
+ (let ((ast)
+ (ast-current-namespace)
+ (ast-current-namespace-children))
;; function_declaration_statement -> (function returns_ref T_STRING
backup_doc_comment "(" parameter_list ")" return_type backup_fn_flags "{"
inner_statement_list "}" backup_fn_flags)
(puthash
@@ -360,17 +320,26 @@
(lambda(args terminals)
(let ((ast-object
(list
+ 'type
'function
+ 'name
(nth 2 args)
+ 'index
(car (cdr (nth 2 terminals)))
+ 'start
(car (cdr (nth 9 terminals)))
+ 'end
(car (cdr (nth 11 terminals))))))
- (message "Function: %S" ast-object)
- (message "args: %S" args)
- (message "terminals: %S" terminals)
- (push
- ast-object
- imenu-functions)
+ ;; (message "Function: %S" ast-object)
+ ;; (message "args: %S" args)
+ ;; (message "terminals: %S" terminals)
+ (if ast-current-namespace
+ (push
+ ast-object
+ ast-current-namespace-children)
+ (push
+ ast-object
+ ast))
ast-object))
phps-mode-parser--table-translations)
@@ -380,17 +349,19 @@
(lambda(args terminals)
(let ((ast-object
(list
+ 'type
'method
+ 'name
(nth 3 args)
+ 'index
(car (cdr (nth 3 terminals)))
+ 'start
(car (cdr (car (nth 10 terminals))))
+ 'end
(cdr (cdr (car (cdr (cdr (nth 10 terminals)))))))))
- (message "Method: %S" ast-object)
- (message "args: %S" args)
- (message "terminals: %S" terminals)
- (push
- ast-object
- imenu-methods)
+ ;; (message "Method: %S" ast-object)
+ ;; (message "args: %S" args)
+ ;; (message "terminals: %S" terminals)
ast-object))
phps-mode-parser--table-translations)
@@ -400,17 +371,22 @@
(lambda(args terminals)
(let ((ast-object
(list
+ 'type
'namespace
+ 'name
(nth 1 args)
+ 'index
(car (cdr (nth 1 terminals)))
+ 'start
(car (cdr (nth 2 terminals)))
+ 'end
'max)))
- (message "Namespace %S" ast-object)
- (message "args: %S" args)
- (message "terminals: %S" terminals)
- (push
- ast-object
- imenu-namespaces)
+ ;; (message "Namespace %S" ast-object)
+ ;; (message "args: %S" args)
+ ;; (message "terminals: %S" terminals)
+ (setq
+ ast-current-namespace
+ ast-object)
ast-object))
phps-mode-parser--table-translations)
@@ -420,17 +396,41 @@
(lambda(args terminals)
(let ((ast-object
(list
+ 'type
'class
+ 'name
(nth 1 args)
+ 'index
(car (cdr (nth 1 terminals)))
+ 'start
(car (cdr (nth 5 terminals)))
- (car (cdr (nth 7 terminals))))))
- (message "Class %S" ast-object)
- (message "args: %S" args)
- (message "terminals: %S" terminals)
- (push
- ast-object
- imenu-classes)
+ 'end
+ (car (cdr (nth 7 terminals)))
+ 'children
+ (nth 6 args))))
+ ;; (message "Class %S" ast-object)
+ ;; (message "args: %S" args)
+ ;; (message "terminals: %S" terminals)
+ (if ast-current-namespace
+ (push
+ ast-object
+ ast-current-namespace-children)
+ (push
+ ast-object
+ ast))
+ ast-object))
+ phps-mode-parser--table-translations)
+
+ ;; class_statement_list -> (class_statement_list class_statement)
+ (puthash
+ 276
+ (lambda(args terminals)
+ ;; (message "class_statement_list: %S" args)
+ (let ((ast-object))
+ (if (car args)
+ (setq ast-object (append (car args) (cdr args)))
+ (setq ast-object (cdr args)))
+ ;; (message "ast-object: %S" ast-object)
ast-object))
phps-mode-parser--table-translations)
@@ -451,15 +451,29 @@
(car (cdr production))))))
(let ((translation (phps-mode-parser-translate))
(imenu-index))
- (message "translation: %S" translation)
-
- ;; TODO Build imenu-index here
- (should
- (equal
- imenu-index
- '(("MyNamespace" ("MyClass" ("__construct" . 92) ("myFunction1" .
193) ("myFunction2" . 365) ("myFunction3" . 445) ("myFunction4" . 515))))))
- ;; TODO Test bookkeeping here
- ))))
+ ;; (message "translation: %S" translation)
+
+ (when ast-current-namespace
+ (plist-put
+ ast-current-namespace
+ 'children
+ (reverse ast-current-namespace-children))
+ (push
+ ast-current-namespace
+ ast))
+
+ (message "\nAST:\n%S\n" ast)
+ (let ((imenu-index))
+ ;; TODO Build imenu-index here
+ (dolist (item ast)
+ )
+
+ (should
+ (equal
+ imenu-index
+ '(("MyNamespace" ("MyClass" ("__construct" . 92) ("myFunction1" .
193) ("myFunction2" . 365) ("myFunction3" . 445) ("myFunction4" . 515))))))
+ ;; TODO Test bookkeeping here
+ )))))
(message "\n-- Ran tests for parser translation. --"))
@@ -467,8 +481,8 @@
"Run test for lexer."
(message "-- Running all tests for parser... --\n")
+ (phps-mode-test-parser-translate)
(phps-mode-test-parser-parse)
- ;; (phps-mode-test-parser-translate)
(message "\n-- Ran all tests for parser. --"))
- [elpa] externals/phps-mode d44e79ad03 028/212: More work on grammar SDT, (continued)
- [elpa] externals/phps-mode d44e79ad03 028/212: More work on grammar SDT, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode f79b6118a4 087/212: Optimization of string indentation function, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode b94ee63396 089/212: More work on indentation, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d8503c70bb 106/212: Passing indent tests for switch case, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 4f20de353e 109/212: Passed indent tests for PSR-2, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 6655248e86 105/212: Passing indent test for regular switch statement, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 4e5be4f8f8 112/212: More indentation work for mixed PHP/HTML content, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode ff62626f48 110/212: Passing indent test for square bracket array, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 50d006852c 129/212: Fixed issue with indent being dependent on position of point on current line, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 3de8eff9f1 114/212: More wrestling with indentation, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d3b5a85b70 001/212: Using property list as basis for AST,
Christian Johansson <=
- [elpa] externals/phps-mode a80c12ef14 005/212: Passing imenu-generation for file with multiple namespaces, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 0071b40aae 007/212: Syntax coloring is now in separate file, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 1cc4aed616 016/212: Passing first bookkeeping test via generation via parser SDT, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode b3b27951bd 015/212: More work on bookkeeping, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 395a4ed045 036/212: Started on bookkeeping via parser SDT for properties, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 69341c9709 039/212: More working on bookkeeping of class properties via parser SDT, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode cefab36fa8 054/212: More work on bookkeeping arrow function variables, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d9cbe630b3 068/212: Passing bookkeeping of variables inside echo statements, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 0919855a31 073/212: Added SDT for concat operation, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 5df554fc47 070/212: Bookkeeping via AST properly handles $this reference in only non-static methods, Christian Johansson, 2022/01/26