]> code.delx.au - gnu-emacs-elpa/commitdiff
js2-imenu-extras: Define a minor mode
authorDmitry Gutov <dgutov@yandex.ru>
Fri, 10 May 2013 12:16:48 +0000 (16:16 +0400)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 10 May 2013 12:16:48 +0000 (16:16 +0400)
js2-do-parse: Use `run-hooks' on `js2-post-parse-callbacks'.
js2-post-parse-callbacks: Use `add-hook'.

The old way to set up this should still work, too.

js2-imenu-extras.el
js2-mode.el

index 30619051b3d0b4b46c2f27a210fb6291497b82e2..e8e15a505de4e234b633f5d5eb4c6676855a2452 100644 (file)
@@ -1,5 +1,7 @@
 ;;; js2-imenu-extras.el --- Imenu support for additional constructs\r
 \r
+;; Copyright (C) 2012-2013  Free Software Foundation, Inc.\r
+\r
 ;; Author:    Dmitry Gutov <dgutov@yandex.ru>\r
 ;; Keywords:  languages, javascript, imenu\r
 \r
 ;;; Commentary:\r
 \r
 ;; This package adds Imenu support for additional framework constructs and\r
-;; general patterns to `js2-mode'.\r
+;; structural patterns to `js2-mode'.\r
 \r
 ;; Usage:\r
 \r
-;; (eval-after-load 'js2-mode\r
-;;   '(progn\r
-;;      (require 'js2-imenu-extras)\r
-;;      (js2-imenu-extras-setup)))\r
+;; (add-hook 'js2-mode-hook 'js2-imenu-extras-mode)\r
 \r
 ;; To customize how it works:\r
 ;;   M-x customize-group RET js2-imenu RET\r
@@ -100,9 +99,13 @@ prefix any functions defined inside the IIFE with the module name."
 ;;;###autoload\r
 (defun js2-imenu-extras-setup ()\r
   (when js2-imenu-enabled-frameworks\r
-    (add-to-list 'js2-post-parse-callbacks 'js2-imenu-record-declarations t))\r
+    (add-hook 'js2-post-parse-callbacks 'js2-imenu-record-declarations t t))\r
   (when (or js2-imenu-show-other-functions js2-imenu-show-module-pattern)\r
-    (add-to-list 'js2-post-parse-callbacks 'js2-imenu-walk-ast t)))\r
+    (add-hook 'js2-post-parse-callbacks 'js2-imenu-walk-ast t t)))\r
+\r
+(defun js2-imenu-extras-remove ()\r
+  (remove-hook 'js2-post-parse-callbacks 'js2-imenu-record-declarations t)\r
+  (remove-hook 'js2-post-parse-callbacks 'js2-imenu-walk-ast t))\r
 \r
 (defun js2-imenu-record-declarations ()\r
   (let* ((styles (loop for style in js2-imenu-extension-styles\r
@@ -208,4 +211,12 @@ NODE must be `js2-assign-node'."
                 (js2-record-imenu-entry fn target-qname\r
                                         (js2-node-abs-pos target))))))))))\r
 \r
+;;;###autoload\r
+(define-minor-mode js2-imenu-extras-mode\r
+  "Toggle Imenu support for frameworks and structural patterns."\r
+  :lighter ""\r
+  (if js2-imenu-extras-mode\r
+      (js2-imenu-extras-setup)\r
+    (js2-imenu-extras-remove)))\r
+\r
 (provide 'js2-imenu-extras)\r
index b48945864d0b5c32abad1673f8daee5e0b026cd8..f7efc53a267b11838db40c61430b6a0bfee813ad 100644 (file)
@@ -7136,8 +7136,7 @@ Scanner should be initialized."
     ;; Give extensions a chance to muck with things before highlighting starts.
     (let ((js2-additional-externs js2-additional-externs))
       (save-excursion
-        (dolist (callback js2-post-parse-callbacks)
-          (funcall callback)))
+        (run-hooks 'js2-post-parse-callbacks))
       (js2-highlight-undeclared-vars))
     root))