Hi, Jeff King wrote: > On Wed, Sep 26, 2018 at 10:44:33PM +0200, Ævar Arnfjörð Bjarmason wrote: >> In terms of getting an overview it's indistinguishable from >> comments. I.e. there's nothing like an index of: >> >> man git-api-strbuf ==> working with strings >> man git-api-sha1-array ==> list, iterate and binary lookup SHA1s > > I agree that is a problem, especially for contributors less familiar > with the code base. But I think generating an index is a separate (and > much easier) problem than formatting all of the documentation. > > We already have the /** convention I mentioned above. Could we have > another micro-format like: > > /** API:strbuf - working with strings */ > > in each header file? That would make generating such an index pretty > trivial. Can you spell out the problem for me a little more? E.g. if we had a convention that the first comment in strbuf.h should say /* strbuf - Git's standard string type */ or even just /* Git's standard string type */ would that do the trick? >> I'm also not in the habit of opening the *.h file for something, I >> usually just start reading the *.c and only later discover there's some >> API docs in the relevant *.h (or not). > > Interesting. I'm not totally opposed to putting the documentation > alongside the actual code. It does feel a bit cluttered to me, but I > think you're right that it keeps everything as close together as > possible. I've experienced projects following both conventions. One thing I like a lot about documentation in the header file is that it encourages people to make the API documentation self-contained. That is, you describe the contract in a way that doesn't require reading the implementation for details. It took me a while to get used to this kind of convention but now I really like it. So I really do prefer to keep putting API documentation in the header files in Git. (Implementation documentation in the source files is of course also very welcome.) >> It means you can't avoid seeing it or updating it when source >> spelunking, and it leaves header files short, which is useful when you'd >> like to get a general API overview without all the docs. Our documented >> headers are quite fat, e.g. strbuf.h is 60% of the size of strbuf.c, but >> less than 20% when you strip the docs. > > I don't use folds in my editor, and I guess nobody else in this thread > does, either. But they may be a reasonable tool for "wow, there are > comments, declarations, and definitions all together and I just want to > view one of them". In vim, try "set foldmethod=syntax" and then "zc" to > close the folds. I use kythe to get an outline view of the header files. [...] >> E.g. on Debian you can "apt install git-doc" and browse stuff like >> file:///usr/share/doc/git-doc/technical/api-argv-array.html which is the >> HTML formatted version, same for all the other api-*.txt docs. > > IMHO this is just silly. What am I as an end user going to do with > api-argv-array.html? In Debian we just ship all the docs. For something like technical/pack-heuristics, it's quite nice. For the API docs, I think they belong in the headers. Thanks, Jonathan