X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/4e4c53b640bb2f6b5d9ab2f00857221dcce325b8..a1ac1e0fdea2e1ce69969acd139838e90c39f44d:/packages/js2-mode/js2-imenu-extras.el diff --git a/packages/js2-mode/js2-imenu-extras.el b/packages/js2-mode/js2-imenu-extras.el index 1e55b6991..dfdedc8ee 100644 --- a/packages/js2-mode/js2-imenu-extras.el +++ b/packages/js2-mode/js2-imenu-extras.el @@ -37,7 +37,7 @@ (require 'js2-mode) -(defconst js2-imenu-extension-styles +(defvar js2-imenu-extension-styles `((:framework jquery :call-re "\\_<\\(?:jQuery\\|\\$\\|_\\)\\.extend\\s-*(" :recorder js2-imenu-record-jquery-extend) @@ -237,20 +237,29 @@ Currently used for jQuery widgets, Dojo and Enyo declarations." ((and js2-imenu-show-other-functions (js2-function-node-p (js2-assign-node-right node))) - (js2-imenu-record-orphan-assign-node-function node)) + (js2-imenu-record-orphan-assign-node-function + (js2-assign-node-left node) + (js2-assign-node-right node))) ((and js2-imenu-show-module-pattern (js2-call-node-p (js2-assign-node-right node))) (js2-imenu-record-module-pattern (js2-assign-node-left node) (js2-assign-node-right node))))) - ((and js2-imenu-show-module-pattern - (js2-var-init-node-p node) - (js2-call-node-p - (js2-var-init-node-initializer node))) - (js2-imenu-record-module-pattern - (js2-var-init-node-target node) - (js2-var-init-node-initializer node)))) + ((js2-var-init-node-p node) + (cond + ((and js2-imenu-show-other-functions + (js2-function-node-p + (js2-var-init-node-initializer node))) + (js2-imenu-record-orphan-assign-node-function + (js2-var-init-node-target node) + (js2-var-init-node-initializer node))) + ((and js2-imenu-show-module-pattern + (js2-call-node-p + (js2-var-init-node-initializer node))) + (js2-imenu-record-module-pattern + (js2-var-init-node-target node) + (js2-var-init-node-initializer node)))))) t)))) (defun js2-imenu-parent-key-names (node) @@ -298,18 +307,15 @@ NODE must be `js2-object-prop-node'." (js2-record-imenu-entry fn-node chain (js2-node-abs-pos key-node))))))) -(defun js2-imenu-record-orphan-assign-node-function (node) - "Return orphan function entry when it's the right hand of NODE. -NODE must be `js2-assign-node'." - (let ((fn-node (js2-assign-node-right node))) - (when (or (not js2-imenu-function-map) - (eq 'skip - (gethash fn-node js2-imenu-function-map 'skip))) - (let* ((target-node (js2-assign-node-left node)) - (chain (js2-compute-nested-prop-get target-node))) - (when chain - (push js2-imenu-other-functions-ns chain) - (js2-record-imenu-entry fn-node chain (js2-node-abs-pos fn-node))))))) +(defun js2-imenu-record-orphan-assign-node-function (target-node fn-node) + "Record orphan function FN-NODE assigned to node TARGET." + (when (or (not js2-imenu-function-map) + (eq 'skip + (gethash fn-node js2-imenu-function-map 'skip))) + (let ((chain (js2-compute-nested-prop-get target-node))) + (when chain + (push js2-imenu-other-functions-ns chain) + (js2-record-imenu-entry fn-node chain (js2-node-abs-pos fn-node)))))) (defun js2-imenu-record-module-pattern (target init) "Recognize and record module pattern use instance.