GNU bug report logs - #14111
[patch] handle function names with a single char in imenu in sh-mode

Previous Next

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.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 14111 in the body.
You can then email your comments to 14111 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#14111; Package emacs. (Mon, 01 Apr 2013 07:49:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Masatake YAMATO <yamato <at> redhat.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 01 Apr 2013 07:49:02 GMT) Full text and rfc822 format available.

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




bug marked as fixed in version 24.4, send any further explanations to 14111 <at> debbugs.gnu.org and Masatake YAMATO <yamato <at> redhat.com> Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Mon, 22 Apr 2013 01:53:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 20 May 2013 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 12 years and 91 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.