Package: emacs;
Reported by: Masatake YAMATO <yamato <at> redhat.com>
Date: Mon, 1 Apr 2013 07:49:02 UTC
Severity: normal
Tags: patch
Fixed in version 24.4
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Masatake YAMATO <yamato <at> redhat.com> To: bug-gnu-emacs <at> gnu.org Subject: [patch] handle function names with a single char in imenu in sh-mode Date: Mon, 01 Apr 2013 16:45:01 +0900 (JST)
This report includes a patch fixing a bug. Please, review and install it to the official tree if appreciated. The patch from two parts: 1. fixing imenu expression for sh-mode. 2. A test case Description of bug: Imenu in sh-mode cannot capture "a" in following buffer: a() { } `sh-imenu-generic-expression' expects function names consist of more than 2 characters. ------------------------------------------------------------ revno: 112200 committer: Masatake YAMATO <yamato <at> redhat.com> branch nick: emacs-sh-add-log timestamp: Mon 2013-04-01 16:41:48 +0900 message: * lisp/progmodes/sh-script.el (sh-imenu-generic-expression): Handle function names with a single character. * automated/imenu-tests.el: New file. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2013-03-30 19:31:27 +0000 +++ lisp/ChangeLog 2013-04-01 07:41:48 +0000 @@ -1,3 +1,8 @@ +2013-04-01 Masatake YAMATO <yamato <at> localhost.localdomain> + + * progmodes/sh-script.el (sh-imenu-generic-expression): Handle + function names with a single character. + 2013-03-30 Fabián Ezequiel Gallina <fabian <at> anue.biz> Un-indent after "pass" and "return" statements (Bug#13888) === modified file 'lisp/progmodes/sh-script.el' --- lisp/progmodes/sh-script.el 2013-03-05 17:13:01 +0000 +++ lisp/progmodes/sh-script.el 2013-04-01 07:41:48 +0000 @@ -335,11 +335,11 @@ . ((nil ;; function FOO ;; function FOO() - "^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*\\(?:()\\)?" + "^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?" 1) ;; FOO() (nil - "^\\s-*\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*()" + "^\\s-*\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*()" 1) ))) "Alist of regular expressions for recognizing shell function definitions. === modified file 'test/ChangeLog' --- test/ChangeLog 2013-03-30 16:55:47 +0000 +++ test/ChangeLog 2013-04-01 07:41:48 +0000 @@ -1,3 +1,7 @@ +2013-04-01 Masatake YAMATO <yamato <at> redhat.com> + + * automated/imenu-tests.el: New file. + 2013-03-30 Fabián Ezequiel Gallina <fabian <at> anue.biz> * automated/python-tests.el (python-indent-block-enders): New test. === added file 'test/automated/imenu-tests.el' --- test/automated/imenu-tests.el 1970-01-01 00:00:00 +0000 +++ test/automated/imenu-tests.el 2013-04-01 07:41:48 +0000 @@ -0,0 +1,87 @@ +;;; imenu-tests.el --- Test suite for imenu. + +;; Copyright (C) 2013 Free Software Foundation, Inc. + +;; Author: Masatake YAMATO <yamato <at> redhat.com> +;; Keywords: tools convenience + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. + +;;; Code: + +(require 'imenu) + +;; (imenu-simple-scan-deftest-gather-strings-from-list +;; '(nil t 'a (0 . "x") ("c" . "d") ("a" 0 "b") )) +;; => ("b" "a" "d" "c" "x") +(defun imenu-simple-scan-deftest-gather-strings-from-list(input) + "Gather strings from INPUT, a list." + (let ((result ())) + (while input + (cond + ((stringp input) + (setq result (cons input result) + input nil)) + ((atom input) + (setq input nil)) + ((listp (car input)) + (setq result (append + (imenu-simple-scan-deftest-gather-strings-from-list (car input)) + result) + input (cdr input))) + ((stringp (car input)) + (setq result (cons (car input) result) + input (cdr input))) + (t + (setq input (cdr input))))) + result)) + +(defmacro imenu-simple-scan-deftest (name doc major-mode content expected-items) + "Generate an ert test for mode-own imenu expression. +Run `imenu-create-index-function' at the buffer which content is +CONTENT with MAJOR-MODE. A generated test runs `imenu-create-index-function' +at the buffer which content is CONTENT with MAJOR-MODE. Then it compares a list +of strings which are picked up from the result with EXPECTED-ITEMS." + (let ((xname (intern (concat "imenu-simple-scan-deftest-" (symbol-name name))))) + `(ert-deftest ,xname () + ,doc + (with-temp-buffer + (insert ,content) + (funcall ',major-mode) + (let ((result-items (sort (imenu-simple-scan-deftest-gather-strings-from-list + (funcall imenu-create-index-function)) + #'string-lessp)) + (expected-items (sort (copy-sequence ,expected-items) #'string-lessp))) + (should (equal result-items expected-items)) + ))))) + +(imenu-simple-scan-deftest sh "Test imenu expression for sh-mode." sh-mode "a() +{ +} +function b +{ +} +function c() +{ +} +function ABC_D() +{ +} +" '("a" "b" "c" "ABC_D")) + +(provide 'imenu-tests) + +;;; imenu-tests.el ends here
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.