@item
In Ruby code, @code{def} or @code{class} or @code{module} at the
-beginning of a line generate a tag.
+beginning of a line generate a tag. Constants also generate tags.
@end itemize
You can also generate tags based on regexp matching (@pxref{Etags
+++
*** New language Ruby
-Names of modules, classes, methods, and functions are tagged.
-Overloaded operators are also tagged.
+Names of modules, classes, methods, functions, and constants are
+tagged. Overloaded operators are also tagged.
+++
*** Improved support for Lua
LOOP_ON_INPUT_LINES (inf, lb, cp)
{
+ bool is_class = false;
+ bool is_method = false;
+ char *name;
+
cp = skip_spaces (cp);
- if (LOOKING_AT (cp, "def")
- || LOOKING_AT (cp, "class")
- || LOOKING_AT (cp, "module"))
+ if (c_isalpha (*cp) && c_isupper (*cp)) /* constants */
{
- char *name = cp;
+ char *bp, *colon = NULL;
+
+ name = cp;
+
+ for (cp++; c_isalnum (*cp) || *cp == '_' || *cp == ':'; cp++)
+ {
+ if (*cp == ':')
+ colon = cp;
+ }
+ if (cp > name + 1)
+ {
+ bp = skip_spaces (cp);
+ if (*bp == '=' && c_isspace (bp[1]))
+ {
+ if (colon && !c_isspace (colon[1]))
+ name = colon + 1;
+ make_tag (name, cp - name, false,
+ lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+ }
+ }
+ }
+ else if ((is_method = LOOKING_AT (cp, "def")) /* module/class/method */
+ || (is_class = LOOKING_AT (cp, "class"))
+ || LOOKING_AT (cp, "module"))
+ {
+ const char self_name[] = "self.";
+ const size_t self_size1 = sizeof ("self.") - 1;
+
+ name = cp;
/* Ruby method names can end in a '='. Also, operator overloading can
define operators whose names include '='. */
while (!notinname (*cp) || *cp == '=')
cp++;
+ /* Remove "self." from the method name. */
+ if (cp - name > self_size1
+ && strneq (name, self_name, self_size1))
+ name += self_size1;
+
+ /* Remove the class/module qualifiers from method names. */
+ if (is_method)
+ {
+ char *q;
+
+ for (q = name; q < cp && *q != '.'; q++)
+ ;
+ if (q < cp - 1) /* punt if we see just "FOO." */
+ name = q + 1;
+ }
+
+ /* Don't tag singleton classes. */
+ if (is_class && strneq (name, "<<", 2) && cp == name + 2)
+ continue;
+
make_tag (name, cp - name, true,
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
}
A cp-src/fail.C 7
A cp-src/fail.C 23
A ruby-src/test1.ruby /^class A$/
+A ruby-src/test1.ruby /^module A$/
+ABC ruby-src/test1.ruby 11
ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/
ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378
ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/
B cp-src/c.C 122
B cp-src/fail.C 8
B cp-src/fail.C 24
+B ruby-src/test1.ruby /^ class B$/
BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/
BE_Node cp-src/c.C 77
BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125
Cjava_help c-src/etags.c 551
Cjava_suffixes c-src/etags.c 549
ClassExample ruby-src/test.rb /^ class ClassExample$/
-ClassExample.class_method ruby-src/test.rb /^ def ClassExample.class_method$/
Clear/p ada-src/2ataspri.adb /^ procedure Clear (Cell : in out TAS_Cell) is$/
Clear/p ada-src/2ataspri.ads /^ procedure Clear (Cell : in out TAS_Cell)/
Cobol_help c-src/etags.c 558
Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is$/
Configure pyt-src/server.py /^class Configure(Frame, ControlEdit):$/
ConfirmQuit pyt-src/server.py /^def ConfirmQuit(frame, context):$/
+Constant ruby-src/test1.ruby 26
ControlEdit pyt-src/server.py /^class ControlEdit(Frame):$/
Controls pyt-src/server.py /^class Controls:$/
CopyTextString pas-src/common.pas /^function CopyTextString;(*($/
Mfail cp-src/fail.C /^main()$/
Mkai-test.pl perl-src/kai-test.pl /^package main;$/
ModuleExample ruby-src/test.rb /^module ModuleExample$/
-ModuleExample.module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/
More_Lisp_Bits c-src/emacs/src/lisp.h 801
MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/
MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/
__up c.c 160
_aligned_blocks c-src/emacs/src/gmalloc.c 1004
_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 518
+_bar? ruby-src/test1.ruby /^ def self._bar?(abc)$/
_bytes_free c-src/emacs/src/gmalloc.c 376
_bytes_used c-src/emacs/src/gmalloc.c 374
_chunks_free c-src/emacs/src/gmalloc.c 375
chunks_free c-src/emacs/src/gmalloc.c 313
chunks_used c-src/emacs/src/gmalloc.c 311
cjava c-src/etags.c 2936
+class_method ruby-src/test.rb /^ def ClassExample.class_method$/
classifyLine php-src/lce_functions.php /^ function classifyLine($line)$/
clear cp-src/conway.hpp /^ void clear(void) { alive = 0; }$/
clear-abbrev-table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
foo f-src/entry.strange_suffix /^ character*(*) function foo()$/
foo f-src/entry.strange /^ character*(*) function foo()$/
foo php-src/ptest.php /^foo()$/
+foo! ruby-src/test1.ruby /^ def foo!$/
foobar c-src/c.c /^int foobar() {;}$/
foobar c.c /^extern void foobar (void) __attribute__ ((section /
foobar2 c-src/h.h 20
modifier_names c-src/emacs/src/keyboard.c 6319
modifier_symbols c-src/emacs/src/keyboard.c 6327
modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/
+module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/
module_instance_method ruby-src/test.rb /^ def module_instance_method$/
more_aligned_int c.c 165
morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/
questo ../c/c.web 34
quit_char c-src/emacs/src/keyboard.c 192
quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/
+qux= ruby-src/test1.ruby /^ def qux=(tee)$/
r0 c-src/sysdep.h 54
r1 c-src/sysdep.h 55
r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def save(\7f797,26022
def nosave(\7f807,26310
\f
-ruby-src/test.rb,604
+ruby-src/test.rb,637
module ModuleExample\7f1,0
class ClassExample\7f2,21
def instance_method\7f3,44
- def ClassExample.class_method\7f6,121
+ def ClassExample.class_method\7fclass_method\ 16,121
def instance_method_exclamation!\7f9,206
def instance_method_question?\7f12,310
def instance_method_equals=\7finstance_method_equals=\ 115,408
def <=>(\7f<=>\ 139,943
def ===(\7f===\ 142,990
def module_instance_method\7f46,1051
- def ModuleExample.module_class_method\7f49,1131
+ def ModuleExample.module_class_method\7fmodule_class_method\ 149,1131
\f
-ruby-src/test1.ruby,37
+ruby-src/test1.ruby,191
class A\7f1,0
def a(\7f2,8
def b(\7f5,38
+module A\7f9,57
+ class B\7f10,66
+ ABC \7f11,76
+ def foo!\7f13,89
+ def self._bar?(\7f_bar?\ 116,111
+ def qux=(\7fqux=\ 120,162
+A::Constant \7fConstant\ 126,211
\f
tex-src/testenv.tex,52
\newcommand{\nm}\7f\nm\ 14,77
def b()
end
end
+
+module A
+ class B
+ ABC = 4
+
+ def foo!
+ end
+
+ def self._bar?(abc)
+ end
+
+ class << self
+ def qux=(tee)
+ end
+ end
+ end
+end
+
+A::Constant = 5
+
+# def foo_in_comment
+# end