chpldocΒΆ

View chpldoc.doc.chpl on GitHub

/*

  This primer covers the use of chpldoc to document source code. For further
  information, please see $CHPL_HOME/doc/rst/tools/chpldoc/chpldoc.rst

*/


// Creating and accessing the documentation:

// To generate the documentation for this and any source file, you may either
// compile using the command 'chpldoc <sourceName.chpl>'.

// The documentation files will be found in a special folder created by the
// chpldoc tool.  If you are compiling a Chapel file that is deeper than your
// current directory, this hierarchy will be reflected within the documentation
// folder.
// (i.e. foo/bar.chpl will generate documentation within docs/foo/)



// Documentation within the code:

/*
  Multiline comments found before a function are associated with that function
  as long as there are no code blocks between them.
*/

proc commented(val: int): string {
  var totalNum = val + 4;
  var str = "hello agent " + totalNum;
  return str;
}

/*
  The function can be a stub and still output its comment
*/
proc stub(val): bool {
  /* Comments within the function body are ignored  */
}

// Single line comments are also ignored.  However, this does not prevent
// the display of the function itself.
proc uncommented() {
  /*
    Longer comments within the function body are also ignored
  */
}

/*
  To prevent the display and access of a particular function, specified module,
  or global variable, simply preface it with:
  private
*/
private
proc undocumented1() {
  // This function won't be in the final output.

  // Note that private does not support types at this time, or the fields or
  // methods on a type.
}

/*
  To prevent the display of a particular function, class, record, specified
  module, or global variable but not prevent its access by outside modules,
  simply preface it with:
  @chpldoc.nodoc
*/
@chpldoc.nodoc
proc undocumented2() {
  // This function won't be in the final output.
}

/*
  If the source code defines a module, it can also have a comment associated
  with it
*/
module Defined {

  /*
    And classes can display their comments, too
   */
  class Foo {
    /*
      Including the comments associated with their fields
     */
    var a: int;

    /*
      And class specific methods
     */
    proc getA(): int {
      return a;
    }
  }

  /*
    If a class inherits from another class, the inheritance is shown
    in the signature.
   */
  class Bar : Foo {

    proc setA(newVal: int) {
      a = newVal;
    }
  }
}