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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phps-mode a0d2abc2ee 009/212: More working on imenu gen


From: Christian Johansson
Subject: [elpa] externals/phps-mode a0d2abc2ee 009/212: More working on imenu generation via parser SDT
Date: Wed, 26 Jan 2022 01:50:12 -0500 (EST)

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

    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"



reply via email to

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