From: Moritz Bunkus <moritz@bunkus.org>
To: 19285@debbugs.gnu.org
Subject: bug#19285: 24.4; ruby-imenu-create-index-in-block gets confused by regular expression in source code
Date: Fri, 05 Dec 2014 22:01:15 +0100 [thread overview]
Message-ID: <m3bnnhbylg.fsf@sweet-chili.local.bunkus.org> (raw)
Hey,
If I have certain Ruby code inside my source file then
ruby-imenu-create-index-in-block (which is `imenu-create-index-function'
is set to in ruby-mode) then imenu only sees the definitions that occur
before said regular expression.
The smallest test case I've come up with is the following snippet:
--------------------------------------------------
#!/usr/bin/ruby
class TestMe
def func1
if ! /class\s+.*?\s+<\s+Test/.match(content)
true
end
end
def func2
end
end
--------------------------------------------------
In this source file imenu only offers `TestMe#func1' and `TestMe' itself
but not `TestMe#func2'. If I remove the content of `func` (or change the
`if' clause to something simpler) then `imenu` does see `TestMe#func2'
again.
I've verified this with »emacs -Q test_file.rb« followed by M-x imenu
RET
This is ruby-mode.el from Emacs itself:
;;; ruby-mode.el --- Major mode for editing Ruby files
;; Copyright (C) 1994-2014 Free Software Foundation, Inc.
;; Authors: Yukihiro Matsumoto
;; Nobuyoshi Nakada
;; URL: http://www.emacswiki.org/cgi-bin/wiki/RubyMode
;; Created: Fri Feb 4 14:49:13 JST 1994
;; Keywords: languages ruby
;; Version: 1.2
How to reproduce:
- Write the aforementioned snippet into a file.
- emacs -Q thatfile.rb
- Enable `ruby-mode' if it isn't enabled already, load `imenu' if it
hasn't been loaded alread
- M-x imenu RET
- Observe described behavior
In GNU Emacs 24.4.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.14.3)
of 2014-10-21 on bitzer.hoetzel.info
Configured using:
`configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
--localstatedir=/var --with-x-toolkit=gtk3 --with-xft
'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong
--param=ssp-buffer-size=4' CPPFLAGS=-D_FORTIFY_SOURCE=2
LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro'
Important settings:
value of $LC_COLLATE: de_DE.UTF-8
value of $LC_CTYPE: de_DE.UTF-8
value of $LC_MONETARY: de_DE.UTF-8
value of $LC_NUMERIC: de_DE.UTF-8
value of $LC_TIME: de_DE.UTF-8
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Ruby
Minor modes in effect:
flymake-mode: t
hi-lock-mode: t
ido-everywhere: t
magit-auto-revert-mode: t
shell-dirtrack-mode: t
diff-auto-refine-mode: t
global-edit-server-edit-mode: t
which-function-mode: t
global-hl-line-mode: t
show-paren-mode: t
winner-mode: t
yas-global-mode: t
yas-minor-mode: t
tooltip-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
C-p C-p C-n C-k C-x C-s ESC i C-g C-k C-k C-x C-s ESC
i C-g C-k C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n
C-n C-p C-p C-p C-k C-x C-s ESC i C-g C-_ C-_ C-n C-@
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-w ESC p ESC RET
C-k C-p C-p ESC RET t r u e C-x C-s ESC i C-g C-p ESC
O D ESC O D C-d C-x C-s ESC i C-g SPC C-x C-s C-p ESC
f ESC f ESC b ESC DEL ESC d ESC d ESC d f u n c 1 C-n
C-n C-n C-n C-n C-n ESC DEL ESC d f u n c 1 C-x C-s
DEL 2 C-x C-s ESC i C-a ESC x r e C-g C-g C-g ESC x
r e p o r t - e m a c s RET r u b y - m o d e ' s SPC
i n d DEL DEL DEL C-g C-h v r u b y - m a k e DEL DEL
DEL DEL i m e n u C-g C-h v i m e n u - C-g C-h f r
u b y C-@ i m e n u C-g ESC x ESC O A RET r u b y -
i e DEL m e n ESC ' ESC b C-e SPC g e t s SPC c o n
f u s e d SPC b y SPC r e g u l a r SPC e x p r e s
s i o n SPC i n SPC s o u r c e SPC c o d e RET ESC
O A ESC O A ESC x ESC O A RET
Recent messages:
Wrote /home/mosu/tmp/bla.rb
Auto-saving...done
Saving file /home/mosu/tmp/bla.rb...
Wrote /home/mosu/tmp/bla.rb
Saving file /home/mosu/tmp/bla.rb...
Wrote /home/mosu/tmp/bla.rb
completing-read-default: Command attempted to use minibuffer while in minibuffer
Quit [7 times]
Scanning for dabbrevs...done
Waiting for process to die...done
Quit
Load-path shadows:
/home/mosu/.emacs.d/site-start.d/libs/paredit hides /home/mosu/.emacs.d/elpa/paredit-20140128.1248/paredit
/home/mosu/.emacs.d/site-start.d/libs/buff-menu hides /usr/share/emacs/24.4/lisp/buff-menu
/usr/share/emacs/site-lisp/flim/hex-util hides /usr/share/emacs/24.4/lisp/hex-util
/usr/share/emacs/site-lisp/flim/md4 hides /usr/share/emacs/24.4/lisp/md4
/home/mosu/.emacs.d/site-start.d/libs/cc-langs hides /usr/share/emacs/24.4/lisp/progmodes/cc-langs
/home/mosu/.emacs.d/site-start.d/libs/cc-align hides /usr/share/emacs/24.4/lisp/progmodes/cc-align
/home/mosu/.emacs.d/site-start.d/libs/cc-defs hides /usr/share/emacs/24.4/lisp/progmodes/cc-defs
/home/mosu/.emacs.d/site-start.d/libs/cc-mode hides /usr/share/emacs/24.4/lisp/progmodes/cc-mode
/home/mosu/.emacs.d/site-start.d/libs/cc-fonts hides /usr/share/emacs/24.4/lisp/progmodes/cc-fonts
/home/mosu/.emacs.d/site-start.d/libs/cc-styles hides /usr/share/emacs/24.4/lisp/progmodes/cc-styles
/home/mosu/.emacs.d/site-start.d/libs/cc-vars hides /usr/share/emacs/24.4/lisp/progmodes/cc-vars
/home/mosu/.emacs.d/site-start.d/libs/cc-menus hides /usr/share/emacs/24.4/lisp/progmodes/cc-menus
/home/mosu/.emacs.d/site-start.d/libs/cc-cmds hides /usr/share/emacs/24.4/lisp/progmodes/cc-cmds
/home/mosu/.emacs.d/site-start.d/libs/cc-awk hides /usr/share/emacs/24.4/lisp/progmodes/cc-awk
/home/mosu/.emacs.d/elpa/flymake-0.4.16/flymake hides /usr/share/emacs/24.4/lisp/progmodes/flymake
/home/mosu/.emacs.d/site-start.d/libs/cc-compat hides /usr/share/emacs/24.4/lisp/progmodes/cc-compat
/home/mosu/.emacs.d/site-start.d/libs/cc-engine hides /usr/share/emacs/24.4/lisp/progmodes/cc-engine
/home/mosu/.emacs.d/site-start.d/libs/cfengine hides /usr/share/emacs/24.4/lisp/progmodes/cfengine
/home/mosu/.emacs.d/site-start.d/libs/cperl-mode/cperl-mode hides /usr/share/emacs/24.4/lisp/progmodes/cperl-mode
/home/mosu/.emacs.d/site-start.d/libs/cc-bytecomp hides /usr/share/emacs/24.4/lisp/progmodes/cc-bytecomp
/home/mosu/.emacs.d/site-start.d/libs/cc-guess hides /usr/share/emacs/24.4/lisp/progmodes/cc-guess
/usr/share/emacs/site-lisp/flim/sasl-digest hides /usr/share/emacs/24.4/lisp/net/sasl-digest
/usr/share/emacs/site-lisp/flim/hmac-def hides /usr/share/emacs/24.4/lisp/net/hmac-def
/usr/share/emacs/site-lisp/flim/sasl-cram hides /usr/share/emacs/24.4/lisp/net/sasl-cram
/usr/share/emacs/site-lisp/flim/ntlm hides /usr/share/emacs/24.4/lisp/net/ntlm
/usr/share/emacs/site-lisp/flim/sasl hides /usr/share/emacs/24.4/lisp/net/sasl
/usr/share/emacs/site-lisp/flim/hmac-md5 hides /usr/share/emacs/24.4/lisp/net/hmac-md5
/usr/share/emacs/site-lisp/flim/sasl-ntlm hides /usr/share/emacs/24.4/lisp/net/sasl-ntlm
/usr/share/emacs/site-lisp/semi/smime hides /usr/share/emacs/24.4/lisp/gnus/smime
/home/mosu/.emacs.d/site-start.d/libs/cl-lib hides /usr/share/emacs/24.4/lisp/emacs-lisp/cl-lib
/usr/share/emacs/site-lisp/semi/pgg-parse hides /usr/share/emacs/24.4/lisp/obsolete/pgg-parse
/usr/share/emacs/site-lisp/semi/pgg-pgp5 hides /usr/share/emacs/24.4/lisp/obsolete/pgg-pgp5
/usr/share/emacs/site-lisp/semi/pgg-def hides /usr/share/emacs/24.4/lisp/obsolete/pgg-def
/usr/share/emacs/site-lisp/semi/pgg-gpg hides /usr/share/emacs/24.4/lisp/obsolete/pgg-gpg
/usr/share/emacs/site-lisp/semi/pgg hides /usr/share/emacs/24.4/lisp/obsolete/pgg
/usr/share/emacs/site-lisp/semi/pgg-pgp hides /usr/share/emacs/24.4/lisp/obsolete/pgg-pgp
Features:
(shadow mail-extr emacsbug autoconf autoconf-mode m4-mode flymake
ruby-mode novice eieio-opt speedbar sb-image ezimage dframe find-func
ack-and-a-half smerge-mode dabbrev vc-git hi-lock hideshow cc-subword
cc-mode cc-fonts cc-awk cc-guess cc-menus cc-cmds cc-styles cc-align
cc-engine cc-langs cc-vars cc-defs cc-bytecomp tabify jka-compr dns-mode
bookmark pp rect sort tramp-cmds tramp-sh conf-mode tramp-cache footnote
flyspell ispell sh-script smie executable misearch multi-isearch xterm f
s paredit two-column 70-perl cperl-mode etags man 70-ido ido magit-blame
dired-x dired-sort-map dired-single dired magit-key-mode magit view
tramp tramp-compat auth-source gnus-util password-cache tramp-loaddefs
trampver shell pcomplete grep compile comint epa epg diff-mode
autorevert filenotify ansi-color git-rebase-mode thingatpt
git-commit-mode server log-edit message idna sendmail format-spec rfc822
mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mailabbrev mail-utils gmm-utils
mailheader pcvs-util add-log solarized-light-theme solarized-definitions
70-html-xml rng-nxml rng-valid rng-loc rng-uri rng-parse nxml-parse
rng-match rng-dt rng-util rng-pttrn nxml-ns nxml-mode nxml-outln
nxml-rap nxml-util nxml-glyph nxml-enc xmltok saveplace buff-menu+
buff-menu edit-server 70-helpers which-func imenu dash-functional dash
browse-kill-ring hl-line time-date paren 70-text 70-tabs filladapt
winner ring 01-version-test my-site-start yasnippet advice help-fns
derived easy-mmode edmacro kmacro help-mode ack-and-a-half-autoloads
ag-autoloads clojure-test-mode-autoloads cider-autoloads
dash-functional-autoloads elixir-mode-autoloads expand-region-autoloads
f-autoloads dash-autoloads flymake-autoloads flymake-yaml-autoloads
flymake-easy-autoloads gist-autoloads finder-inf gh-autoloads eieio
byte-opt bytecomp byte-compile cconv eieio-core logito-autoloads info
easymenu magit-autoloads git-rebase-mode-autoloads
git-commit-mode-autoloads markdown-mode-autoloads nrepl-autoloads
clojure-mode-autoloads paredit-autoloads pcache-autoloads
pkg-info-autoloads epl-autoloads s-autoloads tracwiki-mode-autoloads
xml-rpc-autoloads yaml-mode-autoloads package epg-config cl-macs cl gv
cl-loaddefs cl-lib tooltip electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote make-network-process dbusbind
gfilenotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty emacs)
Memory information:
((conses 16 560044 79106)
(symbols 48 40437 18)
(miscs 40 6094 4560)
(strings 32 90842 16542)
(string-bytes 1 2716159)
(vectors 16 46859)
(vector-slots 8 1778267 27228)
(floats 8 1723 1962)
(intervals 56 19763 781)
(buffers 960 113)
(heap 1024 41786 3167))
next reply other threads:[~2014-12-05 21:01 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-05 21:01 Moritz Bunkus [this message]
2015-03-09 3:58 ` bug#19285: 24.4; ruby-imenu-create-index-in-block gets confused by regular expression in source code Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3bnnhbylg.fsf@sweet-chili.local.bunkus.org \
--to=moritz@bunkus.org \
--cc=19285@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.