DDoc and private members / mixins / UDAs

Stefan Frijters via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 26 01:49:30 PDT 2014


On Thursday, 26 June 2014 at 02:33:43 UTC, Mathias LANG wrote:
> On Wednesday, 25 June 2014 at 18:49:27 UTC, Stefan Frijters 
> wrote:
>> Let me preface this by admitting that I'm not sure I'm using 
>> the DDoc functionality properly at all, so let me know if my 
>> questions are bogus.
>>
>> Is it possible to:
>> - Add private members to documentation?
>> - Have DDoc do its thing after mixins have been handled?
>> - Access UDAs?
>>
>> To expand on the last point: in my code I currently use UDAs 
>> to annotate variables that can be set in an input file; at 
>> compile time I use __traits to find all of them and create a 
>> parser etc. for them. I would really like to be able to create 
>> a minimal documentation, which only includes all such 
>> UDA-annotated variables from all modules, so it can be used as 
>> a short manual for the end user, rather than being developer 
>> documentation. I was thinking of using a LaTeX template and 
>> using the absence or presence of the UDA to somehow insert a 
>> macro that is either just blank or actually adds the 
>> documentation.
>>
>> Any tips to achieve this in a different fashion are also 
>> appreciated.
>>
>> Kind regards,
>>
>> Stefan Frijters
>
> 1) You might be interested by ddox [1] which provides more 
> functionality and a nicer output than DDoc (actually, the 
> phobos docs are being replacd by it).
> As you can see in the example, you can filter what goes in and 
> what doesn't, as well as the minimum protection level (so you 
> can chose to put private in it).
> Note that if you have a dub-based project, you can just run 
> "dub --build=ddox" to get it working.
>
> 2) Yes for regular mixin, no for template mixins. Example:
> mixin strToSym!(moduleName!moduleName); // Template mixin
> mixin("int a = 42;");                   // regular mixin
>
> Will output (using dmd -Xfdocs.json module.d):
>    {
>     "name" : "strToSym!(\"std.traits\")",
>     "kind" : "mixin",
>     "line" : 62
>    },
>    {
>     "name" : "a",
>     "kind" : "variable",
>     "protection" : "private",
>     "file" : "CppWrapper.d-mixin-63",
>     "line" : 63,
>     "deco" : "i",
>     "init" : "42"
>    },
>
>
> 3) Nope. Again, example:
> @("ThisIsAFunction")
> void foo() {}
>
> Ouputs in the docs.json:
>    {
>     "name" : "foo",
>     "kind" : "function",
>     "protection" : "private",
>     "file" : "CppWrapper.d",
>     "line" : 66,
>     "deco" : "FZv",
>     "endline" : 66
>    },
>
>
> Hope this helps !
>
> [1]: https://github.com/rejectedsoftware/ddox

Thank you! Some comments:

1) I will check it out. It looks like it may be a bit too 
HTML-centric for my taste though.

2) Here, I meant if there is a way to have the comment included 
as well. It doesn't seem like this is the case (if there are no 
hidden switches I don't know about):

/// Comment
int a;
/// Ditto
mixin("int b;");
mixin("///Ditto\nint c;");

{
   "kind" : "module",
   "file" : "testdoc2.d",
   "members" : [
    {
     "name" : "a",
     "kind" : "variable",
     "comment" : "Comment\n",
     "line" : 2,
     "char" : 5,
     "deco" : "i"
    },
    {
     "name" : "b",
     "kind" : "variable",
     "file" : "testdoc2.d-mixin-4",
     "line" : 4,
     "char" : 5,
     "deco" : "i"
    },
    {
     "name" : "c",
     "kind" : "variable",
     "file" : "testdoc2.d-mixin-5",
     "line" : 6,
     "char" : 5,
     "deco" : "i"
    }
   ]
  },

3) That's a shame. I guess I can work around it by doing a dirty 
grep beforehand and using that information to filter the json...

Related question: I found a pull request to add 
__traits(documentation, ...)[1] which would also allow me to 
solve my problem as a workaround, does anyone know if this is 
still moving forward?

[1]: https://github.com/D-Programming-Language/dmd/pull/3531


More information about the Digitalmars-d-learn mailing list