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

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

[elpa] externals/phps-mode e82483e 6/7: More testing of generating imenu


From: Christian Johansson
Subject: [elpa] externals/phps-mode e82483e 6/7: More testing of generating imenu-index via parser SDT
Date: Sun, 7 Nov 2021 14:21:38 -0500 (EST)

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

    More testing of generating imenu-index via parser SDT
---
 test/phps-mode-test-parser.el | 100 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

diff --git a/test/phps-mode-test-parser.el b/test/phps-mode-test-parser.el
index 87ec3f1..607682a 100644
--- a/test/phps-mode-test-parser.el
+++ b/test/phps-mode-test-parser.el
@@ -348,6 +348,106 @@
        ;; TODO Test bookkeeping here
        )))
 
+  (let ((imenu-index)
+        (imenu-functions)
+        (imenu-namespaces)
+        (imenu-classes)
+        (imenu-methods))
+
+    ;; 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)
+       (let ((ast-object
+              (list
+               (nth 2 args)
+               (car (cdr (nth 2 terminals)))
+               (car (cdr (nth 9 terminals)))
+               (car (cdr (nth 11 terminals))))))
+         (message "Function: %S" ast-object)
+         ;; (message "terminals: %S" terminals)
+         (push
+          ast-object
+          imenu-functions)))
+     phps-mode-parser--table-translations)
+
+    ;; attributed_class_statement -> (method_modifiers function returns_ref 
identifier backup_doc_comment "(" parameter_list ")" return_type 
backup_fn_flags method_body backup_fn_flags)
+    (puthash
+     280
+     (lambda(args terminals)
+       (let ((ast-object
+              (list
+               (nth 3 args)
+               (car (cdr (nth 3 terminals)))
+               (car (cdr (car (nth 10 terminals))))
+               (cdr (cdr (car (cdr (cdr (nth 10 terminals)))))))))
+         (message "Method: %S" ast-object)
+         ;; (message "terminals: %S" terminals)
+         (push
+          ast-object
+          imenu-methods)))
+     phps-mode-parser--table-translations)
+
+    ;; top_statement -> (T_NAMESPACE namespace_declaration_name ";")
+    (puthash
+     106
+     (lambda(args terminals)
+       (let ((ast-object
+              (list
+               (nth 1 args)
+               (car (cdr (nth 1 terminals)))
+               (car (cdr (nth 2 terminals)))
+               'max)))
+         (message "Namespace %S" ast-object)
+         ;; (message "terminals: %S" terminals)
+         (push
+          ast-object
+          imenu-namespaces)))
+     phps-mode-parser--table-translations)
+
+    ;; class_declaration_statement -> (T_CLASS T_STRING extends_from 
implements_list backup_doc_comment "{" class_statement_list "}")
+    (puthash
+     180
+     (lambda(args terminals)
+       (let ((ast-object
+              (list
+               (nth 1 args)
+               (car (cdr (nth 1 terminals)))
+               (car (cdr (nth 5 terminals)))
+               (car (cdr (nth 7 terminals))))))
+         (message "Class %S" ast-object)
+         ;; (message "terminals: %S" terminals)
+         (push
+          ast-object
+          imenu-classes)))
+     phps-mode-parser--table-translations)
+
+    (phps-mode-test-parser--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() [...]
+     "Imenu with double quoted string with variable inside it and concatenated 
string"
+     (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
+         '(("MyNamespace" ("MyClass" ("__construct" . 92) ("myFunction1" . 
193) ("myFunction2" . 365) ("myFunction3" . 445) ("myFunction4" . 515))))))
+       ;; TODO Test bookkeeping here
+       )))
+
   (message "\n-- Ran tests for parser translation. --"))
 
 (defun phps-mode-test-parser ()



reply via email to

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