From 6af99edab7fd5d3c2d767e93e4f5fe2064625a42 Mon Sep 17 00:00:00 2001 From: micmath Date: Thu, 24 Feb 2011 17:10:12 +0000 Subject: [PATCH] Added support for @typedef tag. git-svn-id: https://jsdoc.googlecode.com/svn/trunk/@13 d5942f49-e6af-b5c1-9d01-85772c7ca168 --- modules/jsdoc/src/parser.js | 2 +- modules/jsdoc/tag/dictionary/definitions.js | 19 +++++++++++++++- package.json | 2 +- test/cases/typedeftag.js | 5 +++++ test/runner.js | 1 + test/t/cases/typedeftag.js | 24 +++++++++++++++++++++ 6 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 test/cases/typedeftag.js create mode 100644 test/t/cases/typedeftag.js diff --git a/modules/jsdoc/src/parser.js b/modules/jsdoc/src/parser.js index a4722b37..246b94dc 100644 --- a/modules/jsdoc/src/parser.js +++ b/modules/jsdoc/src/parser.js @@ -195,7 +195,7 @@ function visitNode(node) { var e, commentSrc; - + // look for stand-alone doc comments if (node.type === Token.SCRIPT && node.comments) { // note: ALL comments are seen in this block... diff --git a/modules/jsdoc/tag/dictionary/definitions.js b/modules/jsdoc/tag/dictionary/definitions.js index 5bab8c11..f5e0557d 100644 --- a/modules/jsdoc/tag/dictionary/definitions.js +++ b/modules/jsdoc/tag/dictionary/definitions.js @@ -399,7 +399,24 @@ onTagged: function(doclet, tag) { if (tag.value.type) { doclet.type = tag.value.type; } } - }) + }); + + dictionary.defineTag('typedef', { + canHaveType: true, + canHaveName: true, + onTagged: function(doclet, tag) { + setDocletKindToTitle(doclet, tag); + + if (tag.value) { + if (tag.value.name) { + doclet.addTag('name', tag.value.name); + } + if (tag.value.type) { + doclet.type = tag.value.type; + } + } + } + }); dictionary.defineTag('undocumented', { mustNotHaveValue: true, diff --git a/package.json b/package.json index 463fe830..9547be1e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jsdoc", "version": "3.0.0beta1", - "revision": "2011-02-06-0040", + "revision": "2011-02-08-2004", "description": "An automatic documentation generator for javascript.", "keywords": [ "documentation", "javascript" ], "licenses": [ diff --git a/test/cases/typedeftag.js b/test/cases/typedeftag.js new file mode 100644 index 00000000..9d82cfdc --- /dev/null +++ b/test/cases/typedeftag.js @@ -0,0 +1,5 @@ +/** @typedef {(string|number)} calc.NumberLike */ + +/** @param {calc.NumberLike} x A number or a string. */ +calc.readNumber = function(x) { +} \ No newline at end of file diff --git a/test/runner.js b/test/runner.js index 9e0d657e..4a36488f 100644 --- a/test/runner.js +++ b/test/runner.js @@ -122,6 +122,7 @@ testFile('test/t/cases/seetag.js'); testFile('test/t/cases/sincetag.js'); testFile('test/t/cases/thistag.js'); testFile('test/t/cases/typetag.js'); +testFile('test/t/cases/typedeftag.js'); testFile('test/t/cases/variations.js'); testFile('test/t/cases/versiontag.js'); diff --git a/test/t/cases/typedeftag.js b/test/t/cases/typedeftag.js new file mode 100644 index 00000000..1728c4cc --- /dev/null +++ b/test/t/cases/typedeftag.js @@ -0,0 +1,24 @@ +(function() { + var docSet = testhelpers.getDocSetFromFile('test/cases/typedeftag.js'), + numberlike = docSet.getByLongname('calc.NumberLike')[0]; + + //dump(docSet.doclets); exit(0); + + test('When a symbol has an @typedef tag, the doclet has a kind property set to "typedef".', function() { + assert.equal(numberlike.kind, 'typedef'); + }); + + test('When a symbol has an @typedef tag with a type, the doclet has a type property set to that type.', function() { + assert.equal(typeof numberlike.type, 'object'); + assert.equal(typeof numberlike.type.names, 'object'); + assert.equal(numberlike.type.names.length, 2); + assert.equal(numberlike.type.names[0], 'string'); + assert.equal(numberlike.type.names[1], 'number'); + }); + + test('When a symbol has an @typedef tag with a name, the doclet has a name property set to that name.', function() { + assert.equal(numberlike.name, 'NumberLike'); + assert.equal(numberlike.longname, 'calc.NumberLike'); + }); + +})(); \ No newline at end of file