Subject: bug#22116: closed (Re: bug#22116: [PATCH] * etags.c: Add support for Ruby language.)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 26 Dec 2015 04:37:02 +0000

Your bug report

#22116: [PATCH] * etags.c: Add support for Ruby language.

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
22116: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22116
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#22116: [PATCH] * etags.c: Add support for Ruby language.
From: Dmitry Gutov <[email-masked]>
To: lu4nx <[email-masked]>, Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Sat, 26 Dec 2015 06:36:02 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

On 12/08/2015 07:43 PM, lu4nx wrote:
> yes,it has nothing to do with Ruby, thanks ;-)

Since this has been applied, closing.

Thanks again.

Subject: [PATCH] * etags.c: Add support for Ruby language.
From: lu4nx <[email-masked]>
To: [email-masked]
Cc: lu4nx <[email-masked]>
Date: Tue, 8 Dec 2015 18:56:04 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

---
 lib-src/etags.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/lib-src/etags.c b/lib-src/etags.c
index 8b980d3..7c8c503 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -364,6 +364,7 @@ static void PHP_functions (FILE *);
 static void PS_functions (FILE *);
 static void Prolog_functions (FILE *);
 static void Python_functions (FILE *);
+static void Ruby_functions (FILE *);
 static void Scheme_functions (FILE *);
 static void TeX_commands (FILE *);
 static void Texinfo_nodes (FILE *);
@@ -722,6 +723,12 @@ static const char Python_help [] =
 "In Python code, 'def' or 'class' at the beginning of a line\n\
 generate a tag.";
 
+static const char *Ruby_suffixes [] =
+  { "rb", NULL };
+static const char Ruby_help [] =
+  "In Ruby code, 'def' or 'class' at the beginning of a line\n\
+generate a tag.";
+
 /* Can't do the `SCM' or `scm' prefix with a version number. */
 static const char *Scheme_suffixes [] =
   { "oak", "sch", "scheme", "SCM", "scm", "SM", "sm", "ss", "t", NULL };
@@ -800,6 +807,7 @@ static language lang_names [] =
   { "proc",      no_lang_help,   plain_C_entries,   plain_C_suffixes   },
   { "prolog",    Prolog_help,    Prolog_functions,  Prolog_suffixes    },
   { "python",    Python_help,    Python_functions,  Python_suffixes    },
+  { "ruby",      Ruby_help,      Ruby_functions,    Ruby_suffixes      },
   { "scheme",    Scheme_help,    Scheme_functions,  Scheme_suffixes    },
   { "tex",       TeX_help,       TeX_commands,      TeX_suffixes       },
   { "texinfo",   Texinfo_help,   Texinfo_nodes,     Texinfo_suffixes   },
@@ -4532,6 +4540,31 @@ Python_functions (FILE *inf)
     }
 }
 
+/*
+ * Ruby support
+ * Idea by Xi Lu <[email-masked]> (2015)
+ */
+static void
+Ruby_functions (FILE *inf)
+{
+  char *cp = NULL;
+
+  LOOP_ON_INPUT_LINES (inf, lb, cp)
+    {
+      cp = skip_spaces (cp);
+      if (LOOKING_AT (cp, "def") || LOOKING_AT (cp, "class"))
+	{
+	  char *name = cp;
+
+	  while (!notinname (*cp))
+	    cp++;
+
+	  make_tag(name, cp -name, true,
+		   lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+	}
+    }
+}
+
 
 /*
  * PHP support
@@ -4954,7 +4987,22 @@ Lua_functions (FILE *inf)
       (void)LOOKING_AT (bp, "local"); /* skip possible "local" */
 
       if (LOOKING_AT (bp, "function"))
-	get_tag (bp, NULL);
+	{
+	  char *tag_name, *tp_dot, *tp_colon;
+
+	  get_tag (bp, &tag_name);
+	  /* If the tag ends with ".foo" or ":foo", make an additional tag for
+	     "foo".  */
+	  tp_dot = strrchr (tag_name, '.');
+	  tp_colon = strrchr (tag_name, ':');
+	  if (tp_dot || tp_colon)
+	    {
+	      char *p = tp_dot > tp_colon ? tp_dot : tp_colon;
+	      int len_add = p - tag_name + 1;
+
+	      get_tag (bp + len_add, NULL);
+	    }
+	}
     }
 }
 
-- 
2.5.0