(js2-imenu-record-module-pattern node)))\r
t))))\r
\r
-(defun js2-imenu-get-parent-keyname-list (node)\r
- "get the list of keys of parent of node\r
-for example, for javascript code, {rules:{ password {required: function(){}}}}\r
-the return will be '(rules password)."\r
- (let (rlt\r
- (n node))\r
+(defun js2-imenu-parent-key-names (node)\r
+ "Get the list of parent key names of NODE.\r
+\r
+For example, for code\r
+\r
+ {rules: {password: {required: function() {}}}}\r
+\r
+when NODE is the inner `js2-object-prop-mode',\r
+it returns `(\"rules\" \"password\")'."\r
+ (let (rlt (n node))\r
(while (setq n (js2-imenu-parent-prop-node n))\r
- (add-to-list 'rlt (js2-prop-node-name (js2-object-prop-node-left n))))\r
- rlt\r
- ))\r
+ (push (js2-prop-node-name (js2-object-prop-node-left n)) rlt))\r
+ rlt))\r
\r
(defun js2-imenu-parent-prop-node (node)\r
- "for javascript code: parent-key-name:{ required:function(){} }\r
-we need know the parent-key-name.\r
- step1, 'required:function(){}' is the js2-object-prop-node\r
- step2, '{ required:function(){} }' is the js2-object-node\r
- step3, 'parent-key-name:{ required:function(){} }' is js2-object-prop-node\r
-"\r
+ "When the parent of NODE is `js2-object-node',\r
+and the grandparent is `js2-object-prop-node',\r
+return the grandparent."\r
+ ;; Suppose the code is:\r
+ ;; {parent-key: {required: function() {}}}\r
+ ;; NODE is `required: function() {}'.\r
(let (p2 p3)\r
- ;; step 2\r
+ ;; Parent is `{required: function() {}}'.\r
(setq p2 (js2-node-parent node))\r
- ;; step 3\r
+ ;; GP is `parent-key: {required: function() {}}'.\r
(when (and p2 (js2-object-node-p p2))\r
(setq p3 (js2-node-parent p2))\r
(if (and p3 (js2-object-prop-node-p p3)) p3))))\r
(gethash fn-node js2-imenu-function-map))\r
(let ((key-node (js2-object-prop-node-left node))\r
(parent-prop-node (js2-imenu-parent-prop-node node))\r
- mylist)\r
- (setq mylist (append (js2-imenu-get-parent-keyname-list node)\r
- (list (js2-prop-node-name key-node))))\r
- (add-to-list 'mylist js2-imenu-other-functions-ns)\r
- (js2-record-imenu-entry fn-node mylist\r
+ chain)\r
+ (setq chain (nconc (js2-imenu-parent-key-names node)\r
+ (list (js2-prop-node-name key-node))))\r
+ (push js2-imenu-other-functions-ns chain)\r
+ (js2-record-imenu-entry fn-node chain\r
(js2-node-abs-pos key-node)))))))\r
\r
(defun js2-imenu-record-module-pattern (node)\r