emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-25 58bfb6a: More improvements for Ruby support in 'e


From: Eli Zaretskii
Subject: [Emacs-diffs] emacs-25 58bfb6a: More improvements for Ruby support in 'etags'
Date: Tue, 02 Feb 2016 17:18:15 +0000

branch: emacs-25
commit 58bfb6a4f597b98f01169f42410df3184c451408
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    More improvements for Ruby support in 'etags'
    
    * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and
    alias_method.  Identify constants even if the assignment is not
    followed by whitespace.  (Bug#22241)
    
    * test/etags/ruby-src/test1.ruby: Add tests for constants,
    accessors, and alias_method.
    * test/etags/ETAGS.good_1:
    * test/etags/ETAGS.good_2:
    * test/etags/ETAGS.good_3:
    * test/etags/ETAGS.good_4:
    * test/etags/ETAGS.good_5:
    * test/etags/ETAGS.good_6:
    * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
---
 lib-src/etags.c                |   58 ++++++++++++++++++++++++++++++++++++++-
 test/etags/CTAGS.good          |   14 +++++++++-
 test/etags/ETAGS.good_1        |   22 +++++++++++---
 test/etags/ETAGS.good_2        |   22 +++++++++++---
 test/etags/ETAGS.good_3        |   22 +++++++++++---
 test/etags/ETAGS.good_4        |   22 +++++++++++---
 test/etags/ETAGS.good_5        |   22 +++++++++++---
 test/etags/ETAGS.good_6        |   22 +++++++++++---
 test/etags/ruby-src/test1.ruby |    9 ++++++
 9 files changed, 180 insertions(+), 33 deletions(-)

diff --git a/lib-src/etags.c b/lib-src/etags.c
index bdfced5..769a220 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -4642,7 +4642,7 @@ Ruby_functions (FILE *inf)
          if (cp > name + 1)
            {
              bp = skip_spaces (cp);
-             if (*bp == '=' && c_isspace (bp[1]))
+             if (*bp == '=' && !(bp[1] == '=' || bp[1] == '>'))
                {
                  if (colon && !c_isspace (colon[1]))
                    name = colon + 1;
@@ -4656,7 +4656,7 @@ Ruby_functions (FILE *inf)
               || LOOKING_AT (cp, "module"))
        {
          const char self_name[] = "self.";
-         const size_t self_size1 = sizeof ("self.") - 1;
+         const size_t self_size1 = sizeof (self_name) - 1;
 
          name = cp;
 
@@ -4688,6 +4688,60 @@ Ruby_functions (FILE *inf)
          make_tag (name, cp - name, true,
                    lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
        }
+      else
+       {
+         /* Tag accessors and aliases.  */
+         while (*cp && *cp != '#')
+           {
+             bool reader = false, writer = false, alias = false;
+
+             if (LOOKING_AT (cp, "attr_reader"))
+               reader = true;
+             else if (LOOKING_AT (cp, "attr_writer"))
+               writer = true;
+             else if (LOOKING_AT (cp, "attr_accessor"))
+               {
+                 reader = true;
+                 writer = true;
+               }
+             else if (LOOKING_AT (cp, "alias_method"))
+               alias = true;
+             if (reader || writer || alias)
+               {
+                 do {
+                   char *np = cp;
+
+                   cp = skip_name (cp);
+                   if (reader)
+                     make_tag (np, cp - np, true,
+                               lb.buffer, cp - lb.buffer + 1,
+                               lineno, linecharno);
+                   if (writer)
+                     {
+                       size_t name_len = cp - np + 1;
+                       char *wr_name = xnew (name_len + 1, char);
+
+                       memcpy (wr_name, np, name_len - 1);
+                       memcpy (wr_name + name_len - 1, "=", 2);
+                       pfnote (wr_name, true, lb.buffer, cp - lb.buffer + 1,
+                               lineno, linecharno);
+                     }
+                   if (alias)
+                     {
+                       make_tag (np, cp - np, true,
+                                 lb.buffer, cp - lb.buffer + 1,
+                                 lineno, linecharno);
+                       while (*cp && *cp != '#' && *cp != ';')
+                         cp++;
+                     }
+                 } while (*cp == ','
+                          && (cp = skip_spaces (cp + 1), *cp && *cp != '#'));
+               }
+             cp = skip_name (cp);
+             while (*cp && *cp != '#' && notinname (*cp))
+               cp++;
+           }
+       }
     }
 }
 
diff --git a/test/etags/CTAGS.good b/test/etags/CTAGS.good
index 846725e..c4962a7 100644
--- a/test/etags/CTAGS.good
+++ b/test/etags/CTAGS.good
@@ -177,6 +177,15 @@ $user_comment_lc   php-src/lce_functions.php       115
 /wh    ps-src/rfc1245.ps       /^\/wh { $/
 /yen   ps-src/rfc1245.ps       /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef 
\/.notdef /
 :a-forth-dictionary-entry      forth-src/test-forth.fth        /^create 
:a-forth-dictionary-entry$/
+:bar=  ruby-src/test1.ruby     /^      attr_writer :bar$/
+:foo   ruby-src/test1.ruby     /^      attr_reader :foo$/
+:qux   ruby-src/test1.ruby     /^      alias_method :qux, :tee$/
+:read1 ruby-src/test1.ruby     /^      attr_reader :read1, :read2; attr_writer 
:wri/
+:read2 ruby-src/test1.ruby     /^      attr_reader :read1, :read2; attr_writer 
:wri/
+:tee   ruby-src/test1.ruby     /^      attr_accessor :tee$/
+:tee=  ruby-src/test1.ruby     /^      attr_accessor :tee$/
+:write1=       ruby-src/test1.ruby     /^      attr_reader :read1, :read2; 
attr_writer :wri/
+:write2=       ruby-src/test1.ruby     /^      attr_reader :read1, :read2; 
attr_writer :wri/
 <      tex-src/texinfo.tex     /^\\def<{{\\tt \\less}}$/
 <<     ruby-src/test.rb        /^        def <<(y)$/
 <=     ruby-src/test.rb        /^        def <=(y)$/
@@ -460,7 +469,7 @@ Condition_Variable/t        ada-src/2ataspri.ads    /^   
type Condition_Variable is privat
 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
+Constant       ruby-src/test1.ruby     35
 ControlEdit    pyt-src/server.py       /^class ControlEdit(Frame):$/
 Controls       pyt-src/server.py       /^class Controls:$/
 CopyTextString pas-src/common.pas      /^function CopyTextString;(*($/
@@ -522,6 +531,7 @@ DOS_NT      c-src/etags.c   117
 DOS_NT c-src/etags.c   118
 DUMPED c-src/emacs/src/gmalloc.c       80
 Debug  cp-src/functions.cpp    /^void Debug ( int lineno, int level, char* 
func , c/
+Def_   ruby-src/test1.ruby     12
 DisposeANameList       pas-src/common.pas      /^procedure DisposeANameList( $/
 DisposeNameList        pas-src/common.pas      /^procedure DisposeNameList;$/
 ELEM_I c-src/h.h       3
@@ -1457,6 +1467,7 @@ WorkingDays       cp-src/functions.cpp    /^int 
WorkingDays(Date a, Date b){$/
 Write_Lock/p   ada-src/2ataspri.adb    /^   procedure Write_Lock (L : in out 
Lock; Ceiling_/
 Write_Lock/p   ada-src/2ataspri.ads    /^   procedure Write_Lock (L : in out 
Lock; Ceiling_/
 X      c-src/h.h       100
+X      ruby-src/test1.ruby     /^    def X$/
 XBOOL_VECTOR   c-src/emacs/src/lisp.h  /^XBOOL_VECTOR (Lisp_Object a)$/
 XBUFFER        c-src/emacs/src/lisp.h  /^XBUFFER (Lisp_Object a)$/
 XBUFFER_OBJFWD c-src/emacs/src/lisp.h  /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/
@@ -1534,6 +1545,7 @@ XUNTAG    c-src/emacs/src/lisp.h  /^#  define XUNTAG(a, 
type) lisp_h_XUNTAG (a, type
 XUNTAG c-src/emacs/src/lisp.h  /^XUNTAG (Lisp_Object a, int type)$/
 XWINDOW        c-src/emacs/src/lisp.h  /^XWINDOW (Lisp_Object a)$/
 XX     cp-src/x.cc     1
+Xyzzy  ruby-src/test1.ruby     13
 Y      c-src/h.h       100
 YACC   c-src/etags.c   2199
 YELLOW cp-src/screen.hpp       26
diff --git a/test/etags/ETAGS.good_1 b/test/etags/ETAGS.good_1
index c7b1221..435cd08 100644
--- a/test/etags/ETAGS.good_1
+++ b/test/etags/ETAGS.good_1
@@ -3009,17 +3009,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ETAGS.good_2 b/test/etags/ETAGS.good_2
index 8d0f338..4abdc90 100644
--- a/test/etags/ETAGS.good_2
+++ b/test/etags/ETAGS.good_2
@@ -3580,17 +3580,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ETAGS.good_3 b/test/etags/ETAGS.good_3
index 060389c..94815ca 100644
--- a/test/etags/ETAGS.good_3
+++ b/test/etags/ETAGS.good_3
@@ -3356,17 +3356,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ETAGS.good_4 b/test/etags/ETAGS.good_4
index 40404f9..f71e1b0 100644
--- a/test/etags/ETAGS.good_4
+++ b/test/etags/ETAGS.good_4
@@ -3173,17 +3173,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ETAGS.good_5 b/test/etags/ETAGS.good_5
index 432819d..d51542c 100644
--- a/test/etags/ETAGS.good_5
+++ b/test/etags/ETAGS.good_5
@@ -4091,17 +4091,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ETAGS.good_6 b/test/etags/ETAGS.good_6
index 4ad5d76..84b7319 100644
--- a/test/etags/ETAGS.good_6
+++ b/test/etags/ETAGS.good_6
@@ -4091,17 +4091,29 @@ module ModuleExample1,0
     def module_instance_method46,1051
     def ModuleExample.module_class_methodmodule_class_method49,1131
 
-ruby-src/test1.ruby,191
+ruby-src/test1.ruby,635
 class A1,0
  def a(2,8
  def b(5,38
 module A9,57
   class B10,66
     ABC 11,76
-    def foo!13,89
-    def self._bar?(_bar?16,111
-      def qux=(qux=20,162
-A::Constant Constant26,211
+    Def_ 12,88
+    Xyzzy 13,106
+    def foo!15,121
+    def self._bar?(_bar?18,143
+      def qux=(qux=22,194
+    def X25,232
+      attr_reader :foo26,242
+      attr_reader :read1,27,265
+      attr_reader :read1, :read2;27,265
+      attr_reader :read1, :read2; attr_writer :write1,:write1=27,265
+      attr_reader :read1, :read2; attr_writer :write1, :write2:write2=27,265
+      attr_writer :bar:bar=28,328
+      attr_accessor :tee29,351
+      attr_accessor :tee:tee=29,351
+      alias_method :qux,30,376
+A::Constant Constant35,425
 
 tex-src/testenv.tex,52
 \newcommand{\nm}\nm4,77
diff --git a/test/etags/ruby-src/test1.ruby b/test/etags/ruby-src/test1.ruby
index 26b7d53..75dcd51 100644
--- a/test/etags/ruby-src/test1.ruby
+++ b/test/etags/ruby-src/test1.ruby
@@ -9,6 +9,8 @@ end
 module A
   class B
     ABC = 4
+    Def_ = 'blah'
+    Xyzzy =10
 
     def foo!
     end
@@ -20,6 +22,13 @@ module A
       def qux=(tee)
       end
     end
+    def X
+      attr_reader :foo
+      attr_reader :read1, :read2; attr_writer :write1, :write2
+      attr_writer :bar
+      attr_accessor :tee
+      alias_method :qux, :tee
+    end
   end
 end
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]