Add support for Rust in etags
* lib-src/etags.c (Rust_functions): New function to make tags for rust files. (Rust_help, Rust_suffixes): New constant. * doc/emacs/maintaining.texi (Tag Syntax): Add Rust item. * doc/man/etags.1: Add Rust (bug#46055).
This commit is contained in:
parent
eb75826207
commit
ec870f8986
3 changed files with 56 additions and 1 deletions
|
@ -2657,6 +2657,10 @@ generate a tag.
|
|||
@item
|
||||
In Ruby code, @code{def} or @code{class} or @code{module} at the
|
||||
beginning of a line generate a tag. Constants also generate tags.
|
||||
|
||||
@item
|
||||
In Rust code, tags anything defined with @code{fn}, @code{enum},
|
||||
@code{struct} or @code{macro_rules!}.
|
||||
@end itemize
|
||||
|
||||
You can also generate tags based on regexp matching (@pxref{Etags
|
||||
|
|
|
@ -51,7 +51,7 @@ format understood by
|
|||
\&. Both forms of the program understand
|
||||
the syntax of C, Objective C, C++, Java, Fortran, Ada, Cobol, Erlang,
|
||||
Forth, Go, HTML, LaTeX, Emacs Lisp/Common Lisp, Lua, Makefile, Pascal, Perl,
|
||||
Ruby, PHP, PostScript, Python, Prolog, Scheme and
|
||||
Ruby, Rust, PHP, PostScript, Python, Prolog, Scheme and
|
||||
most assembler\-like syntaxes.
|
||||
Both forms read the files specified on the command line, and write a tag
|
||||
table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for
|
||||
|
|
|
@ -366,6 +366,7 @@ static void PS_functions (FILE *);
|
|||
static void Prolog_functions (FILE *);
|
||||
static void Python_functions (FILE *);
|
||||
static void Ruby_functions (FILE *);
|
||||
static void Rust_entries (FILE *);
|
||||
static void Scheme_functions (FILE *);
|
||||
static void TeX_commands (FILE *);
|
||||
static void Texinfo_nodes (FILE *);
|
||||
|
@ -752,6 +753,12 @@ a line generate a tag. Constants also generate a tag.";
|
|||
static const char *Ruby_interpreters [] =
|
||||
{ "ruby", NULL };
|
||||
|
||||
static const char *Rust_suffixes [] =
|
||||
{ "rs", NULL };
|
||||
static const char Rust_help [] =
|
||||
"In Rust code, tags anything defined with 'fn', 'enum', \n\
|
||||
'struct' or 'macro_rules!'.";
|
||||
|
||||
/* 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 };
|
||||
|
@ -836,6 +843,7 @@ static language lang_names [] =
|
|||
NULL, Python_interpreters },
|
||||
{ "ruby", Ruby_help, Ruby_functions, Ruby_suffixes,
|
||||
Ruby_filenames, Ruby_interpreters },
|
||||
{ "rust", Rust_help, Rust_entries, Rust_suffixes },
|
||||
{ "scheme", Scheme_help, Scheme_functions, Scheme_suffixes },
|
||||
{ "tex", TeX_help, TeX_commands, TeX_suffixes },
|
||||
{ "texinfo", Texinfo_help, Texinfo_nodes, Texinfo_suffixes },
|
||||
|
@ -5019,6 +5027,49 @@ Ruby_functions (FILE *inf)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Rust support
|
||||
* Look for:
|
||||
* - fn: Function
|
||||
* - struct: Structure
|
||||
* - enum: Enumeration
|
||||
* - macro_rules!: Macro
|
||||
*/
|
||||
static void
|
||||
Rust_entries (FILE *inf)
|
||||
{
|
||||
char *cp, *name;
|
||||
bool is_func = false;
|
||||
|
||||
LOOP_ON_INPUT_LINES(inf, lb, cp)
|
||||
{
|
||||
cp = skip_spaces(cp);
|
||||
name = cp;
|
||||
|
||||
// Skip 'pub' keyworld
|
||||
(void)LOOKING_AT (cp, "pub");
|
||||
|
||||
// Look for define
|
||||
if ((is_func = LOOKING_AT (cp, "fn"))
|
||||
|| LOOKING_AT (cp, "enum")
|
||||
|| LOOKING_AT (cp, "struct")
|
||||
|| (is_func = LOOKING_AT (cp, "macro_rules!")))
|
||||
{
|
||||
cp = skip_spaces (cp);
|
||||
name = cp;
|
||||
|
||||
while (!notinname (*cp))
|
||||
cp++;
|
||||
|
||||
make_tag (name, cp - name, is_func,
|
||||
lb.buffer, cp - lb.buffer + 1,
|
||||
lineno, linecharno);
|
||||
is_func = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* PHP support
|
||||
|
|
Loading…
Add table
Reference in a new issue