I've been trying to use JSDoc3 to generate documentation on a file, but I'm having some difficulty. The file (which is a Require.js module) basically looks like this:
define([], function() {      /*      * @exports mystuff/foo      */     var foo = {         /**          * @member          */         bar: {             /**              * @method              */             baz: function() { /*...*/ }         }     };      return foo; }   The problem is, I can't get baz to show up in the generated documentation.  Instead I just get a documentation file for a foo/foo module, which lists a bar member, but bar has no baz (just a link to foo's source code).
I've tried changing bar's directive to @property instead, and I've tried changing baz's directive to @member or @property, but none of that helps.  No matter what I do, baz just doesn't seem to want to show up.
Does anyone know what directive structure I could use to get baz to appear in the generated documentation?
P.S. I've tried reading pages like this one on the JSDoc site http://usejsdoc.org/howto-commonjs-modules.html, but it only describes cases of foo.bar, not foo.bar.baz.
JSDoc comments are used for documentation lookup with Ctrl+Q in JavaScript and TypeScript, see JavaScript documentation look-up and TypeScript documentation look-up, as well as for type annotations and method return type hints in chained methods.
The basic definition of an object in JavaScript is a container for named values called properties (keys). Sometimes, we need to create an object inside another object. In this case, it's called a nested object.
JSDoc is an open source API documentation generator for Javascript. It allows developers to document their code through comments.
You can use a combination of @module or @namespace along with @memberof.
define([], function() {      /**      * A test module foo      * @version 1.0      * @exports mystuff/foo      * @namespace foo      */     var foo = {         /**          * A method in first level, just for test          * @memberof foo          * @method testFirstLvl          */         testFirstLvl: function(msg) {},         /**          * Test child object with child namespace          * @memberof foo          * @type {object}          * @namespace foo.bar          */         bar: {             /**              * A Test Inner method in child namespace              * @memberof foo.bar              * @method baz              */             baz: function() { /*...*/ }         },         /**          * Test child object without namespace          * @memberof foo          * @type {object}          * @property {method} baz2 A child method as property defination          */         bar2: {             /**              * A Test Inner method              * @memberof foo.bar2              * @method baz2              */             baz2: function() { /*...*/ }         },         /**          * Test child object with namespace and property def.          * @memberof foo          * @type {object}          * @namespace foo.bar3          * @property {method} baz3 A child method as property defination          */         bar3: {             /**              * A Test Inner method in child namespace              * @memberof foo.bar3              * @method baz3              */             baz3: function() { /*...*/ }         },         /**          * Test child object          * @memberof foo          * @type {object}          * @property {method} baz4 A child method          */         bar4: {              /**              * The @alias and @memberof! tags force JSDoc to document the              * property as `bar4.baz4` (rather than `baz4`) and to be a member of              * `Data#`. You can link to the property as {@link foo#bar4.baz4}.              * @alias bar4.baz4              * @memberof! foo#              * @method bar4.baz4              */             baz4: function() { /*...*/ }         }     };      return foo; });   EDIT as per Comment: (Single page solution for module)
bar4 without that ugly property table. ie @property removed from bar4.
define([], function() {      /**      * A test module foo      * @version 1.0      * @exports mystuff/foo      * @namespace foo      */     var foo = {         /**          * A method in first level, just for test          * @memberof foo          * @method testFirstLvl          */         testFirstLvl: function(msg) {},         /**          * Test child object          * @memberof foo          * @type {object}          */         bar4: {              /**              * The @alias and @memberof! tags force JSDoc to document the              * property as `bar4.baz4` (rather than `baz4`) and to be a member of              * `Data#`. You can link to the property as {@link foo#bar4.baz4}.              * @alias bar4.baz4              * @memberof! foo#              * @method bar4.baz4              */             baz4: function() { /*...*/ },             /**              * @memberof! for a memeber              * @alias bar4.test              * @memberof! foo#              * @member bar4.test              */              test : true         }     };      return foo; });   References -
*Note I haven't tried it myself. Please try and share the results.
Here's a simple way to do it:
/**  * @module mystuff/foo  * @version 1.0  */ define([], function() {  /** @lends module:mystuff/foo */ var foo = {     /**      * A method in first level, just for test      */     testFirstLvl: function(msg) {},     /**      * @namespace      */     bar4: {         /**          * This is the description for baz4.          */         baz4: function() { /*...*/ },         /**          * This is the description for test.          */         test : true     } };  return foo; });   Note that jsdoc can infer the types baz4.baz4 and test without having to say @method and @member.
As far as having jsdoc3 put documentation for classes and namespaces on the same page as the module that defines them, I don't know how to do it.
I've been using jsdoc3 for months, documenting a small library and a large application with it. I prefer to bend to jsdoc3's will in some areas than have to type reams of @-directives to bend it to my will.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With