help-global
[Top][All Lists]
Advanced

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

Re: get full prototype of a function


From: Shigio YAMAGUCHI
Subject: Re: get full prototype of a function
Date: Thu, 18 Feb 2016 13:22:42 +0900

Hi,
Though it cannot said an easy way, you can do it using the ctags plug-in parser.
You need to modify both Exuberant Ctags and the ctags plug-in parser like follows:

1. Exuberant Ctags (version 5.8): writeXrefEntry() in entry.c

[BEFORE]
    length += writeCompactSourceLine (TagFile.fp, line);

[AFTER]
    if (Option.extensionFields.signature && tag->extensionFields.signature != NULL)
        length += fprintf (TagFile.fp, "signature:%s", tag->extensionFields.signature);
    else
        length += writeCompactSourceLine (TagFile.fp, line);

2. Ctags plug-in parser (GLOBAL_6.5.2): plugin-factory/exuberant-c

[BEFORE]
#if defined(USE_EXTRA_FIELDS)
        "--_xformat=%R %-16N %4n %-16F %C",
        "--extra=+r",
#else
        "--format=1",
#endif

[AFTER]
#if defined(USE_EXTRA_FIELDS)
        "--_xformat=%R %-16N %4n %-16F %C",
        "--extra=+r",
        "--fields=+rS",
#else
        "--format=1",
        "--fields=+S",
#endif

3. The result

$ global -x main
main                2 main.c           signature:( int argc, char *argv[] )

Regards,
Shigio


2016-02-18 7:45 GMT+09:00 john smith <address@hidden>:
Is this possible to get a full prototype of a given function in a
standardized, easily parsable form?  The point is I need to get a
number of parameters for a number of functions as I am writing a
custom REPL-like tool that will call functions from an external API.
I need to know how many parameters every function takes in order to
inform user that he gave too few parameters. What I do now is this:

$ gtags -v -f LIST
$ global -f diff.h
foo                 5 diff.h           foo(

But it doesn't show any arguments that foo() takes.  It's written like
this in a source file:

void
foo(
int a,
         int b, int c, char
*f)
{
}

It's possible to do this in ctags:

$ ctags  --fields=+S diff.h
$ less tags
(...)
foo     diff.h  /^foo($/;"      f       signature:( int a, int b, int
c, char *f)

Now I can easily parse `signature:part' and get a number of
parameters.  I could use ctags but I got used to global, is this
possible here?

--
<address@hidden>

_______________________________________________
Help-global mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/help-global



--
Shigio YAMAGUCHI <address@hidden>
PGP fingerprint: D1CB 0B89 B346 4AB6 5663  C4B6 3CA5 BBB3 57BE DDA3

reply via email to

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