From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Masatake YAMATO Newsgroups: gmane.emacs.bugs Subject: bug#14111: [patch] handle function names with a single char in imenu in sh-mode Date: Mon, 01 Apr 2013 16:45:01 +0900 (JST) Organization: Red Hat Japan, Inc. Message-ID: <20130401.164501.864987774352059653.yamato@redhat.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: Text/Plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1364802379 21590 80.91.229.3 (1 Apr 2013 07:46:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 1 Apr 2013 07:46:19 +0000 (UTC) To: 14111@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Apr 01 09:46:46 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UMZS1-0007bk-Hs for geb-bug-gnu-emacs@m.gmane.org; Mon, 01 Apr 2013 09:46:45 +0200 Original-Received: from localhost ([::1]:42641 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZRd-00084b-19 for geb-bug-gnu-emacs@m.gmane.org; Mon, 01 Apr 2013 03:46:21 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:55914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZRV-000837-EF for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:46:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UMZRT-0001M2-7f for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:46:13 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:51246) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZRT-0001Lx-3w for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:46:11 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UMZUE-0003Ii-4K for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:49:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Masatake YAMATO Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 01 Apr 2013 07:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 14111 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.136480249912627 (code B ref -1); Mon, 01 Apr 2013 07:49:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 1 Apr 2013 07:48:19 +0000 Original-Received: from localhost ([127.0.0.1]:55355 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UMZTW-0003Ha-0L for submit@debbugs.gnu.org; Mon, 01 Apr 2013 03:48:19 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:44395) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UMZTP-0003HP-LU for submit@debbugs.gnu.org; Mon, 01 Apr 2013 03:48:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UMZQZ-0001CL-PN for submit@debbugs.gnu.org; Mon, 01 Apr 2013 03:45:20 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:51217) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZQZ-0001CG-M7 for submit@debbugs.gnu.org; Mon, 01 Apr 2013 03:45:15 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:55737) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZQX-0007Ur-Dr for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:45:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UMZQS-0001Ag-2O for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:45:13 -0400 Original-Received: from mx1.redhat.com ([209.132.183.28]:23324) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMZQR-00019D-QH for bug-gnu-emacs@gnu.org; Mon, 01 Apr 2013 03:45:07 -0400 Original-Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r317j3n8015708 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 1 Apr 2013 03:45:06 -0400 Original-Received: from localhost (dhcp-193-94.nrt.redhat.com [10.64.193.94]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r317j1YS004331 for ; Mon, 1 Apr 2013 03:45:02 -0400 X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:73059 Archived-At: 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 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: =3D=3D=3D 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 + + * progmodes/sh-script.el (sh-imenu-generic-expression): Handle + function names with a single character. + 2013-03-30 Fabi=E1n Ezequiel Gallina = Un-indent after "pass" and "return" statements (Bug#13888) =3D=3D=3D 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 definit= ions. =3D=3D=3D 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 + + * automated/imenu-tests.el: New file. + 2013-03-30 Fabi=E1n Ezequiel Gallina = * automated/python-tests.el (python-indent-block-enders): New test. =3D=3D=3D 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 +;; 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 b= y +;; 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 . + +;;; Code: + +(require 'imenu) + +;; (imenu-simple-scan-deftest-gather-strings-from-list +;; '(nil t 'a (0 . "x") ("c" . "d") ("a" 0 "b") )) +;; =3D> ("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 expec= ted-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-fun= ction' +at the buffer which content is CONTENT with MAJOR-MODE. Then it compar= es a list +of strings which are picked up from the result with EXPECTED-ITEMS." + (let ((xname (intern (concat "imenu-simple-scan-deftest-" (symbol-na= me 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