From df1f4bda222df42ad4e54733b6f3f5e2bfcd3760 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Thu, 6 Nov 2014 20:51:13 -0800 Subject: [PATCH] treat `foo="bar"` as a non-optional version of `[foo="bar"]` (#791) --- lib/jsdoc/tag/type.js | 10 +++++++--- test/fixtures/propertytag.js | 12 +++++++----- test/specs/tags/propertytag.js | 26 ++++++++++++++++---------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/lib/jsdoc/tag/type.js b/lib/jsdoc/tag/type.js index b9dbe7e0..8597b2e8 100644 --- a/lib/jsdoc/tag/type.js +++ b/lib/jsdoc/tag/type.js @@ -153,9 +153,13 @@ function getTagInfo(tagValue, canHaveName, canHaveType) { */ function parseName(tagInfo) { // like '[foo]' or '[ foo ]' or '[foo=bar]' or '[ foo=bar ]' or '[ foo = bar ]' - if ( /^\[\s*(.+?)\s*\]$/.test(tagInfo.name) ) { - tagInfo.name = RegExp.$1; - tagInfo.optional = true; + // or 'foo=bar' or 'foo = bar' + if ( /^(\[)?\s*(.+?)\s*(\])?$/.test(tagInfo.name) ) { + tagInfo.name = RegExp.$2; + // were the "optional" brackets present? + if (RegExp.$1 && RegExp.$3) { + tagInfo.optional = true; + } // like 'foo=bar' or 'foo = bar' if ( /^(.+?)\s*=\s*(.+)$/.test(tagInfo.name) ) { diff --git a/test/fixtures/propertytag.js b/test/fixtures/propertytag.js index 475fe31b..6448182e 100644 --- a/test/fixtures/propertytag.js +++ b/test/fixtures/propertytag.js @@ -1,13 +1,15 @@ /** * @namespace - * @property {Object} defaults The default values. - * @property {Number} defaults.a The a property of the defaults. - * @property {String} defaults.b The b property of the defaults. + * @property {String} id=abc123 The identifier. + * @property {Object} defaults The default values. + * @property {Number} defaults.a The a property of the defaults. + * @property {String} defaults.b The b property of the defaults. */ -myobject = { +var myobject = { + id: "abc123", defaults: { a: 1, b: "Hit the light", c: true } -}; \ No newline at end of file +}; diff --git a/test/specs/tags/propertytag.js b/test/specs/tags/propertytag.js index 5ef94231..3fe20ac4 100644 --- a/test/specs/tags/propertytag.js +++ b/test/specs/tags/propertytag.js @@ -1,15 +1,21 @@ -describe("@property tag", function() { +'use strict'; + +describe('@property tag', function() { var docSet = jasmine.getDocSetFromFile('test/fixtures/propertytag.js'), myobject = docSet.getByLongname('myobject')[0]; - it('When a symbol has an @property tag with a those properties appear in the parsed object.', function() { + it('When a symbol has a @property tag, the property appears in the doclet.', function() { expect(typeof myobject.properties).toBe('object'); - expect(myobject.properties.length).toBe(3); - expect(myobject.properties[0].name).toBe('defaults'); - expect(myobject.properties[1].name).toBe('defaults.a'); - expect(myobject.properties[2].name).toBe('defaults.b'); - expect(myobject.properties[0].description).toBe('The default values.'); - expect(myobject.properties[0].type.names[0]).toBe('Object'); - }); + expect(myobject.properties.length).toBe(4); -}); \ No newline at end of file + expect(myobject.properties[0].name).toBe('id'); + expect(myobject.properties[1].name).toBe('defaults'); + expect(myobject.properties[2].name).toBe('defaults.a'); + expect(myobject.properties[3].name).toBe('defaults.b'); + + expect(myobject.properties[0].defaultvalue).toBe('abc123'); + + expect(myobject.properties[1].description).toBe('The default values.'); + expect(myobject.properties[1].type.names[0]).toBe('Object'); + }); +});