Hi all, *TL;DR* `puppet doc` is broken with the future parser and we need a replacement. Our primary focus is getting manifest documentation supported in Puppet 4. From there, support for other aspects of Puppet will be added. Thoughts?
Due to incompatibility with the new Puppet parser, we are looking into a replacement for the puppet doc feature. For those of you not familiar, `puppet doc` is a command which allows you generate documentation for Puppet manifests. It’s also used internally to generate documentation for other aspects of Puppet itself. For manifests, it uses RDoc to generate some HTML which can be used in a browser based off the information available from .pp files. However, as mentioned, the current implementation of `puppet doc` does not work with the future parser, meaning that in Puppet 4 it will be completely broken with respect to Puppet code and manifests. It will however still support documentation for Puppet itself. Since we know that being able to quickly generate documentation for one’s Puppet ecosystem is a valuable tool, we don’t want to lose support for it in Puppet 4. However, there are a lot of issues with the current RDoc implementation, namely that RDoc is not actually meant to be extended to support the Puppet language and that it changes drastically between different versions of Ruby, meaning that puppet doc can break horribly between Ruby versions (the transition from 1.8.7 to 1.9.3 was especially terrible). In addition to the issues caused by RDoc, there are some problematic aspects of the implementation itself, especially its relationship with the parser. So, considering there’s lots of room for improvement in the current RDoc implementation, this seems like a great opportunity to start over with something new. This way we can build a tool that is all around better and more sustainable. Right now, Charlie Sharpsteen has an awesome prototype which uses YARDoc instead of RDoc. If you want to check out the prototype, it’s available on GitHub <https://github.com/Sharpie/puppet-puppet_yardoc>. We will soon be migrating the project to the Puppet Labs organization and using it as a starting point. This raises an important question, however: what should we call this new documentation tool? It doesn’t seem right to call it ‘puppet doc’ since that’s a preexisting tool which will continue to coexist with the new one for a while. We also don’t want to call it ‘puppet yardoc’ since YARDoc is really just an implementation detail which we may move away from. We could really use some suggestions on what to call this feature, so please chime in if you have any suggestions. This seems to be a much better approach since YARDoc is meant to be extended to handle documentation for other languages. We’re planning to build off this prototype to create a new documentation tool which will be contained in a separate module and will just use the Abstract Syntax Tree produced by the Puppet parser rather than being tied directly into the parser itself. The new tool will produce two outputs: human-readable HTML which may be viewed in a browser, and a structured machine-consumable output intended primarily for internal use to generate documentation about Puppet. While more outputs may be supported in the future, these are the two we’ve decided to start with. In terms of input, it will support comments written in both Markdown and RDoc, although Markdown is encouraged. RDoc support remains for backwards compatibility purposes and because it is easy to support with YARD. Due to the time crunch with the release of Puppet 4 fast approaching, we’ve decided to narrow our scope to ensure that we at least have a replacement for manifest documentation to go with Puppet 4. Then we can expand and begin to document other parts of Puppet, such as functions. In addition to focusing on manifest documentation, the initial release will also include only HTML output. The first pass will also be a little different in terms of implementation. We will begin by using YARD’s builtin Code Objects to construct a Registry from the ASTs produced by the Puppet and Ruby parsers. After an initial release however, we will design our own Document Object Model and the structured output mentioned above. Our hope is that the initial implementation will help to inform what these should look like. We would really like to hear any input anyone has regarding this new documentation tool. Does this seem like the right approach? Are there other output formats that should eventually be supported? What should we call it? What don’t you like about the current tool so that we don’t repeat that mistake? If you have any suggestions, concerns, or questions, please chime in! -- Hailee Kenney hai...@puppetlabs.com Associate Developer, Puppet Labs *Join us at PuppetConf 2014 <http://www.puppetconf.com/>, September 20-24 in San Francisco* *Register by September 8th to take advantage of the Final Countdown <https://www.eventbrite.com/e/puppetconf-2014-tickets-7666774529?discount=FinalCountdown> * *—**save $149!* -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALdYGa8DcyQbMHrEcXkShGKuF2yNhvfBar%3D42RGD_c3toP%3D0qw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.