<br><br><div class="gmail_quote">On Mon, Nov 14, 2011 at 7:08 AM, Hadley Wickham <span dir="ltr">&lt;<a href="mailto:hadley@rice.edu">hadley@rice.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">&gt; &lt;sidenote&gt;Although in many cases one could create such class-based methods<br>
&gt; with simple functions, if someone wants to override one in a subclass, they<br>
&gt; will need to create a method (which would create an implicit generic,<br>
&gt; defaulting to the original function). Usually though, that implicit generic<br>
&gt; is undesirable, because it does not a well-defined signature. In particular,<br>
&gt; it might not have &quot;...&quot; in its signature. This is often desirable, because<br>
&gt; methods can add formal arguments to that &quot;...&quot;, separate from their<br>
&gt; signature, and this needs to be handled. Anyway, the generic should probably<br>
&gt; be defined in the first package; otherwise, we might end up with multiple<br>
&gt; generics across packages that would need to have consistent<br>
&gt; signatures.&lt;/sidenote&gt;<br>
<br>
</div>Thanks for the explanation!<br>
<div class="im"><br>
&gt; Every project is usually some mix of the above styles. A reasonable object<br>
&gt; model for this would have classes, generics and methods, with methods<br>
&gt; pointing to their generic and all of the classes in their signature (these<br>
&gt; generics and classes could be defined in other packages). The implementation<br>
&gt; could simply use the methods package for keeping track of this.<br>
<br>
</div>A similarly, classes should point to all parent and child classes.<br>
<div class="im"><br>
&gt; It is clear that the user wants multiple views of the documentation. As<br>
&gt; Hadley brought up, it is desirable to have dynamic class-centric,<br>
&gt; generic-centric and method-centric views. The Rd is one type of view. How to<br>
&gt; store the data?  Adding the documentation in a formal structure to each<br>
&gt; class, generic and method object would be awesome.<br>
<br>
</div>I think the first step is to develop an object representation of R<br>
documentation, backed by Rd files.  Once we have that working (which<br>
already would be very useful for roxygen2), it would be possible to<br>
explore different backing systems: xml, mallard, sqlite etc.<br>
<div class="im"><br></div></blockquote><div><br>Sounds good.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">

&gt; Not sure how to implement<br>
&gt; it (maybe extend them? RoxygenStandardGeneric, etc?).  Anyway, that would<br>
&gt; allow all sorts of complex views. It would also allow packages that employ<br>
&gt; meta-programming, i.e., writing a function that defines one type of class<br>
&gt; (like setPropertySet and setEnum in objectProperties), because that function<br>
&gt; could auto-generate and transform the documentation, as well.<br>
<br>
</div>Yes, user specifiable sub-classes would be cool.  How this interacts<br>
with the compilation process that turns roxygen comments in to<br>
documentation objects might be complex, however.<br>
<div class="im"><br>
&gt;  It would also<br>
&gt; allow language bindings to derive/R-ify documentation from external<br>
&gt; libraries. R5 already has the &quot;doc string&quot;, but we would want a formal<br>
&gt; object of some sort. To support the R help() view, we would need files in<br>
&gt; the Rd that would be largely generated with \Sexpr{}.<br>
<br>
</div>Ah, yes, that&#39;s a cool idea.  In principle, the Rd file could just be<br>
\Sexpr{generateRd(&quot;topicname&quot;)}.  But in practice, you&#39;d probably want<br>
some stuff statically generated like the name and aliases.<br>
<div class="im"><br>
&gt; As far as the views of generics and classes, Hadley&#39;s plan is a good start.<br>
&gt; In addition, we would want more cross-references between classes, generics<br>
&gt; and methods. The methods are the edges in a bipartite graph of classes and<br>
&gt; generics. In other words, the generic document would have a \seealso{} or<br>
&gt; something that links to the classes included in one of the method signatures<br>
&gt; for the generic, as a summary. Similarly, the class document would have a<br>
&gt; summary section linking to all generics that have it in a method signature.<br>
<br>
</div>Ooh, I like that idea.<br>
<div class="im"><br>
&gt; For consistency, every method should have a view, and it should be richer<br>
&gt; than simply documenting the method like a function. It could, for example,<br>
&gt; have a \seealso{} to all methods on that generic with signatures that match<br>
&gt; at least one class in its signature. Here &quot;match&quot; would mean not always the<br>
&gt; same class, but a subclass or superclass, as well.<br>
<br>
</div>I like that idea too.<br>
<div class="im"><br>
&gt; For classes, displaying the slots should be optional. Often, that would just<br>
&gt; be an implementation detail. I would say always hide a slot unless<br>
&gt; explicitly asked to make it public. Up for discussion. The class document<br>
&gt; would want to group its methods by generic and collapse them somehow. If<br>
&gt; there is a single method matching the class, briefly list its documentation<br>
&gt; (which somehow includes the generic description). This satisfies the<br>
&gt; class-centric case. If there are multiple methods, list the generic<br>
&gt; description, and available method signatures, with links.<br>
<br>
</div>You mean hiding in the documentation sense, right?  Sort of privacy by<br>
convention?<br>
<div class="im"><br></div></blockquote><div><br>Yes.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
&gt; One last thing: documentation for classes can get pretty long. Is there a<br>
&gt; way to @include extra files? Steve Lianoglou had this idea.<br>
<br>
</div>That&#39;s another interesting idea.  We currently have @template, which<br>
is a superset of @include, but it might be worthwhile differentiating<br>
them semantically.  Where would you imagine such include files living?<br>
 Would they be R files or plain text to be interpreted as roxygen<br>
comments?  (We decided on R files for templates so that existing<br>
syntax highlighting code would work)<br>
<br></blockquote><div><br>There may be a use-case for @including Roxygen comments, but I think my use-case would benefit more from pure Rd that would just be concatenated into the resulting Rd file. These would be things like extra \section{}s. Maybe make that more explicit with a @section that refers to a file?<br>
<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hadley<br>
<font color="#888888"><br>
--<br>
Assistant Professor / Dobelman Family Junior Chair<br>
Department of Statistics / Rice University<br>
<a href="http://had.co.nz/" target="_blank">http://had.co.nz/</a><br>
</font></blockquote></div><br>