On Tue, 2022-04-12 at 08:33 -0700, Tomer wrote: > Hey Stephen, > Thanks for your reply, > I'll draft what I have into a PR hopefully tomorrow or the next day.
Looking forward to it 🥳 > I would love some feedback, yes. Considering how little I still know about all > this, I'm sure there are better ways of doing what I did. > > :nested: fuller, while clear, sounds a bit silly to me. XD > Maybe "verbose"? I was trying to find a superlative of full. It's fuller or fullest and I suspect we should reserve the latter for future 😅️ verbose also works though if you really hate fuller > Well, I'll include it in the PR and you're welcome to decide for yourself if > you want to add it and what to call it if so. > > I didn't know about the form feed character, that's a useful tip. > I don't think it would solve the issue, however, as that seems to be used for > truncating everything that follows, so I wouldn't be able to use that to > change inline references. Yeah, it's certainly different to what you're proposing here. > What I made seems to be working decently enough for now, at least. > Considering it modifies Click objects, it might be a good idea to make it into > a plugin like you said. I actually didn't know Click supported plugins. I'll > look into that. > > One more thing I've added to my forked repo is a ":post-process: > path.to.module:function_name" option that lets you inject code to post-process > generated nodes for each command. > In terms of amount of change to sphinx-click, there isn't much there - just > loading the module and then calling the specified function on the list of > nodes at the end of the _generate_nodes() function. > But adding it allowed me to add per-command customization. I don't know how > much something like that will be used by other people, but personally I've > found it to be very useful. I've no issues with hooks. It just needs to be (very) well documented and somewhat maintainable (i.e. no spaghetti code). Unit tests are probably a necessity too, though that might be difficult since our only tests right now are for the formatting code, not the loading code or anything else... > > I also have a working version of the documentation generation tool now. > Also without proper testing so far, unfortunately... this entire thing I'm > doing is one big POC so I need to get it into presentable form and see that > everything I have in mind is possible before I can take the time to do the > rest of it. All sounds good to me. Cheers, Stephen > > Thanks, > Tomer. > On Tuesday, April 12, 2022 at 5:32:39 PM UTC+3 Stephen Finucane wrote: > > On Wed, 2022-04-06 at 07:14 -0700, Tomer wrote: > > > Hi Stephen, > > > > > > Pardon the late reply; I wanted to make some decisions and try things out > > > before getting back to you. > > > > > > I've forked the sphinx-click repository and made a few modifications > > > locally. > > > Namely what I've added is: > > > * Anchors for groups and commands in the same dash-separated form as the > > > rest > > > (group, group-command). > > > * Extra anchors for options and arguments to conform to the same standard > > > (`group-command-option`, `group-command-arg`)Namely if you have an option > > > with multiple names, e.g. -v, --verbose for command `log` in the group > > > `run`, > > > you'll get both `run-log-v` and `run-log-version`. > > > * A new :hide-header: flag which hides the title, description and usage. > > > If > > > used with the ":nested: none" setting, this would produce an empty output, > > > so > > > in that specific case I made it only remove the title. > > > > These all sound reasonable. I'd be happy to review a PR with these. It > > doesn't need to be initially complete, assuming you'd like feedback before > > investing time into writing tests. > > > > > * A new nesting value which I very poorly named ":nested: complete" for > > > lack of > > > a better idea (suggestions are welcome). It's basically like the ":nested: > > > full" setting but it also includes the short descriptions from ":nested: > > > short" before it shows the full details. See attached screenshot below for > > > an > > > example. > > > > :nested: fuller ? > > > > > I only have it working with my little experimentation project though. > > > Haven't done any proper testing yet. > > > > > > Aside from that, I've written a small module to facilitate generating > > > references using the added anchors to the documentation from within the > > > docstrings of the CLI commands themselves. > > > I don't know if that's of any interest to you - if so you're welcome to > > > read on. > > > > > > I'll first explain why. > > > I saw that if I put something like the following in a docstring for an > > > example "starter order-soup" command: > > > > > > Soup goes great with :ref:`meat <main-order-meat>`, you know (just be > > > sure to specify a good :option:`dish <main order-meat -dish>`). > > > > > > It works and generates the references. > > > However, as you would expect, if you then ran the CLI tool and typed "cli > > > starter order-soup --help", you would get exactly the above text, which is > > > naturally not something you want to see in a CLI help message. > > > > > > So I wrote something that wraps Click's command decorators, parses the > > > docstrings of each command and replaces the references with suitable text. > > > I made it so that you can set some environment variable to say that you're > > > currently building the documentation - if so then it replaces the text > > > with references, otherwise it removes everything but the name. > > > (By the way, do you know if there's a way to detect whether we're running > > > Sphinx or the actual CLI without using an environment variable like that? > > > That'd be nicer.) > > > Since I transform the text in both instances I can be more flexible in > > > format, so I made it so that you can type any of the following: > > > :type_of_reference:`Display Name Here <reference_path>` > > > :type_of_reference:`reference_path` > > > `Display Name Here <reference_path>` > > > `reference_path` > > > and you'll get a reference in Sphinx-generated documents and only the > > > display names in the CLI itself. > > > (The "type of reference" bit is to let you choose to use :option: instead > > > of :ref: since that only works for options but also does some nice > > > formatting.) > > > > > > If any of this is of interest to you I'd love to share it, so please tell > > > me if so. > > > > This sounds helpful, though it's tough to say how useful it would be without > > seeing the code. Feel free to submit a WIP pull request for review. Try to > > keep it separate from the other items above so we can review it in > > isolation. > > > > As an aside, the typical way people seem to want to do this is using the > > form feed (\f) character to hide Sphinx-specific stuff from click output. > > You need a recent version of click to support this but it otherwise seems > > like a good call. More information > > at https://github.com/click-contrib/sphinx-click/issues/56 > > > > Another option would be to write a plugin for click that would transform > > help texts and remove the Sphinx-specific stuff using something > > like https://pypi.org/project/rst2txt/. This would definitely be more > > difficult but it's not impossible. > > > > > > > > Aside from that, regarding what you said, I do think the documentation can > > > be clearer about that specific point, and also I believe there's a > > > copy/paste error there in the Cross-referencing section where it says: > > > Specifically, it uses the program, program, and program directives. > > > > Good spot. Fixed. > > > > Hope this helps, > > Stephen > > > > > > > > Thanks again for your help, > > > Tomer. > > > > > > Screenshot from 2022-04-06 16-34-49.png > > > > > > > > > On Monday, April 4, 2022 at 7:15:45 PM UTC+3 Stephen Finucane wrote: > > > > On Mon, 2022-04-04 at 06:38 -0700, Tomer wrote: > > > > > Hi Stephen, > > > > > Thank you for taking the time to reply. > > > > > > > > > > I was aware that this was a Sphinx group, but I didn't find anywhere > > > > better to > > > > > ask, and I thought that if someone at least knew how I could read the > > > > .doctree > > > > > files that would also help, and that does sound relevant to this > > > > group. > > > > > I also thought I might luck out and find someone who knows about > > > > sphinx-click > > > > > specifically, so I'm glad that worked out. =) > > > > > Since I had a question rather than an actual issue I didn't think the > > > > issue > > > > > tracker was the right place for it. Is that normally an acceptable > > > > place for > > > > > general questions? > > > > > > > > It depends on the project but I'm happy for you to do that, personally. > > > > I > > > > suspect you'll be told if something is not considered appropriate. > > > > > > > > > Regarding your answer: > > > > > I did see that in the documentation, but I didn't know that the > > > > commands and > > > > > groups were considered "programs." > > > > > > > > Yeah, this is Sphinx terminology. We're just borrowing directives and > > > > roles from > > > > the standard domain [1]. Each subcommand is considered a separate > > > > program in > > > > Sphinx lingo. > > > > > > > > > I misunderstood that to only refer to the top level of the Click > > > > application > > > > > and thought that the documentation merely didn't specify anything > > > > about groups > > > > > and commands in general. > > > > > I'm very new to Sphinx so unfortunately not yet well versed in its > > > > > terminology. > > > > > > > > If you think that the documentation could be clarified then by all > > > > means, I'd > > > > happily accept PRs for this too (even WIP PRs - I can finish them up > > > > myself). > > > > > > > > > Having those custom anchors would be very nice for sure. > > > > > I don't know if I'll have the time to get into this to actually > > > > implement it > > > > > myself but I'll tell you if I do (or open an issue and say it there). > > > > > > > > No worries. I'm unlikely to have time myself to draft this entirely but > > > > I'd be > > > > happy to drag something over the line if you or someone else proposed a > > > > solid > > > > WIP PR at some point. > > > > > > > > > Thank you for maintaining the project - it's most definitely very > > > > useful! > > > > > Since I managed to reach you here, I hope you don't mind if I ask a > > > > couple of > > > > > more questions. =P > > > > > > > > > > I'd like to generate documentation for a CLI tool with multiple > > > > command > > > > > groups, which would show quite a bit of information. > > > > > To this end I'd like to split it into separate pages - similar to how > > > > the > > > > > Click --help display works, where it shows you short help text for the > > > > groups > > > > > if you run it without any other arguments, and then shows things > > > > specific to a > > > > > group if you run it with "group --help". > > > > > I haven't found a built-in way to do this, so my current solution is > > > > to > > > > > generate an .rst page for each group and put a ".. click::" directive > > > > there. > > > > > Not ideal, but should work. If you have a better suggestion I'd love > > > > to know. > > > > > > > > This is how I'd do this also. Again, it's possible that sphinx-click > > > > could > > > > autogenerate these pages for you in a similar vein to how Sphinx's > > > > sphinx-apidoc > > > > tool will generate .rst pages containing 'autodoc' directives [2], but > > > > it > > > > doesn't currently do this. Another option is to enable nested > > > > documentation > > > > generation (using the 'nested' argument), but this would put everything > > > > on a > > > > single page. You seem to have already explored this. > > > > > > > > > However, I don't know what to do in order to display a short summary > > > > of the > > > > > commands for each group. > > > > > Ideally I'd like to put three of these directives one after the other, > > > > with > > > > > their :nested: options set to none, short and full respectively. Doing > > > > this > > > > > actually works somewhat decently, but some of the information repeats > > > > itself > > > > > (namely the contents of the none form shows up in all of them). > > > > > Is there a way to make the directive not list the program name and > > > > > description? > > > > > > > > Not at this time, no. It's very much an all or nothing thing. I hadn't > > > > really > > > > envisioned further customization than what the existing arguments > > > > ('prog', > > > > 'nested', 'commands') allows. > > > > > > > > > Another thing I'd like to do is be able to have the titles of the > > > > commands in > > > > > the short form reference their anchors. Even if it's done manually in > > > > the form > > > > > of entering a link to the HTML page and section, that would still be > > > > nice to > > > > > have. > > > > > Is there a way to modify the output of that directive? > > > > > > > > Again, modification of the output isn't currently possible beyond what > > > > those > > > > three options allow for. It would probably be useful to open an issue > > > > with > > > > screenshots of what you're trying to achieve (and why) so we can see > > > > whether > > > > this is worth doing. > > > > > > > > > > > > > > Thanks again, > > > > > Tomer. > > > > > > > > Hope this helps, > > > > Stephen > > > > > > > > [1] > > > > https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-standard-domain > > > > > > > > [2] https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html > > > > > > > > > > > > > On Monday, April 4, 2022 at 2:57:40 PM UTC+3 Stephen Finucane wrote: > > > > > > On Sun, 2022-04-03 at 03:59 -0700, Tomer wrote: > > > > > > > Hello, > > > > > > > > > > > > > > I'm trying to use Sphinx to automatically generate documentation > > > > for a > > > > > > > command > > > > > > > line tool written in Python using Click. > > > > > > > I'm using the sphinx-click plugin for this, but I'm having trouble > > > > > > > figuring > > > > > > > out how to cross-reference specific types of functions - namely > > > > commands > > > > > > > and > > > > > > > command groups. > > > > > > > > > > > > Hey, > > > > > > > > > > > > Just FYI, sphinx-click is an extension, which means the sphinx-users > > > > group > > > > > > generally isn't the best place to ask questions like this. You're > > > > better off > > > > > > using the issue tracker for the project. With that said, I'm the > > > > maintainer > > > > > > of > > > > > > sphinx-click and subscribe to this list so perhaps you've got lucky > > > > :) > > > > > > > > > > > > > I can reference options using :option:`group_name-command_name - > > > > > > > option_name`, > > > > > > > and I can reference environment variables using :ref:`DisplayText > > > > <group- > > > > > > > command-option-envvar>` (doesn't seem to work without supplying a > > > > name, as > > > > > > > written here), but despite doing much trial and error I can't find > > > > how to > > > > > > > reference command or command groups. > > > > > > > The only solution I've found is HTML-specific, by using a direct > > > > link like > > > > > > > `DisplayText <group-page.html#group-command>`_ - or `DisplayText > > > > <#group- > > > > > > > command>`_ if it's on the same page - but that's obviously not a > > > > very good > > > > > > > solution. > > > > > > > > > > > > This is actually called out in the documentation [1]: > > > > > > > > > > > > > > > > > > Programs > > > > > > > > > > > > Sphinx currently does not allow you to cross-reference programs. > > > > See Sphinx > > > > > > issue #880 for more information. > > > > > > > > > > > > So this is an issue with Sphinx itself that we can't fix. What we > > > > _could_ do > > > > > > is > > > > > > add a custom anchor like we now do for environment variables which > > > > you could > > > > > > then reference. It would be quite trivial to do and I'd happily > > > > welcome a > > > > > > PR. It > > > > > > just hasn't been done yet. > > > > > > > > > > > > Cheers, > > > > > > Stephen > > > > > > > > > > > > [1] > > > > https://sphinx-click.readthedocs.io/en/latest/usage/#cross-referencing > > > > > > > > > > > > > > > > > > > > > > PS: A more involved PR would involve adding custom roles for all of > > > > these so > > > > > > that we could avoid using Sphinx's (somewhat broken) standard domain > > > > > > roles/directives entirely. That's a lot more work though and I > > > > suspect this > > > > > > would require some good working Sphinx knowledge. > > > > > > > > > > > > > > > > > > > > Seeing as the table of contents entry does reference these things, > > > > I > > > > > > > figure > > > > > > > there's got to be a way to get these references, so I'm hoping > > > > someone > > > > > > > here > > > > > > > might have an answer for me. > > > > > > > Being able to read the .doctree files to see what all the label > > > > names are > > > > > > > might be enough, but I don't know how to do that either. > > > > > > > > > > > > > > Any help would be appreciated. > > > > > > > Thanks in advance! > > > > > > > > > > > > > Disclaimer > > > The information contained in this communication from the sender is > > > confidential. It is intended solely for use by the recipient and others > > > authorized to receive it. If you are not the recipient, you are hereby > > > notified that any disclosure, copying, distribution or taking action in > > > relation of the contents of this information is strictly prohibited and > > > may be unlawful. -- You received this message because you are subscribed to the Google Groups "sphinx-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to sphinx-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sphinx-users/b62ef1aa2890908770068d8eca8b24023cf5322e.camel%40that.guru.