branch: externals/js2-mode commit f7751b45bf6efcbfae2779f3966ed4634ae3dc90 Author: Damien Cassou <dam...@cassou.me> Commit: Damien Cassou <dam...@cassou.me>
Make it possible to configure mocha node names for Imenu --- js2-imenu-extras.el | 21 ++++++++++++++++++--- tests/imenu-mocha.el | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/js2-imenu-extras.el b/js2-imenu-extras.el index 458c57f..3ec1ba8 100644 --- a/js2-imenu-extras.el +++ b/js2-imenu-extras.el @@ -124,6 +124,21 @@ Currently used for jQuery widgets, Dojo and Enyo declarations." :type 'boolean :group 'js2-imenu) +(defcustom js2-imenu-mocha-describe-node-names '("describe" "describe.only" "fdescribe") + "List of strings starting a describe() node." + :type '(repeat string) + :group 'js2-imenu) + +(defcustom js2-imenu-mocha-it-node-names '("it" "it.only" "fit") + "List of strings starting a it() node." + :type '(repeat string) + :group 'js2-imenu) + +(defcustom js2-imenu-mocha-hook-node-names '("beforeEach" "afterEach" "beforeAll" "afterAll") + "List of strings starting a hook node (e.g., before and after hooks)." + :type '(repeat string) + :group 'js2-imenu) + ;;;###autoload (defun js2-imenu-extras-setup () (when js2-imenu-enabled-frameworks @@ -300,17 +315,17 @@ describe() block." (defun js2-imenu-extras--mocha-describe-node-p (node) "Return non-nil if NODE is a mocha describe() block." (when-let ((name (js2-imenu-extras--call-target-name node))) - (member name '("describe" "describe.only" "fdescribe")))) + (member name js2-imenu-mocha-describe-node-names))) (defun js2-imenu-extras--mocha-it-node-p (node) "Return non-nil if NODE is a mocha it() block." (when-let ((name (js2-imenu-extras--call-target-name node))) - (member name '("it" "it.only" "fit")))) + (member name js2-imenu-mocha-it-node-names))) (defun js2-imenu-extras--mocha-before-after-node-p (node) "Return non-nil if NODE is a `{before,after}{Each,All}' block." (when-let ((name (js2-imenu-extras--call-target-name node))) - (member name '("beforeEach" "afterEach" "beforeAll" "afterAll")))) + (member name js2-imenu-mocha-hook-node-names))) (defun js2-imenu-extras--mocha-named-function-node-p (node) "Return non-nil if NODE is a function definition." diff --git a/tests/imenu-mocha.el b/tests/imenu-mocha.el index aeae912..13df3df 100644 --- a/tests/imenu-mocha.el +++ b/tests/imenu-mocha.el @@ -152,3 +152,39 @@ '(("top-level" ("<definition-1>" . 1) ("foo" . 33)))))))) + +(ert-deftest js2-imenu-mocha-customize-describe-node-name () + (js2-imenu-mocha-create-buffer + ("describe(\"top-level\", () => {" + " fooBar(\"sub\", () => {})" + "});") + (let* ((js2-imenu-mocha-describe-node-names '("describe" "fooBar")) + (result (js2-mode-create-imenu-index))) + (should (equal result + '(("top-level" + ("<definition-1>" . 1) + ("sub" . 33)))))))) + +(ert-deftest js2-imenu-mocha-customize-it-node-name () + (js2-imenu-mocha-create-buffer + ("describe(\"top-level\", () => {" + " fooBar(\"sub\", () => {})" + "});") + (let* ((js2-imenu-mocha-it-node-names '("fooBar")) + (result (js2-mode-create-imenu-index))) + (should (equal result + '(("top-level" + ("<definition-1>" . 1) + ("sub" . 33)))))))) + +(ert-deftest js2-imenu-mocha-customize-hook-node-name () + (js2-imenu-mocha-create-buffer + ("describe(\"top-level\", () => {" + " fooBar(() => {})" + "});") + (let* ((js2-imenu-mocha-hook-node-names '("fooBar")) + (result (js2-mode-create-imenu-index))) + (should (equal result + '(("top-level" + ("<definition-1>" . 1) + ("fooBar" . 33))))))))