[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode be00689e6f 119/135: Fixed sorting of imenu
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode be00689e6f 119/135: Fixed sorting of imenu |
Date: |
Sun, 29 Jan 2023 03:11:10 -0500 (EST) |
branch: externals/phps-mode
commit be00689e6f2f654c45d39152f739f72b6d7ca0e4
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Fixed sorting of imenu
---
phps-mode-ast.el | 92 ++++++++++++++++++++++++++++++++--------------
phps-mode-parser-sdt.el | 24 ++++--------
test/phps-mode-test-ast.el | 2 +-
3 files changed, 74 insertions(+), 44 deletions(-)
diff --git a/phps-mode-ast.el b/phps-mode-ast.el
index a6d9994243..7d4c4f18eb 100644
--- a/phps-mode-ast.el
+++ b/phps-mode-ast.el
@@ -82,38 +82,76 @@
(maphash
(lambda (k v)
(if (hash-table-p v)
- (let ((v-list))
+ (let ((v-list)
+ (v-index))
(maphash
(lambda (k2 v2)
(if (hash-table-p v2)
- (let ((v2-list))
- (maphash
- (lambda (k3 v3)
- (push
- `(,k3 . ,v3)
- v2-list))
- v2)
- (setq
- v2-list
- (sort
- v2-list
- (lambda (a b)
- (< (cdr a) (cdr b)))))
- (push
- `(,k2 ,v2-list)
- v-list))
- (push
- `(,k2 . ,v2)
- v-list)))
+ (let ((v2-list)
+ (v2-index))
+ (maphash
+ (lambda (k3 v3)
+ (if (symbolp k3)
+ (setq v2-index v3))
+ (push
+ `(,k3 . ,v3)
+ v2-list))
+ v2)
+
+ ;; Sort level 3
+ (setq
+ v2-list
+ (sort
+ v2-list
+ (lambda (a b)
+ (< (cdr a) (cdr b)))))
+ (push `(declaration . ,v2-index) v2-list)
+ (push `(,k2 ,v2-list) v-list))
+ (if (symbolp k2)
+ (setq v-index v2)
+ (push `(,k2 . ,v2) v-list))))
v)
- ;; TODO Sort by index here
- (push
- `(,k ,v-list)
- imenu-index))
- (push
- `(,k . ,v)
- imenu-index)))
+
+ ;; Sort level 2
+ (setq
+ v-list
+ (sort
+ v-list
+ (lambda (a b)
+ (cond
+ ((and
+ (listp (cdr a))
+ (listp (cdr b)))
+ (< (cdr (car (car (cdr a)))) (cdr (car (car (cdr b))))))
+ ((listp (cdr a))
+ (< (cdr (car (car (cdr a))) (cdr b))))
+ ((listp (cdr b))
+ (< (cdr a) (cdr (car (car (cdr b))))))
+ (t
+ (< (cdr a) (cdr b)))))))
+ (push `(declaration . ,v-index) v-list)
+ (push `(,k ,v-list) imenu-index))
+ (push `(,k . ,v) imenu-index)))
phps-mode-parser-sdt-symbol-imenu--table)
+
+ ;; Sort level 1
+ (setq
+ imenu-index
+ (sort
+ imenu-index
+ (lambda (a b)
+ (cond
+ ((and
+ (listp (cdr a))
+ (listp (cdr b)))
+ (< (cdr (car (car (cdr a)))) (cdr (car (car (cdr b))))))
+ ((listp (cdr a))
+ (< (cdr (car (car (cdr a))) (cdr b))))
+ ((listp (cdr b))
+ (< (cdr a) (cdr (car (car (cdr b))))))
+ (t
+ (< (cdr a) (cdr b)))))))
+
;; TODO sort imenu-index here
;; (setq
;; imenu-index
diff --git a/phps-mode-parser-sdt.el b/phps-mode-parser-sdt.el
index 2a471daf99..b58268f7e4 100644
--- a/phps-mode-parser-sdt.el
+++ b/phps-mode-parser-sdt.el
@@ -661,7 +661,9 @@
(if (gethash
name
phps-mode-parser-sdt--bookkeeping--superglobal-variable-p)
- name
+ (list
+ name
+ (list 'namespace nil 'class nil 'trait nil 'interface nil 'function nil
'superglobal t))
(let ((potential-uris (list ""))
(scope-namespace)
(scope-class)
@@ -1524,12 +1526,7 @@
(format
"%s (%d)"
symbol-uri
- (1+ (length (gethash symbol-uri
phps-mode-parser-sdt-symbol-table-by-uri))))))
- ;; TODO Place symbol in the correct place of the hierarchy here
- ;; (push
- ;; `(,symbol-uri-duplicate . ,symbol-start)
- ;; phps-mode-parser-sdt-symbol-imenu)
- )
+ (1+ (length (gethash symbol-uri
phps-mode-parser-sdt-symbol-table-by-uri)))))))
(puthash
phps-mode-parser-sdt-symbol-table-index
@@ -1545,11 +1542,6 @@
(list phps-mode-parser-sdt-symbol-table-index))
phps-mode-parser-sdt-symbol-table-by-uri))
- ;; TODO Place symbol at the correct place of the hierarchy here
- ;; (push
- ;; `(,symbol-uri . ,symbol-start)
- ;; phps-mode-parser-sdt-symbol-imenu)
-
(puthash
phps-mode-parser-sdt-symbol-table-index
(list
@@ -1570,10 +1562,10 @@
(dolist (
symbol-list
phps-mode-parser-sdt--bookkeeping-symbol-stack)
- (let* ((symbol-name (car symbol-list))
- (symbol-scope (car (cdr symbol-list)))
- (symbol-start (car (cdr (cdr symbol-list))))
- (symbol-end (car (cdr (cdr (cdr symbol-list)))))
+ (let* ((symbol-name (nth 0 symbol-list))
+ (symbol-scope (nth 1 symbol-list))
+ (symbol-start (nth 2 symbol-list))
+ (symbol-end (nth 3 symbol-list))
(symbol-uri-object
(phps-mode-parser-sdt--get-symbol-uri
symbol-name
diff --git a/test/phps-mode-test-ast.el b/test/phps-mode-test-ast.el
index 2d7d9ca4c4..1168b5f0fb 100644
--- a/test/phps-mode-test-ast.el
+++ b/test/phps-mode-test-ast.el
@@ -151,7 +151,7 @@
"<?php\n\n$var2 = 4;\n\nfunction myFunction($var)\n{\n $var3 = 3;\n
if ($var) {\n echo 'Hit';\n }\n if ($var2) {\n echo
'Miss';\n }\n if ($var3) {\n echo 'Hit';\n }\n}\n\nfunction
myFunction2($abc)\n{\n if ($var) {\n echo 'Miss';\n }\n if
($abc) {\n echo 'Hit';\n }\n}\n\nif ($var) {\n echo 'Miss';\n}\nif
($var2) {\n echo 'Hit';\n}"
"Bookkeeping in function level with variable assignments"
'(((8 13) 1) ((40 44) 3) ((52 57) 2) ((71 75) 3) ((113 118) 0) ((157 162)
2) ((216 220) 4) ((232 236) 0) ((275 279) 4) ((316 320) 0) ((347 352) 1))
- '(("id $var2" . 8) ("function myFunction" ((declaration . 29) ("id $var" .
40) ("id $var3" . 52)) ("function myFunction2" . ((declaration . 204) ("id
$abc" . 216))))))
+ '(("$var2" . 8) ("function myFunction" ((declaration . 29) ("$var" . 40)
("$var3" . 52))) ("function myFunction2" ((declaration . 204) ("$abc" . 216)))))
(phps-mode-test-ast--should-bookkeep
"<?php\n\n// Super-globals\n\nif ($_GET) {\n echo 'Hit';\n}\nif ($_POST)
{\n echo 'Hit';\n}\nif ($_COOKIE) {\n echo 'Hit';\n}\nif ($_SESSION) {\n
echo 'Hit';\n}\nif ($_REQUEST) {\n echo 'Hit';\n}\nif ($GLOBALS) {\n
echo 'Hit';\n}\nif ($_SERVER) {\n echo 'Hit';\n}\nif ($_FILES) {\n echo
'Hit';\n}\nif ($_ENV) {\n echo 'Hit';\n}\nif ($argc) {\n echo
'Hit';\n}\nif ($argv) {\n echo 'Hit';\n}\nif ($http_​response_​header) {\n
echo 'Hit';\n}"
- [elpa] externals/phps-mode a447ae69ba 106/135: Starting on generating imenu index for namespaces, classes, methods, traits, interfaces via SDT, (continued)
- [elpa] externals/phps-mode a447ae69ba 106/135: Starting on generating imenu index for namespaces, classes, methods, traits, interfaces via SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 16a63da318 113/135: More TODO items for bookkeeping, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 807c834649 116/135: More work on imenu generation, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode a84bfdccd3 120/135: More fighting the AST, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 23ba458f20 133/135: Updated version and date for 0.4.31, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode d5bdadc6fc 135/135: Improved installation documentation, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 8259e390b4 092/135: Added TODO item, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 9f21c86dd1 108/135: SDT integration now passing byte-compilation, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode ddc5b5aa2a 112/135: Using sorted bookkeeping for test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode b7d5d7823c 118/135: Starting on sorting imenu, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode be00689e6f 119/135: Fixed sorting of imenu,
Christian Johansson <=
- [elpa] externals/phps-mode 330e6fd6cc 128/135: Superglobals and $this not included in imenu index, Christian Johansson, 2023/01/29