[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: get full prototype of a function
From: |
john smith |
Subject: |
Re: get full prototype of a function |
Date: |
Thu, 18 Feb 2016 20:27:52 +0100 |
Hm... quite complex but better than nothing. Thx.
On Thu, Feb 18, 2016 at 5:22 AM, Shigio YAMAGUCHI <address@hidden> wrote:
> 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
--
<address@hidden>