mrdoob / three.js

JavaScript 3D Library.
https://threejs.org/
MIT License
102.37k stars 35.35k forks source link

Doxygen/natural docs/jsdoc? #4725

Closed ponychicken closed 9 years ago

ponychicken commented 10 years ago

One of my gripes with Three is the often sparse or outdated documentation. It might be reasonable to use a tool like doxygen to generate the docs from the source code comments. From my experience that encourages up-to-date docs much more than having them in seperate files.

kumavis commented 10 years ago

I agree that this would be an improvement on the current practices.

mrdoob commented 10 years ago

I'm just not a fan of code with huge comments...

/**
 * Graphics is the abstract base class for all graphics contexts
 * which allow an application to draw onto components realized on
 * various devices or onto off-screen images.
 * A Graphics object encapsulates the state information needed
 * for the various rendering operations that Java supports.  This
 * state information includes:
 * <ul>
 * <li>The Component to draw on
 * <li>A translation origin for rendering and clipping coordinates
 * <li>The current clip
 * <li>The current color
 * <li>The current font
 * <li>The current logical pixel operation function (XOR or Paint)
 * <li>The current XOR alternation color
 *     (see <a href="#setXORMode">setXORMode</a>)
 * </ul>
 * <p>
 * Coordinates are infinitely thin and lie between the pixels of the
 * output device.
 * Operations which draw the outline of a figure operate by traversing
 * along the infinitely thin path with a pixel-sized pen that hangs
 * down and to the right of the anchor point on the path.
 * Operations which fill a figure operate by filling the interior
 * of the infinitely thin path.
 * Operations which render horizontal text render the ascending
 * portion of the characters entirely above the baseline coordinate.
 * <p>
 * Some important points to consider are that drawing a figure that
 * covers a given rectangle will occupy one extra row of pixels on
 * the right and bottom edges compared to filling a figure that is
 * bounded by that same rectangle.
 * Also, drawing a horizontal line along the same y coordinate as
 * the baseline of a line of text will draw the line entirely below
 * the text except for any descenders.
 * Both of these properties are due to the pen hanging down and to
 * the right from the path that it traverses.
 * <p>
 * All coordinates which appear as arguments to the methods of this
 * Graphics object are considered relative to the translation origin
 * of this Graphics object prior to the invocation of the method.
 * All rendering operations modify only pixels which lie within the
 * area bounded by both the current clip of the graphics context
 * and the extents of the Component used to create the Graphics object.
 * 
 * @author      Sami Shaio
 * @author      Arthur van Hoff
 * @version     %I%, %G%
 * @since       1.0
 */
public abstract class Graphics {

    /** 
     * Draws as much of the specified image as is currently available
     * with its northwest corner at the specified coordinate (x, y).
     * This method will return immediately in all cases, even if the
     * entire image has not yet been scaled, dithered and converted
     * for the current output device.
     * <p>
     * If the current output representation is not yet complete then
     * the method will return false and the indicated 
     * {@link ImageObserver} object will be notified as the
     * conversion process progresses.
     *
     * @param img       the image to be drawn
     * @param x         the x-coordinate of the northwest corner
     *                  of the destination rectangle in pixels
     * @param y         the y-coordinate of the northwest corner
     *                  of the destination rectangle in pixels
     * @param observer  the image observer to be notified as more
     *                  of the image is converted.  May be 
     *                  <code>null</code>
     * @return          <code>true</code> if the image is completely 
     *                  loaded and was painted successfully; 
     *                  <code>false</code> otherwise.
     * @see             Image
     * @see             ImageObserver
     * @since           1.0
     */
    public abstract boolean drawImage(Image img, int x, int y, 
                                      ImageObserver observer);

    /**
     * Dispose of the system resources used by this graphics context.
     * The Graphics context cannot be used after being disposed of.
     * While the finalization process of the garbage collector will
     * also dispose of the same system resources, due to the number
     * of Graphics objects that can be created in short time frames
     * it is preferable to manually free the associated resources
     * using this method rather than to rely on a finalization
     * process which may not happen for a long period of time.
     * <p>
     * Graphics objects which are provided as arguments to the paint
     * and update methods of Components are automatically disposed
     * by the system when those methods return.  Programmers should,
     * for efficiency, call the dispose method when finished using
     * a Graphics object only if it was created directly from a
     * Component or another Graphics object.
     *
     * @see       #create(int, int, int, int)
     * @see       #finalize()
     * @see       Component#getGraphics()
     * @see       Component#paint(Graphics)
     * @see       Component#update(Graphics)
     * @since     1.0
     */
    public abstract void dispose();

    /**
     * Disposes of this graphics context once it is no longer 
     * referenced.
     *
     * @see       #dispose()
     * @since     1.0
     */
    public void finalize() {
        dispose();
    }
}
kumavis commented 10 years ago

Its not terrible. I guess the alternative is reminding PRers to also make doc edits. I'm likely guilty of breaking docs so far.

futagoza commented 10 years ago

Although it makes it easier browsing source code, I agree with mrdoob, I don't like the bunch of comments when I'm only looking for the API source code.

How about simply placing paths to text files that contain the actual doxygen/jsdoc comments, and when building, the builder can replace the required comments with doxygen/jsdoc comment blocks and then you can get the documenter to go over the built file(s)?

Might require some work to set up, but in the long run this actually could help maintain the documents, keep the source code clear of allot of comments and also make it easier to motivate the contributer to edit the text document when they edit the class/method/etc...

kumavis commented 10 years ago

@futagoza what is the win over the current setup? That theres a line in there that mentions the filepath to the docs?

futagoza commented 10 years ago

yea, this comment line will tell the builder that this comment should be replaced with with a text file and be wrapped by a doxygen/jsdoc block, so when the files are either joined (or optionally temporarily copied to another folder), they can then be parsed by the appropriate documenter and the docs can be generated.

While this seems similar to maintaining the current html docs, its actually different because the contributor wont have to mess with html and do more work then required when they change one function only (or add one, etc), because the documenter will auto generate that.

This also makes it easier for the person browsing the source code as the can view the usual comments and when they want more info the just follow the path