docs: function extractInlineAnnotations(funcNode, comment) {
      comment = comment.trim();
      if (comment[0] !== ":") {
          return null; // invalid syntax
      }
      // [ "", " (string, number)", " Object" ]
      var segments = comment.split(":");
      var returnType = segments[2] ? segments[2].trim() : null; // optional, may be 'void'
      var paramBlock = segments[1].trim();
      if (paramBlock[0] !== "(" || paramBlock[paramBlock.length-1] !== ")") {
          panicInline(funcNode, comment,
              "Expected inline comment to have ( ) around parameters"
          );
      }
      paramBlock = paramBlock.slice(1, -1); // "string, number"
      var paramTypes = paramBlock.split(",").map(function(p) {
          return p.trim();
      }).filter(function(p) {
          return p.length > 0;
      });
  
      // Make sure the number of params in the comment == num in function
      if (paramTypes.length !== funcNode.params.length) {
          panicInline(funcNode, comment,
              "Inline comment has wrong number of parameters: " + paramTypes.length +
              ". Expected: " + funcNode.params.length
          );
          process.exit(1);
      }
  
      var paramTags = funcNode.params.map(function(p, i) {
          return {
              loc: "param",
              name: p.name,
              type: paramTypes[i]
          };
      });
      var returnTags = [];
      if (returnType) {
          returnTags = [{
              loc: "return",
              type: returnType
          }];
      }
  
      return {
          params: paramTags,
          returns: returnTags,
          props: []
      };
  }