branch: externals/phps-mode
commit a0d2abc2eecc4d793906d6663af13c22ca1b9f5a
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
More working on imenu generation via parser SDT
---
phps-mode-ast.el | 14 +++++++++++---
test/phps-mode-test-ast.el | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/phps-mode-ast.el b/phps-mode-ast.el
index 66e7f44091..0efce743e1 100644
--- a/phps-mode-ast.el
+++ b/phps-mode-ast.el
@@ -85,7 +85,7 @@
(setq
phps-mode-ast--current-namespace
ast-object)
- ast-object))
+ nil))
phps-mode-parser--table-translations)
;; top_statement -> (T_NAMESPACE namespace_declaration_name "{"
top_statement_list "}")
@@ -229,9 +229,17 @@
(setq
phps-mode-ast--tree
nil)
- (let ((_translation (phps-mode-parser-translate)))
+ (let ((translation (phps-mode-parser-translate)))
- ;; (message "translation: %S" translation)
+ (message "translation: %S" translation)
+ (when translation
+ (if phps-mode-ast--tree
+ (setq
+ phps-mode-ast--tree
+ (append phps-mode-ast--tree translation))
+ (setq
+ phps-mode-ast--tree
+ translation)))
(when phps-mode-ast--current-namespace
(plist-put
diff --git a/test/phps-mode-test-ast.el b/test/phps-mode-test-ast.el
index 544cc8d5b8..05339ce8e9 100644
--- a/test/phps-mode-test-ast.el
+++ b/test/phps-mode-test-ast.el
@@ -82,6 +82,50 @@
"Run test for imenu generation."
(message "-- Running tests for imenu generation... --\n")
+ (phps-mode-test-ast--buffer-contents
+ "<?php\nclass myClass\n{\n\n public function myFunction1()\n {\n
echo \"my string with variable {$variable} inside it\";\n }\n\n public
function myFunction2()\n {\n }\n\n}"
+ "Imenu generated via parser SDT for simple class"
+ (lambda()
+ (phps-mode-ast-generate)
+ (message "\nAST:\n%S\n" phps-mode-ast--tree)
+ (message "imenu-index:\n%S\n" phps-mode-ast--imenu)
+ (should (equal
+ phps-mode-ast--imenu
+ '(("myClass" ("myFunction1" . 44) ("myFunction2" . 153)))))))
+
+ ;; (phps-mode-test-ast--buffer-contents
+ ;; "<?php\ninterface myInterface {\n public function myFunctionA() {}\n
protected function myFunctionB() {}\n}\n"
+ ;; "Imenu generated via parser SDT for interface"
+ ;; (lambda()
+ ;; (phps-mode-ast-generate)
+ ;; (message "\nAST:\n%S\n" phps-mode-ast--tree)
+ ;; (message "imenu-index:\n%S\n" phps-mode-ast--imenu)
+ ;; (should (equal
+ ;; phps-mode-ast--imenu
+ ;; '(("myInterface" . (("myFunctionA" . 51) ("myFunctionB" .
91))))))))
+
+ ;; (phps-mode-test-ast--buffer-contents
+ ;; "<?php\nfunction myFunctionA() {}\nfunction myFunctionB() {}\n$var =
function () {\n echo 'here';\n};"
+ ;; "Imenu generated via parser SDT for function-oriented file without
namespace"
+ ;; (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-ast-generate)
+ ;; ;; (message "\nAST:\n%S\n" phps-mode-ast--tree)
+ ;; ;; (message "imenu-index:\n%S\n" phps-mode-ast--imenu)
+ ;; (should (equal
+ ;; phps-mode-ast--imenu
+ ;; '(("myFunctionA" . 16) ("myFunctionB" . 42))))))
+
(phps-mode-test-ast--buffer-contents
"<?php\n\nnamespace MyNamespace;\n\nfunction aFunction() {\n /**\n *
With some contents\n */\n}\n\nclass MyClass\n{\n\n /**\n *\n
*/\n public function __construct()\n {\n if ($test) {\n }\n
}\n\n /**\n *\n */\n public function myFunction1()\n {\n
$this->addMessage(\"My random {$message} here\" . ($random > 1 ? \"A\" :
\"\") . \" was here.\");\n }\n \n /**\n *\n */\n public
function myFunction2()\n [...]
"Passed imenu-generation via parser AST for basic object oriented file"