From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Filipp Gunbin Newsgroups: gmane.emacs.devel Subject: Re: [imenu.el] Attempt to fix broken imenu--generic-function Date: Wed, 18 Jul 2018 01:14:20 +0300 Message-ID: References: <5bda37af-3edd-4938-8ba4-ad6e04032e69@default> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1531865556 22738 195.159.176.226 (17 Jul 2018 22:12:36 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 17 Jul 2018 22:12:36 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (darwin) Cc: emacs-devel@gnu.org To: Drew Adams Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jul 18 00:12:32 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ffYCq-0005gp-78 for ged-emacs-devel@m.gmane.org; Wed, 18 Jul 2018 00:12:28 +0200 Original-Received: from localhost ([::1]:33566 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYEv-00041J-76 for ged-emacs-devel@m.gmane.org; Tue, 17 Jul 2018 18:14:37 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYEk-00040B-Nc for emacs-devel@gnu.org; Tue, 17 Jul 2018 18:14:27 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffYEg-0004UE-Jd for emacs-devel@gnu.org; Tue, 17 Jul 2018 18:14:26 -0400 Original-Received: from out2-smtp.messagingengine.com ([66.111.4.26]:44083) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ffYEg-0004Ta-D8 for emacs-devel@gnu.org; Tue, 17 Jul 2018 18:14:22 -0400 Original-Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id F38EA21D1E; Tue, 17 Jul 2018 18:14:21 -0400 (EDT) Original-Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Tue, 17 Jul 2018 18:14:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=iSNA/g+HEofY/SwG9hR43jUIhBkscmsiomXP+1VdfoI=; b=BPm8YZIQ DQIdq+1a2fh3udNGu/fDBXvU5FHcH2kxciMXRb/Ip50nzrQX/jQ7bfALwwCXgTAK SJdzo5f3RqSLFNRZTW+bqXo7VF5DXA1A6FVaIqnFbZ4RWrgzrW5xNyBBYpHpwh3C ivkct8H2gYvsptwIyDWeXsWYD4wYTidLufHeMbLoX3Bb6moEprPSfwDH8I1XQTT1 knz1mkHeacIV0tsZbLe1mP7WKsSVyJnf3pTAB5YOpSN8LElYlo4sdCIUwWCctlwN kbwm482fAzAs/wNU50Nj+3sbaPV64lnw0j36HGSwzexmfcsNqKiwzyXdCmb/Dnf1 +Ih6Xen+v+MHoQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=iSNA/g+HEofY/SwG9hR43jUIhBksc msiomXP+1VdfoI=; b=nrK/R1kQIgP5pNLP0gax/5l6JQszuTnPbjPuM5VxrMMaK 9mZ6UkdgvgZri9Pgftt3G79v7iPKXtQ8xnQ3yTlF+2kC2s+Gj5uRzB357nMm6XlU 0afBLdOTdSJ5xrmlcRNnVyQWeOTUXs62FyUJTgWsqbIlUHScNg/dDDk43v4Ywwve b2qyoVXtdyR3Dok3jE9sk2qflphd3fOw0/HdpdBJTQBiXM2o6XKFP3ec8n8GQcvJ mxWXz6V3hUF1Y4XR6t68NZuFpU3JUu2pEh4I6kfEQ/00B43EW9HqZu6PZVTnyA7v ZwgVYNY+te3ZCiUwJpxOfHzVh9qgOqEsUKqfIvg+A== X-ME-Proxy: X-ME-Sender: Original-Received: from fgunbin.local (unknown [93.185.26.195]) by mail.messagingengine.com (Postfix) with ESMTPA id ED6F6E435C; Tue, 17 Jul 2018 18:14:20 -0400 (EDT) In-Reply-To: <5bda37af-3edd-4938-8ba4-ad6e04032e69@default> (Drew Adams's message of "Tue, 17 Jul 2018 13:55:27 -0700 (PDT)") X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.111.4.26 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:227522 Archived-At: On 17/07/2018 13:55 -0700, Drew Adams wrote: >> Drew, I'm sorry, your commit 77166e0da2d58f2f6436989b7059d913be5b3439 >> broke imenu. Do you have objections for this fix? > > Sorry, but I have no idea what you're talking about. > I haven't committed anything. > > Is this about some Emacs bug? If so, what bug #? > > Can you please specify what was broken, how/why, etc.? > > Thx. Yes, it's in emacs master (emacs-devel list is in CC). I gave commit hash (77166e0da2d58f2f6436989b7059d913be5b3439). Below is the relevant diff of your change. What is broken: result of nconc is no longer returned from the function. And, it's unclear why test `(consp (car index-alist))' before filtering empty menus - by this time main-element is already "spliced" into the index-alist, so index-alist element may be a usual element (INDEX-NAME . INDEX-POSITION) or nested index alist (INDEX-NAME . INDEX-ALIST). So the test appears obscure. That results in imenu errors. My fix attempts to preseve the behavior you added, while fixing that. I'm not attaching the diff again, it's in the previous message. commit 77166e0da2d58f2f6436989b7059d913be5b3439 Author: Drew Adams Date: Sat Jul 7 19:20:45 2018 +0300 Fix 2 minor bugs in 'imenu--generic-function' * lisp/imenu.el (imenu--generic-function): Move point to START before checking whether the current item is inside a comment or a string. Remove any empty menus that could have been added before returning. (Bug#32024) diff --git a/lisp/imenu.el b/lisp/imenu.el --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -828,9 +830,15 @@ (set-syntax-table old-table))) ;; Sort each submenu by position. ;; This is in case one submenu gets items from two different regexps. (dolist (item index-alist) (when (listp item) (setcdr item (sort (cdr item) 'imenu--sort-by-position)))) (let ((main-element (assq nil index-alist))) (nconc (delq main-element (delq 'dummy index-alist)) - (cdr main-element))))) + (cdr main-element))) + ;; Remove any empty menus. That can happen because of skipping + ;; things inside comments or strings. + (when (consp (car index-alist)) + (setq index-alist (cl-delete-if-not + (lambda (it) (cdr it)) + index-alist)))))