[m-users.] Etags support for Mercury was merged in Emacs source code.
fabrnicol at gmail.com
Mon Jun 7 00:17:52 AEST 2021
I'm glad to announce that the 'etags' capability of Emacs now supports
Mercury (in current repository source code:
Etags support has been made available at commit 5a8a5a990ae today.
After much debating and arguing with the emacs core teams, I had to give
up on my initially suggested Mercury-specific options (-m/-M) to enable
or disable Prolog-style "definitions as declarations" support (see this
However, existing 'etags' options have been granted Mercury-specific
meaning to achieve the same goals. The Emacs core team wanted no
language-specific option as a design choice.
By default, all Mercury declarations will be tagged, as Zoltan
requested. In addition, if the option "--declarations" is added to
command line, then predicates or functions appearing first in clauses
will also be tagged, thereby facilitating Prolog code porting. (I find
this extra tagging useful for standard Mercury development too, at least
in some circumstances).
An unexpected issue arose from the fact that Objective-C has the same
file extension .m as Mercury. I had to add a somewhat ad-hoc heuristic
test to automatically disambiguate etags processing. It should work, but
in the (unexpected) event of a failure, please use option
The updated etags man page shipped with Emacs explains these amendments
to existing etags options as follows:
In C and derived languages, create tags for function
declarations, and create tags for extern variables unless --no-globals
is used. In Lisp, create tags for (defvar foo) declarations. In
Mercury, declarations start a line with ":-" and are tagged by default.
This option also tags predicates or functions in first rules of clauses,
as in Prolog.
-l language, --language=language
Parse the following files according to the given
language. More than one such options may be intermixed with filenames.
Use --help to get a list of the available languages and their default
filename extensions. For example, as Mercury and Objective-C have
same filename extension .m, a test based on contents tries to detect the
language. If this test fails, --language=mercury or --language=objc
should be used."
Emacs etags support does not (yet) tag:
- type constructors (with arity > 0)
- foreign pragma definitions (but this would be of limited use).
More information about the users