Source File Tag Syntax
Here is how tag syntax is defined for the most popular languages:
- In C code, any C function or typedef is a tag, and so are definitions of
struct, union and enum.
#define macro definitions and enum constants are also
tags, unless you specify --no-defines when making the tags table.
Similarly, global variables are tags, unless you specify
--no-globals. Use of --no-globals and --no-defines
can make the tags table file much smaller.
You can tag function declarations and external variables in addition
to function definitions by giving the --declarations option to
etags.
- In C++ code, in addition to all the tag constructs of C code, member
functions are also recognized, and optionally member variables if you
use the
--members option. Tags for variables and functions in
classes are named class::variable and class::function. operator definitions have
tag names like operator+.
- In Java code, tags include all the constructs recognized in C++, plus
the
interface, extends and implements constructs.
Tags for variables and functions in classes are named class.variable and class.function.
- In LaTeX text, the argument of any of the commands
\chapter,
\section, \subsection, \subsubsection,
\eqno, \label, \ref, \cite, \bibitem,
\part, \appendix, \entry, or \index, is a
tag.
Other commands can make tags as well, if you specify them in the
environment variable TEXTAGS before invoking etags. The
value of this environment variable should be a colon-separated list of
command names. For example,
TEXTAGS="def:newcommand:newenvironment"
export TEXTAGS
specifies (using Bourne shell syntax) that the commands \def,
\newcommand and \newenvironment also define tags.
- In Lisp code, any function defined with
defun, any variable
defined with defvar or defconst, and in general the first
argument of any expression that starts with (def in column zero, is
a tag.
- In Scheme code, tags include anything defined with
def or with a
construct whose name starts with def. They also include variables
set with set! at top level in the file.
Several other languages are also supported:
- In Ada code, functions, procedures, packages, tasks, and types are
tags. Use the
--packages-only option to create tags for
packages only.
In Ada, the same name can be used for different kinds of entity
(e.g., for a procedure and for a function). Also, for things like
packages, procedures and functions, there is the spec (i.e. the
interface) and the body (i.e. the implementation). To make it
easier to pick the definition you want, Ada tag name have suffixes
indicating the type of entity:
/b
- package body.
/f
- function.
/k
- task.
/p
- procedure.
/s
- package spec.
/t
- type.
Thus, M-x find-tag <RET> bidule/b <RET> will go
directly to the body of the package bidule, while M-x
find-tag <RET> bidule <RET> will just search for any tag
bidule.
- In assembler code, labels appearing at the beginning of a line,
followed by a colon, are tags.
- In Bison or Yacc input files, each rule defines as a tag the nonterminal
it constructs. The portions of the file that contain C code are parsed
as C code.
- In Cobol code, tags are paragraph names; that is, any word starting in
column 8 and followed by a period.
- In Erlang code, the tags are the functions, records, and macros defined
in the file.
- In Fortran code, functions, subroutines and block data are tags.
- In makefiles, targets are tags.
- In Objective C code, tags include Objective C definitions for classes,
class categories, methods, and protocols.
- In Pascal code, the tags are the functions and procedures defined in
the file.
- In Perl code, the tags are the procedures defined by the
sub,
my and local keywords. Use --globals if you want
to tag global variables.
- In PostScript code, the tags are the functions.
- In Prolog code, a tag name appears at the left margin.
- In Python code,
def or class at the beginning of a line
generate a tag.
You can also generate tags based on regexp matching (see Etags Regexps) to handle other formats and languages.
|